Uzaktan Yürütme İçin Bazel Kurallarını Uyarlama

Sorun bildir Kaynağı göster Gece · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

Bu sayfa, özel derleme ve test kuralları yazan Bazel kullanıcıları için hazırlanmıştır bağlamında Bazel kurallarının şartlarını anlamak isteyen ele alacağız.

Uzaktan yürütme, Bazel'in veri merkezidir. Bazel, bir gRPC protokolü göz önünde bulunduruyoruz. Uzaktan yürütmeyi bazel-buildfarm, dağıtılmış bir uzaktan yürütme sağlamayı amaçlayan açık kaynak bir proje platformu.

Bu sayfa, farklı terimlerden bahsederken aşağıdaki terminolojiyi ortam türleri veya platformlar:

  • Ana makine platformu: Bazel'in çalıştığı platform.
  • Yürütme platformu - Bazel işlemlerinin çalıştırıldığı yer.
  • Hedef platform: Derleme çıktılarının (ve bazı işlemlerin) çalıştırıldığı yerdir.

Genel Bakış

Uzaktan yürütme için Bazel derlemesini yapılandırırken ve derlemenin uzaktan yürütülmesini sağlamak için bu sayfada açıklanan yönergeleri hatasız olması. Bunun nedeni uzaktan yürütmenin doğası gereğidir:

  • yalıtılmış derleme işlemleri. Derleme araçları durum ve bağımlılıkları korumaz emin olun.

  • Çeşitli yürütme ortamları. Yerel derleme yapılandırması her zaman ortamları için uygun olduğunu unutmayın.

Bu sayfada, özel Bazel uygulanırken ortaya çıkabilecek sorunlar açıklanmaktadır derleme ve test etme kuralları hakkında bilgi edindiniz. Kapsam şu konular:

Araç zinciri kurallarıyla derleme araçlarını çağırma

Bazel araç zinciri kuralı, derleme kuralına derleyiciler ve bağlayıcılar gibi belirli araçların kullanılması ve bunların nasıl yapılandırılacağı (kuralın oluşturucusu tarafından tanımlanan parametreler kullanılarak) Araç zinciri kuralı, derlemeye olanak tanır ve test kuralları oluşturarak derleme araçlarını tahmin edilebilir, önceden yapılandırılmış bir şekilde çağırmak için de geçerlidir. Örneğin, bir araç zinciri kuralı kullanın. PATH, JAVA_HOME veya diğer yerel sağlayıcılardan derleme araçlarını çağırmak yerine uzaktan kumandada eşdeğer değerlere (veya hiç) ayarlanamayan değişkenler yürütme ortamı sağlar.

Şu anda aşağıdakiler için Bazel derleme ve test kurallarında mevcut olan araç zinciri kuralları: Scala, Pas, ve Git, başka diller ve araçlar için de yeni araç zinciri kuralları yürürlükte olan bash olarak değiştirin. Kuralınızın kullandığı araç için bir araç zinciri kuralı yoksa şunları yapabilirsiniz: bir araç zinciri kuralı oluşturun.

Dolaylı bağımlılıkları yönetme

Derleme aracı, derleme işlemlerindeki bağımlılıklara erişebiliyorsa bu işlemler her uzaktan derleme işlemi yürütüldüğü için uzaktan yürütüldüğünde başarısız olur ayrı olarak ele alacağız. Bazı derleme araçları, derleme işlemleri ve araca açıkça dahil edilmeyen erişim bağımlılıkları çağrılmasını sağlayın. Bu durum, uzaktan gerçekleştirilen derleme işlemlerinin başarısız olmasına neden olur.

Örneğin, Bazel durum bilgili bir derleyiciye yerel olarak foo derlemesi talimatını verdiğinde, derleyici, foo'un derleme çıkışlarına yapılan referansları korur. Bazel ardından derleyiciye, foo değerine bağlı olan bar komutunu derlemesi talimatını verir. BUILD dosyasında, çağrısı yapıldığında, işlem aynı olduğu sürece derleyici örneği, her iki işlem için de yürütülür (yerel yürütmede olduğu gibi). Ancak uzaktan yürütme senaryosunda her derleme işlemi bir derleyici örneğini, derleyici durumunu ve bar öğesinin foo kaybedilir ve derleme başarısız olur.

Bazel 0.14.1, bu bağımlılık sorunlarının tespit edilip ortadan kaldırılmasına yardımcı olmak için Bağımlılıklar için uzaktan kumanda ile aynı kısıtlamalara sahip yerel Docker korumalı alanı çok önemlidir. Korumalı alanı kullanarak derlemenizi uzaktan yürütmeye hazırlamak için ve bağımlılıkla ilgili yapı hatalarını belirleyip çözmeye yardımcı olur. Docker Korumalı Alanı ile Bazel Uzaktan Yürütme Sorunlarını Giderme başlıklı makaleyi inceleyin konulu videomuzu izleyin.

Platforma bağlı ikili programları yönetme

Genellikle, ana makine platformunda derlenen bir ikili program, olası bağımlılıklar nedeniyle rastgele uzaktan yürütme platformununa alın. Örneğin, Bazel ile sağlanan SingleJar ikili programı ana makine platformunu hedefler. Ancak, uzaktan yürütme için SingleJar'ın işlemin bir parçası olarak derlenmesi gerekir. uzaktan yürütme platformunu hedefleyecek şekilde yapılandırmalısınız. (Daha fazla bilgi için hedef seçim mantığı.)

