Cihazda iş yükü onayı için belirleyici derlemeler gereklidir Kişiselleştirme (ODP) Güvenilir Yürütme Ortamı (TEE), herkese açık Google Cloud'u Gizli Alan (CS) olarak kullanmaya devam edebilirsiniz.
İş yükü görüntüleri, İş yükü onayı için CS (NIST'nin RFC 9334 Uzaktan AT testini kullanır) prosedürler (RATS) Mimarisi).
Bu belgede, artımlılık ölçümüyle ilgili deterministik özellik uygulama ve 1980'lerde odp-federatedcompute depodur. ODP Toplayıcı ve Model Güncelleyici hizmetleri, Gizli Alan. Depo, tüm çalışanlarımız için deterministik derlemeleri destekliyor. ve üretim kullanım alanları için gerekli olan özellikler.
Belirleyici derlemeler
Deterministik yapılar iki ana bileşenden oluşur:
- Gerekli ikili programların derlemesi. Buna jar'lar, paylaşılan kitaplıklar, ve meta verilerdir.
- Temel görüntü ve çalışma zamanı bağımlılıkları. Çalışma zamanı ortamının tabanı görüntüsüdür.
Şu an itibarıyla, ODP Federe Compute deposu şu anda aşağıdaki türleri desteklemektedir: iş yükleri:
- Java + Spring iş yükleri
- Görev Atama, Görev Yönetimi, Toplayıcı
- JNI tensorflow iş yükleriyle Java + Spring
- Model Güncelleyici, Toplayıcı
- Python iş yükleri
- TaskBuilder
Bağımlılıklar
Aşağıdaki liste, ODP'nin determinizmi korumak için kullandığı bağımlılıklardır ve kullanılabilirlik durumu:
- Bazel
- GitHub
- Maven
- PyPi
- Debian anlık görüntüleri
- DockerHub Kayıt Defteri
- Google Container Registry (GCR)
Belirleyici iş yükleri
Tüm iş yükleri Bazel kullanılarak derlenir ve dile özgü araç zincirleri ve container görüntüleri kullanılarak derlenen rules_oci. ÇALIŞMA ALANI dosya karşılık gelen sürümler ve karmalarla tüm bağımlılıkları tanımlar.
Debian anlık görüntüleri
Tüm iş yükü görüntüleri, sağlanan dockerfile bir Debian anlık görüntüsü üzerine oluşturulur. Debian anlık görüntüler, şu verilerle kararlı bir depo anlık görüntüsü sağlar:
- Sistem başlıkları ve kitaplıkları
- Sistem mimarisi
- linux_x86_64
- Debian
- C++ derleyici
Java Spring iş yükleri
Bazel'in
remotejdk_17
derlemek için hermetik Java sağlamak üzere kullanılır. Diğer Java bağımlılıkları
WORKSPACE içinde yönetilir ve tanımlanır
dosyası olarak adlandırılır.
Java Spring iş yükleri,
<service>_application.jar
Kavanoz şunları içerir:
- Java sınıfı dosyaları
META-INF/
- Bazel manifest verileri
build-data.properties
- Bazel derleme verileri
BOOT-INF/
- Oluşturan paketlenmiş jar bağımlılıkları rules_spring'de gösterilecek şekilde ayarlayın.
Resim katmanları
Java Spring iş yükü görüntüsü iki katmandan oluşur:
- Temel resim katmanı
- Java temel resmi:
gcr.io/distroless/java17-debian11
- Java temel resmi:
- İş yükü katmanı
binary_tar.tar
<service>_application.jar
Görüntü yapılandırması
- Giriş noktası
java -jar <service>_application.jar
JNI Tensorflow iş yükleri
JNI Tensorflow iş yükleri, Java Spring iş yüklerinin üzerine kurulmuştur. CEVAP hermetik Clang+LLVM Bazel araç zinciri, önceden oluşturulmuş Clang+LLVM 16 sysroot, makine kodunu derlemek için Debian anlık görüntü görüntüsü tarafından sağlanır.
JNI iş yükleri, libtensorflow.so
adlı paylaşılan bir kitaplıkta derlenir ve birlikte
<service>_application.jar
ile birlikte.
Resim katmanları
JNI tensorflow iş yükü görüntüsü birkaç katmandan oluşur:
- Temel resim katmanı
- Java temel resmi:
gcr.io/distroless/java17-debian11
- Java temel resmi:
- Debian paketinin bağımlılık katmanları Katmanlar deb kullanılarak oluşturulur
debian-snapshot'tan indirilen ve görüntü katmanları olarak yeniden düzenlenen arşivler
libc++1-16_amd64.tar
libc++abi1-16_amd64.tar
libc6_amd64.tar
libunwind-16_amd64.tar
libgcc-s1_amd64.tar
gcc-13-base_amd64.tar
- İş yükü katmanı
binary_tar.tar
<service>_application.jar
libtensorflow-jni.so
libaggregation-jni.so
Görüntü yapılandırması
- Etiketler (Yalnızca TEE'de yayınlanmak üzere oluşturulmuş görüntüler için)
"tee.launch_policy.allow_env_override": "FCP_OPTS"
FCP_OPTS
ortam değişkeninin ayarlanmasına izin verir: gizli boşluk ekleyin. İş yükü, başlangıçta yapılandırmak içinFCP_OPTS
tüketir gerekli parametrelerdir.FCP_OPTS
ortam değişkeni, resim çalıştırıldığında ayarlanır (kurumsal değil) temel alınır.
"tee.launch_policy.log_redirect": "always"
"tee.launch_policy.monitoring_memory_allow": "always"
- Giriş noktası
java -Djava.library.path=. -jar <service>_application.jar
Python iş yükleri
Bazel'in rules_python özelliği hermetik Python 3.10 araç zinciri sağlar. Kilitli pip gereksinimleri dosya pip bağımlılıklarını belirleyici olarak getirmek için kullanılır. Debian anlık görüntüsü görüntü, platforma göre belirgin dağıtımların getirilmesini sağlar uyumluluk ve kaynak dağıtımlarını derlemek için bir C++ araç zinciri sağlar.
Python iş yükleri bir dizi indirilen pip paketinde paket halinde sunulur. Python 3.10 dağıtımı, ODP Python kaynak kodu ve bir Python başlangıcı komut dosyası.
<service>.runfiles/
- Python dağıtımı
python_x86_64-unknown-linux-gnu/
altında depolanır - Kaynak kodu şunun altında saklanır:
com_google_ondevicepersonalization_federatedcompute/
- Pip paketleri
pypi_<dependency_name>/
altında depolanır
- Python dağıtımı
<service>.runfiles_manifest
<service>.runfiles/
dizini için manifest dosyası
<service>
- Python iş yükünü çalıştırmak için Runfiles kullanarak Python komut dosyası
Resim katmanları
Python iş yükü görüntüsü dört katmandan oluşur:
- Temel resim katmanı
- Python temel görüntüsü python:slim
- Çevirmen katmanı
interpreter_layer.jar
<service>/<service>.runfiles/python_x86_64-unknown-linux-gnu/**
- Paketler katmanı
packages_layer.jar
<service>/<service>.runfiles/**/site-packages/**
- İş yükü katmanı
app_tar_manifest.tar
- Kaynak kodu, başlangıç komut dosyası ve manifest içerir.
<service>/<service>.runfiles_manifest
<service>/<service>
<service>/<service>.runfiles/com_google_ondevicepersonalization_federatedcompute/**
- Kaynak kodu, başlangıç komut dosyası ve manifest içerir.
Görüntü yapılandırması
- Giriş noktası
/<service>/<service>
Görüntü oluşturma
İş yükleriniz seçildikten sonra projenizi derleme ve yayınlamaya resim.
Ön koşullar
Prosedür
Görüntüler, sağlanan Docker container'ının içinde derlenmelidir. dockerfile oluşturun. Nihai deterministik görüntülerin oluşturulmasına yardımcı olması için iki komut dosyası sağlanmıştır.
- docker_run.sh
docker_run.sh
, Docker dosyasını Dockerfile'dan oluşturur, Docker arka plan programını iliştirin ve Docker arka plan programını tarafından sağlanan bash komutudur. bash komutundan önce iletilen tüm değişkenler Docker Run flag'leri olarak değerlendirilir.
- build_images.sh
build_images.sh
, tüm resimler içinbazel build
öğesini çalıştırır ve resim karmaları oluşturmak için kullanın.
Tüm resimleri oluştur
./scripts/docker/docker_run.sh "./scripts/build_images.sh"
Her sürüm için beklenen görüntü karmaları şurada bulunabilir: odp-federatedcompute GitHub sürümleri hakkında daha fazla bilgi edinin.
Resimleri yayınlayın
Yayınlama, oci_push Bazel kuralları. Hedef depo, her hizmet için şu şekilde yapılandırılmalıdır: tümü:
- toplayıcı
- toplayıcı
- model_updater
- task_assignment
- task_management
- task_scheduler
- task_builder
Tek bir resim yayınlama
Tek bir resim yayınlamak için:
./scripts/docker/docker_run.sh "bazel run //shuffler/services/<servicename_no_underscore>:<servicename_with_underscore>_image_publish"
Yerleşik görüntüler
Oluşturulan tüm resimlerin içerik üretici tarafından saklanması ve barındırılması gerekir; örneğin GCP yapı kaydı.