mirror of
https://github.com/clearlinux/graphene.git
synced 2026-09-04 04:41:37 +00:00
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.
182 lines
8.0 KiB
Plaintext
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"
|