Derlemeniz için gereken derleme araçlarının ikili programlarını kaynak kodunuzla göndermeyin komut dosyalarının yürütme platformunuzda güvenli bir şekilde çalıştığından emin değilseniz. Bunun yerine şunlardan biri:

  • Aracın uyumlu olmasını sağlamak için aracın kaynak koduna gönderin veya harici olarak referans verin. geliştirmeyi öğreneceksiniz.

  • Aracı uzaktan yürütme ortamına önceden yükleyin (örneğin, araç zinciri kapsayıcısı) yeterince kararlıysa ve çalıştırmak için araç zinciri kurallarını kullanabilirsiniz.

Yapılandırma stili WORKSPACE kurallarını yönetme

Araçlar için ana makine platformunu araştırmak amacıyla Bazel'ın WORKSPACE kuralları kullanılabilir ve kütüphaneleri de içerir. Yerel derlemeler için Bazel'ın yürütme platformu. Derleme açıkça yerel derleme araçlarına ve uzaktan yürütme platformu tarafından çalıştırılabiliyorsa uzaktan yürütme ana makine platformuyla aynı değildir.

WORKSPACE kuralları tarafından gerçekleştirilen aşağıdaki işlemler uyumlu değil uzaktan yürütme:

  • İkili programlar oluşturma. WORKSPACE kuralda derleme işlemleri yürütülüyor uzaktan yürütme platformuyla uyumlu olmayan ikili programlara neden olur ana makine platformundan farklıysa.

  • pip paket yükleniyor. WORKSPACE üzerinden pip paket yüklendi kuralları, bağımlılıklarının ana makine platformuna önceden yüklenmesini gerektirir. Ana makine platformu için özel olarak derlenen bu paketler, ana makineden farklıysa uzaktan yürütme platformuyla uyumlu değil platformu.

  • Yerel araçlara veya yapılara sembolik bağlantı. Araçların veya kütüphanelerin sembol bağlantıları WORKSPACE kuralları aracılığıyla oluşturulan ana makine platformunda yüklü olduğu için başarısız olacaktır. Bunun nedeni, Bazel’in yerini belirleyebilir. Bunun yerine, standart derleme işlemlerini kullanarak sembolik bağlantılar oluşturun. sembolik araçlara ve kitaplıklara Bazel'in runfiles bağlantısından erişilebilir. ağacı. repository_ctx.symlink etiketini kullanma kullanarak, harici depo dizininin dışındaki hedef dosyaları temsil eder.

  • Ana makine platformu değiştiriliyor. Bazel dışında dosya oluşturmayın runfiles ağacı, ortam değişkenleri oluşturma ve benzer işlemleri uzaktan yürütme platformunda beklenmedik davranışlar sergileyebilirler.

Olası hermetik olmayan davranışları bulmanıza yardımcı olması için Workspace kuralları günlüğünü kullanabilirsiniz.

Bir dış bağımlılık, ana makineye bağlı belirli işlemler yürütüyorsa bu işlemleri WORKSPACE arasında bölüştürmeniz ve şu şekilde çalışır:

  • Platform denetimi ve bağımlılık numaralandırma. Bu işlemler, WORKSPACE kuralları aracılığıyla yerel olarak yürütülebilir. Bu kurallar, kitaplığının yüklenmesi, oluşturulması gereken paketleri indirme ve derlemek için gereken yapı taşlarını oluşturur. Uzaktan yürütme için bu kurallar yeniden kontrol edilmiş yapıların kullanılmasını da destekler, böylece gibi veriler, normalde ana makine platformu incelemesi sırasında elde edilir. Önceden işaretlenmiş yapıları, Bazel’in bağımlılıkları yerelmiş gibi tanımlamasına olanak tanır. Tekliflerinizi otomatikleştirmek ve optimize etmek için koşullu ifadeleri veya bunun için --override_repository işaretini kullanın.

  • Hedefe özel yapılar ve platform değişimi oluşturma veya derleme. Bu işlemler, normal derleme kuralları aracılığıyla yürütülmelidir. Eylemler dış bağımlılıklar için hedefe özgü yapılar üretmesi gerekiyorsa yardımcı oluyorum.

Uzaktan yürütme amacıyla önceden kontrol edilmiş yapıları daha kolay bir şekilde oluşturmak için Oluşturulan dosyaları yayınlamak için WORKSPACE kural. Bu kuralları, oluşturduğunuz her yeni örneğin her araç zinciri container'ının içinde olup olmadığını kontrol edin ve derleme işlemini referans olarak kaynak deponuza ekleyin.

Örneğin, cuda için Tensorflow kurallarında ve python, WORKSPACE kuralları aşağıdaki BUILD files değerini oluşturur. Yerel yürütme için ana makine ortamı kontrol edilerek oluşturulan dosyalar kullanılır. Uzaktan yürütme için koşullu beyan kuralının, giriş yapılan dosyaları kullanmasına izin verir. buyle ilgili daha fazla bilgi edinin.

BUILD dosyalarında genrules belirtilmiş yerel olarak ve uzaktan çalışabilen ve gerekli işlemleri gerçekleştirebilen burada gösterildiği gibi daha önce repository_ctx.symlink üzerinden yapılan işlem.