Files
graphene/Examples/pytorch/pytorch.manifest.template
Paweł Marczewski 17ab04db59 [Pal,LibOS] New logging system
Instead of 'loader.debug_type', introduce 'loader.log_level'
and 'loader.log_file', along with a set of definitions for
logging at a chosen level.

For now, the call sites keep using the legacy macros (SGX_DBG and
debug()), because converting them all will conflict with other
big changes in the code base. The existing LibOS calls are
assumed to be at 'info' level.
2021-01-20 17:27:29 +01:00

182 lines
8.0 KiB
Plaintext

# PyTorch manifest template
#
# This manifest was tested on Ubuntu 16.04 and 18.04.
libos.entrypoint = "file:$(PYTHON3)"
# Path to the library OS
loader.preload = "file:$(GRAPHENEDIR)/Runtime/libsysdb.so"
# Graphene log level
loader.log_level = "$(GRAPHENE_LOG_LEVEL)"
# Read application arguments directly from the command line. Don't use this on production!
loader.insecure__use_cmdline_argv = 1
# Propagate environment variables from the host. Don't use this on production!
loader.insecure__use_host_env = 1
# Overwrite some environment variables
loader.env.LD_LIBRARY_PATH = "/lib:/usr/lib:$(ARCH_LIBDIR):/usr/$(ARCH_LIBDIR)"
# Default glibc files, mounted from the Runtime directory in GRAPHENEDIR
fs.mount.lib.type = "chroot"
fs.mount.lib.path = "/lib"
fs.mount.lib.uri = "file:$(GRAPHENEDIR)/Runtime/"
# More libraries required by PyTorch
fs.mount.lib2.type = "chroot"
fs.mount.lib2.path = "$(ARCH_LIBDIR)"
fs.mount.lib2.uri = "file:$(ARCH_LIBDIR)"
fs.mount.usr.type = "chroot"
fs.mount.usr.path = "/usr"
fs.mount.usr.uri = "file:/usr"
# Host-level directory to NSS files required by Glibc + NSS libs
fs.mount.etc.type = "chroot"
fs.mount.etc.path = "/etc"
fs.mount.etc.uri = "file:/etc"
# Workload needs to create temporary files
fs.mount.tmp.type = "chroot"
fs.mount.tmp.path = "/tmp"
fs.mount.tmp.uri = "file:/tmp"
# PyTorch loads its pre-trained models from here
# Uncomment lines below if you want to use torchvision.model.alexnet(pretrained=True)
# fs.mount.torch.type = "chroot"
# fs.mount.torch.path = "$(HOME)/.cache/torch"
# fs.mount.torch.uri = "file:$(HOME)/.cache/torch"
# When run as `pip install --user ...`, pip installs Python packages here
fs.mount.pip.type = "chroot"
fs.mount.pip.path = "$(HOME)/.local/lib"
fs.mount.pip.uri = "file:$(HOME)/.local/lib"
# SGX general options
# Set the virtual memory size of the SGX enclave. For SGX v1, the enclave
# size must be specified during signing. If the workload needs more virtual memory
# than the enclave size, Graphene will not be able to allocate it.
#
# In particular, libtorch*.so is more than 1G, thus 4G is the minimum to make this run.
sgx.enclave_size = "4G"
# Set the maximum number of enclave threads. For SGX v1, the number of enclave
# TCSes must be specified during signing, so the application cannot use more
# threads than the number of TCSes. Note that Graphene also creates an internal
# thread for handling inter-process communication (IPC), and potentially another
# thread for asynchronous events. Therefore, the actual number of threads that
# the application can create is (sgx.thread_num - 2).
#
# We (somewhat arbitrarily) specify 128 threads for this workload.
sgx.thread_num = 128
# SGX trusted libraries
sgx.trusted_files.python3 = "file:$(PYTHON3)"
sgx.trusted_files.ld = "file:$(GRAPHENEDIR)/Runtime/ld-linux-x86-64.so.2"
sgx.trusted_files.libc = "file:$(GRAPHENEDIR)/Runtime/libc.so.6"
sgx.trusted_files.libdl = "file:$(GRAPHENEDIR)/Runtime/libdl.so.2"
sgx.trusted_files.libm = "file:$(GRAPHENEDIR)/Runtime/libm.so.6"
sgx.trusted_files.libpthread = "file:$(GRAPHENEDIR)/Runtime/libpthread.so.0"
sgx.trusted_files.libresolv = "file:$(GRAPHENEDIR)/Runtime/libresolv.so.2"
sgx.trusted_files.librt = "file:$(GRAPHENEDIR)/Runtime/librt.so.1"
sgx.trusted_files.libutil = "file:$(GRAPHENEDIR)/Runtime/libutil.so.1"
sgx.trusted_files.libnssdns = "file:$(GRAPHENEDIR)/Runtime/libnss_dns.so.2"
sgx.trusted_files.libstdc = "file:/usr/$(ARCH_LIBDIR)/libstdc++.so.6"
sgx.trusted_files.libgccs = "file:$(ARCH_LIBDIR)/libgcc_s.so.1"
# Ubuntu16.04 sgx.trusted_files.libaptpkg = "file:/usr/$(ARCH_LIBDIR)/libapt-pkg.so.5.0"
# Ubuntu18.04 sgx.trusted_files.libaptpkg = "file:/usr/$(ARCH_LIBDIR)/libapt-pkg.so.5.0"
# Ubuntu20.04 sgx.trusted_files.libaptpkg = "file:/usr/$(ARCH_LIBDIR)/libapt-pkg.so.6.0"
sgx.trusted_files.liblz4 = "file:/usr/$(ARCH_LIBDIR)/liblz4.so.1"
sgx.trusted_files.libsystemd = "file:$(ARCH_LIBDIR)/libsystemd.so.0"
sgx.trusted_files.libselinux = "file:$(ARCH_LIBDIR)/libselinux.so.1"
# Ubuntu16.04 sgx.trusted_files.libgcrypt = "file:$(ARCH_LIBDIR)/libgcrypt.so.20"
# Ubuntu18.04 sgx.trusted_files.libgcrypt = "file:$(ARCH_LIBDIR)/libgcrypt.so.20"
sgx.trusted_files.libpcre = "file:$(ARCH_LIBDIR)/libpcre.so.3"
sgx.trusted_files.libgpgerror = "file:$(ARCH_LIBDIR)/libgpg-error.so.0"
sgx.trusted_files.libexpat = "file:$(ARCH_LIBDIR)/libexpat.so.1"
sgx.trusted_files.libz = "file:$(ARCH_LIBDIR)/libz.so.1"
sgx.trusted_files.libz2 = "file:$(ARCH_LIBDIR)/libbz2.so.1.0"
sgx.trusted_files.liblzma = "file:$(ARCH_LIBDIR)/liblzma.so.5"
sgx.trusted_files.libmpdec = "file:/usr/$(ARCH_LIBDIR)/libmpdec.so.2"
# Ubuntu16.04 sgx.trusted_files.libcrypto = "file:$(ARCH_LIBDIR)/libcrypto.so.1.0.0"
# Ubuntu16.04 sgx.trusted_files.libssl = "file:$(ARCH_LIBDIR)/libssl.so.1.0.0"
# Ubuntu18.04 sgx.trusted_files.libcrypto = "file:/usr/$(ARCH_LIBDIR)/libcrypto.so.1.1"
# Ubuntu18.04 sgx.trusted_files.libssl = "file:/usr/$(ARCH_LIBDIR)/libssl.so.1.1"
# Name Service Switch (NSS) libraries (Glibc dependencies)
sgx.trusted_files.libnssfiles = "file:$(ARCH_LIBDIR)/libnss_files.so.2"
sgx.trusted_files.libnsscompat = "file:$(ARCH_LIBDIR)/libnss_compat.so.2"
sgx.trusted_files.libnssnis = "file:$(ARCH_LIBDIR)/libnss_nis.so.2"
sgx.trusted_files.libnsl = "file:$(ARCH_LIBDIR)/libnsl.so.1"
sgx.trusted_files.libnssmyhostname = "file:$(ARCH_LIBDIR)/libnss_myhostname.so.2"
sgx.trusted_files.libnssmdns = "file:$(ARCH_LIBDIR)/libnss_mdns4_minimal.so.2"
# The script to run
sgx.trusted_files.script = "file:pytorchexample.py"
# required by Python package ctypes (lib/python3.6/lib-dynload/ctypes.cpython-36m-x86_64-linux-gnu.so)
# Ubuntu18.04 sgx.trusted_files.libffi = "file:/usr/$(ARCH_LIBDIR)/libffi.so.6"
# File containing the classes, i.e., things the classifier has been trained to distinguish between
sgx.trusted_files.classes = "file:classes.txt"
# Input image
sgx.trusted_files.image = "file:input.jpg"
# File containing the pre-trained model
# Uncomment lines below if you want to use torchvision.model.alexnet(pretrained=True)
# sgx.trusted_files.torch = "file:$(HOME)/.cache/torch/checkpoints/alexnet-owt-4df8aa71.pth"
# Pre-trained model saved as a file
sgx.trusted_files.model = "file:alexnet-pretrained.pt"
# Scratch space
sgx.allowed_files.tmp = "file:/tmp"
# Various locations where Python dependencies are found
sgx.allowed_files.python3 = "file:/usr/lib/python3"
sgx.allowed_files.pythonhome = "file:$(HOME)/.local/lib"
# Ubuntu16.04 sgx.allowed_files.python35 = "file:/usr/lib/python3.5"
# Ubuntu18.04 sgx.allowed_files.python36 = "file:/usr/lib/python3.6"
# Ubuntu16.04 sgx.allowed_files.python35local = "file:/usr/local/lib/python3.5"
# Ubuntu18.04 sgx.allowed_files.python36local = "file:/usr/local/lib/python3.6"
# APT config files
sgx.allowed_files.aptconfd = "file:/etc/apt/apt.conf.d"
sgx.allowed_files.aptconf = "file:/etc/apt/apt.conf"
sgx.allowed_files.apport = "file:/etc/default/apport"
# Name Service Switch (NSS) files (Glibc reads these files)
sgx.allowed_files.nsswitch = "file:/etc/nsswitch.conf"
sgx.allowed_files.group = "file:/etc/group"
sgx.allowed_files.passwd = "file:/etc/passwd"
# DNS hostname resolution files (Glibc reads these files)
sgx.allowed_files.hostconf = "file:/etc/host.conf"
sgx.allowed_files.hosts = "file:/etc/hosts"
sgx.allowed_files.gaiconf = "file:/etc/gai.conf"
sgx.allowed_files.resolv = "file:/etc/resolv.conf"
# System's file system table
sgx.allowed_files.fstab = "file:/etc/fstab"
sgx.nonpie_binary = 1
# Graphene optionally provides patched OpenMP runtime library that runs faster
# inside SGX enclaves (execute `make -C LibOS gcc` to generate it). Uncomment
# the lines below to use the patched library. PyTorch's SGX perf overhead
# decreases on some workloads from 25% to 8% with this patched library. Note
# that we need to preload the library because PyTorch's distribution renames
# libgomp.so to smth like libgomp-7c85b1e2.so.1, so it's not just a matter of
# searching in the Graphene's Runtime path first, but a matter of intercepting
# OpenMP functions.
# loader.env.LD_PRELOAD = "/lib/libgomp.so.1"
# sgx.trusted_files.libgomp = "file:$(GRAPHENEDIR)/Runtime/libgomp.so.1"