Cihaz üzerinde kişiselleştirme birleşik işlem belirleyici derleme

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:

  1. Gerekli ikili programların derlemesi. Buna jar'lar, paylaşılan kitaplıklar, ve meta verilerdir.
  2. 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:

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:

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ı
  • 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çin FCP_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
  • <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ı
  • Ç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/**

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çin bazel 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ı.