Aracılığıyla paylaş


Toplu iş uç noktalarının sorunlarını giderme

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)Python SDK azure-ai-ml v2 (geçerli)

Bu makalede, Azure Machine Learning'de toplu puanlama için toplu iş uç noktalarını kullanırken karşılaşılan yaygın hataları gidermeye yönelik yönergeler sağlanır. Aşağıdaki bölümlerde, olası sorunları ve desteklenmeyen senaryoları belirlemek için toplu puanlama günlüklerinin nasıl çözümlendiği açıklanmaktadır. Sık karşılaşılan hataları çözmek için önerilen çözümleri de gözden geçirebilirsiniz.

Toplu puanlama işleri için günlükleri alma

Azure CLI veya REST API kullanarak bir toplu iş uç noktasını çağırdıktan sonra toplu puanlama işi zaman uyumsuz olarak çalışır. Toplu puanlama işinin günlüklerini almak için iki seçenek vardır:

  • 1. Seçenek: İş günlüklerini yerel konsola akışla aktar. Yalnızca azureml-logs klasöründeki günlükler akışla aktarılır.

    Sistem tarafından oluşturulan günlükleri konsolunuza akışla göndermek için aşağıdaki komutu çalıştırın. parametresini <job_name> toplu puanlama işinizin adıyla değiştirin:

    az ml job stream --name <job_name>
    
  • 2. Seçenek: Azure Machine Learning stüdyosu iş günlüklerini görüntüleyin.

    Stüdyoda kullanılacak iş bağlantısını almak için aşağıdaki komutu çalıştırın. parametresini <job_name> toplu puanlama işinizin adıyla değiştirin:

    az ml job show --name <job_name> --query services.Studio.endpoint -o tsv
    
    1. Stüdyoda iş bağlantısını açın.

    2. İşin grafiğinde toplu puanlama adımını seçin.

    3. Çıkışlar + günlükler sekmesinde gözden geçirmek için bir veya daha fazla günlük seçin.

Günlük dosyalarını gözden geçirme

Azure Machine Learning, toplu puanlama işinizin sorunlarını gidermenize yardımcı olmak için kullanabileceğiniz çeşitli günlük dosyası türleri ve diğer veri dosyaları sağlar.

Toplu puanlama günlükleri için iki üst düzey klasör azureml günlükleri ve günlüklerdir. Puanlama betiğini başlatan denetleyiciden alınan bilgiler ~/azureml-logs/70_driver_log.txt dosyasında depolanır.

Üst düzey bilgileri inceleme

Toplu puanlama işlerinin dağıtılmış yapısı farklı kaynaklardan günlüklere neden olur, ancak iki birleştirilmiş dosya üst düzey bilgiler sağlar:

Dosya Açıklama
~/logs/job_progress_overview.txt Oluşturulan geçerli mini toplu iş sayısı (görevler olarak da bilinir) ve işlenen mini toplu işlemlerin geçerli sayısı hakkında üst düzey bilgiler sağlar. Mini toplu işlemlerin işlenmesi sona ererken günlük işin sonuçlarını kaydeder. İş başarısız olursa günlükte hata iletisi ve sorun giderme işleminin nereden başlatıldığı gösterilir.
~/logs/sys/master_role.txt Çalışan işin asıl düğümünü (düzenleyici olarak da bilinir) sağlar. Bu günlük, görev oluşturma, ilerleme izleme ve iş sonucu hakkında bilgi içerir.

Yığın izleme verilerini hatalara karşı inceleme

Diğer dosyalar betiğinizdeki olası hatalar hakkında bilgi sağlar:

Dosya Açıklama
~/logs/user/error.txt Betiğinizdeki hataların özetini sağlar.
~/logs/user/error/* Giriş betiğini yüklerken ve çalıştırırken oluşan özel durumların tam yığın izlemelerini sağlar.

Düğüm başına işlem günlüklerini inceleme

Her düğümün puan betiğinizi nasıl yürüttüğü hakkında ayrıntılı bilgi edinmek için her düğüm için ayrı işlem günlüklerini inceleyin. İşlem günlükleri ~/logs/sys/node klasöründe depolanır ve çalışan düğümlerine göre gruplandırılır.

Klasör, her bir mini toplu iş hakkında ayrıntılı bilgi içeren bir process_name.txt dosyası içeren bir <ip_address>/ alt klasörü içerir.>< Bir çalışan mini toplu işlemi seçtiğinde veya tamamladığında klasör içeriği güncelleştirilir. Her mini toplu iş için günlük dosyası şunları içerir:

  • Çalışan işleminin IP adresi ve işlem kimliği (PID).
  • Toplam öğe sayısı, başarıyla işlenen öğelerin sayısı ve başarısız olan öğelerin sayısı.
  • Başlangıç saati, süre, işlem süresi ve çalıştırma yöntemi zamanı.

Düğüm başına düzenli aralıklı denetimleri inceleme

Ayrıca, her düğüm için kaynak kullanımına ilişkin düzenli aralıklı denetimlerin sonuçlarını da görüntüleyebilirsiniz. Günlük dosyaları ve kurulum dosyaları ~/logs/perf klasöründe depolanır.

Saniye cinsinden --resource_monitor_interval denetim aralığını değiştirmek için parametresini kullanın:

  • Varsayılanı kullan: Varsayılan aralık 600 saniyedir (yaklaşık 10 dakika).
  • Denetimleri durdur: Düğümde denetimleri çalıştırmayı durdurmak için değeri 0 olarak ayarlayın.

Klasör, her mini toplu işlem hakkında bir <ip_address>/ alt klasörü içerir. Bir çalışan mini toplu işlemi seçtiğinde veya tamamladığında klasör içeriği güncelleştirilir. Her mini toplu işlem için klasör aşağıdaki öğeleri içerir:

Dosya veya Klasör Açıklama
işletim sistemi/ Düğümde çalışan tüm işlemler hakkındaki bilgileri depolar. Bir denetim bir işletim sistemi komutu çalıştırır ve sonucu bir dosyaya kaydeder. Linux'ta komutu şeklindedir ps. Klasör aşağıdaki öğeleri içerir:
- %Y%m%d%H: Bir veya daha fazla işlem denetimi dosyası içeren alt klasör. Alt klasör adı, denetimin oluşturma tarihi ve saatidir (Yıl, Ay, Gün, Saat).
processes_%M: Alt klasör içindeki dosya. Dosyada işlem denetimiyle ilgili ayrıntılar gösterilir. Dosya adı, denetim oluşturma zamanına göre denetim zamanıyla (Dakika) biter.
node_disk_usage.csv Düğümün ayrıntılı disk kullanımını gösterir.
node_resource_usage.csv Düğümün kaynak kullanımına genel bakış sağlar.
processes_resource_usage.csv Her işlem için kaynak kullanımına genel bir bakış sağlar.

Puanlama betiğine günlük ekleme

Puanlama betiğinizde Python günlüğünü kullanabilirsiniz. Bu günlükler günlükler /kullanıcı/stdout/<node_id>/işlem<numarası>.stdout.txt dosyasında depolanır.

Aşağıdaki kod, betiğinizde günlüğe kaydetmenin nasıl ekleneceğini gösterir:

import argparse
import logging

# Get logging_level
arg_parser = argparse.ArgumentParser(description="Argument parser.")
arg_parser.add_argument("--logging_level", type=str, help="logging level")
args, unknown_args = arg_parser.parse_known_args()
print(args.logging_level)

# Initialize Python logger
logger = logging.getLogger(__name__)
logger.setLevel(args.logging_level.upper())
logger.info("Info log statement")
logger.debug("Debug log statement")

Sık karşılaşılan hataları giderme

Aşağıdaki bölümlerde toplu uç nokta geliştirme ve tüketimi sırasında oluşabilecek yaygın hatalar ve çözüm adımları açıklanmaktadır.

azureml adlı modül yok

Azure Machine Learning toplu dağıtımı, yüklemede azureml-core paketini gerektirir.

İleti günlüğe kaydedildi: "Adlı azuremlmodül yok".

Neden: Yüklemede azureml-core paket eksik gibi görünüyor.

Çözüm: Paketi conda bağımlılıkları dosyanıza ekleyin azureml-core .

Tahmin dosyasında çıkış yok

Batch dağıtımı, predictions.csv dosyasını depolamak için boş bir klasör bekler. Dağıtım belirtilen klasörde var olan bir dosyayla karşılaştığında, işlem dosya içeriğini yeni çıktıyla değiştirmez veya sonuçlarla yeni bir dosya oluşturmaz.

İleti günlüğe kaydedildi: Belirli bir günlüğe kaydedilen ileti yok.

Neden: Toplu dağıtım mevcut bir predictions.csv dosyasının üzerine yazamaz.

Çözüm: İşlem tahminler için bir çıkış klasörü konumu belirtiyorsa klasörün mevcut bir predictions.csv dosyası içermediğinden emin olun.

Toplu işlem zaman aşımına uğradı

Toplu dağıtım, dağıtımın her toplu işlem için ne kadar beklemesi gerektiğini belirlemek için bir timeout değer kullanır. Toplu işlemin yürütülmesi belirtilen zaman aşımını aştığında toplu dağıtım işlemi durdurur.

Durdurulan işlemler, değerde belirtilen en fazla deneme sayısına kadar yeniden deneniyor max_retries . Her yeniden deneme denemesinde zaman aşımı hatası oluşursa dağıtım işi başarısız olur.

parametresiyle retry_settings her dağıtım için ve max_retries özelliklerini yapılandırabilirsiniztimeout.

İleti günlüğe kaydedildi: "[sayı] saniye içinde ilerleme güncelleştirmesi yok. Bu denetimde ilerleme güncelleştirmesi yok. Son güncelleştirmeden sonra [sayı] saniye bekleyin."

Neden: Toplu yürütme belirtilen zaman aşımını ve en fazla yeniden deneme denemesi sayısını aşıyor. Bu eylem, giriş betiğindeki işlevin run() başarısızlığına karşılık gelir.

Çözüm: Dağıtımınızın değerini artırın timeout . Varsayılan olarak, timeout değer 30 ve max_retries değer 3'dür. Dağıtımınız için uygun timeout bir değer belirlemek için, her toplu işlemde işlenmek üzere dosya sayısını ve dosya boyutlarını göz önünde bulundurun. İşlenmek üzere dosya sayısını azaltabilir ve daha küçük boyutlu mini toplu işlemler oluşturabilirsiniz. Bu yaklaşım daha hızlı yürütmeye neden olur.

ScriptExecution.StreamAccess.Authentication özel durumu

Toplu dağıtımın başarılı olması için işlem kümesinin yönetilen kimliğinin veri varlığı depolamasını bağlama izni olmalıdır. Yönetilen kimliğin izinleri yetersiz olduğunda betik bir özel duruma neden olur. Bu hata, veri varlığı depolamasının bağlanmamasına da neden olabilir.

günlüğe kaydedilen ileti: "ScriptExecutionException' a StreamAccessException neden oldu. StreamAccessException' a AuthenticationException neden oldu."

Neden: Dağıtımın çalıştığı işlem kümesi, veri varlığının bulunduğu depolama alanını bağlayamaz. İşlemin yönetilen kimliğinin bağlamayı gerçekleştirme izinleri yoktur.

Çözüm: Dağıtımınızın çalıştırıldığı işlem kümesiyle ilişkili yönetilen kimliğin depolama hesabına en az Depolama Blob Veri Okuyucusu erişimi olduğundan emin olun. Azure portalında erişim düzeyini yalnızca Azure Depolama hesabı sahipleri değiştirebilir.

Veri kümesi başlatılamadı, veri kümesi bağlanamıyor

Toplu dağıtım işlemi, veri varlığı için bağlı depolama gerektirir. Depolama bağlanmadığında veri kümesi başlatılamaz.

İleti günlüğe kaydedildi: "Veri kümesi başlatılamadı: UserErrorException: İleti: Veri kümesi bağlanamıyor(ID='xxxxxx-xxxx-xxxx-xxxx-xxxx', name='None', version=None). Veri kümesinin kaynağı erişilebilir değil veya veri içermiyor."

Neden: Dağıtımın çalıştığı işlem kümesi, veri varlığının bulunduğu depolama alanını bağlayamaz. İşlemin yönetilen kimliğinin bağlamayı gerçekleştirme izinleri yoktur.

Çözüm: Dağıtımınızın çalıştırıldığı işlem kümesiyle ilişkili yönetilen kimliğin depolama hesabına en az Depolama Blob Veri Okuyucusu erişimi olduğundan emin olun. Azure portalında erişim düzeyini yalnızca Azure Depolama hesabı sahipleri değiştirebilir.

dataset_param belirtilen değere veya varsayılan değere sahip değil

Toplu dağıtım sırasında veri kümesi düğümü parametresine başvurur dataset_param . Dağıtımın devam etmesi için parametrenin atanmış bir değere veya belirtilen varsayılan değere sahip olması gerekir.

İleti günlüğe kaydedildi: "Veri kümesi düğümü [code] belirtilen değere veya varsayılan değere sahip olmayan parametresine dataset_parambaşvuruyor."

Neden: Toplu iş uç noktasına sağlanan giriş veri varlığı desteklenmez.

Çözüm: Dağıtım betiğinin toplu iş uç noktaları için desteklenen bir veri girişi sağladığından emin olun.

Kullanıcı programı başarısız oluyor, çalıştırma başarısız oluyor

Toplu dağıtım için betik yürütme sırasında, veya run() işlevi bir hatayla karşılaşırsainit(), kullanıcı programı veya çalıştırma başarısız olabilir. Oluşturulan günlük dosyasında hata ayrıntılarını gözden geçirebilirsiniz.

İleti günlüğe kaydedildi: "Kullanıcı programı Özel Durum: Çalıştırma başarısız oldu. Ayrıntılar için lütfen günlükleri denetleyin. Günlüklerin düzeni için günlükleri/readme.txt de kontrol edebilirsiniz."

Neden: init() veya run() işlevi, puanlama betiğinin yürütülmesi sırasında bir hata oluşturur.

Çözüm: İşlev hataları hakkındaki ayrıntıları bulmak için şu adımları izleyin:

  1. Azure Machine Learning stüdyosu başarısız toplu dağıtım işi çalıştırmasına gidin ve Çıkışlar + günlükler sekmesini seçin.

  2. İşlem numarası.txt node_identifier>>dosya günlükleri>kullanıcı>hatasını><> açın.<

  3. veya run() işlevi tarafından init() oluşturulan hata iletisini bulun.

ValueError: Birleştirmek için nesne yok

Toplu dağıtımın başarılı olması için, mini toplu iş içindeki her dosyanın geçerli olması ve desteklenen bir dosya türü uygulaması gerekir. MLflow modellerinin dosya türlerinin yalnızca bir alt kümesini desteklediğini unutmayın. Daha fazla bilgi için bkz . Toplu çıkarıma dağıtım yaparken dikkat edilmesi gerekenler.

İleti günlüğe kaydedildi: "ValueError: Birleştirilecek nesne yok."

Neden: Oluşturulan mini toplu işteki tüm dosyalar bozuk veya desteklenmeyen dosya türleridir.

Çözüm: Başarısız dosyalar hakkındaki ayrıntıları bulmak için şu adımları izleyin:

  1. Azure Machine Learning stüdyosu başarısız toplu dağıtım işi çalıştırmasına gidin ve Çıkışlar + günlükler sekmesini seçin.

  2. Kullanıcı>stdout<>node_identifier>>işlem<numarası>.txt dosya günlüklerini>açın.

  3. "ERROR:azureml:Error processing input file" gibi dosya giriş hatasını açıklayan girdileri arayın.

Dosya türü desteklenmiyorsa desteklenen dosyalar listesini gözden geçirin. Giriş verilerinin dosya türünü değiştirmeniz veya bir puanlama betiği sağlayarak dağıtımı özelleştirmeniz gerekebilir. Daha fazla bilgi için bkz. Puanlama betiğiyle MLflow modellerini kullanma.

Başarılı mini toplu işlem yok

Toplu dağıtım işlemi, toplu iş uç noktalarının işlev tarafından beklenen biçimde veri sağlamasını run() gerektirir. Giriş dosyaları bozuk dosyalarsa veya model imzası ile uyumsuzsa işlev run() başarılı bir mini toplu iş döndüremiyor.

İleti günlüğe kaydedildi: "Run() öğesinden başarılı mini toplu iş öğesi döndürülmedi. Lütfen içinde 'response: run()' öğesini https://aka.ms/batch-inference-documentationdenetleyin.

Neden: Toplu iş uç noktası işleve beklenen biçimde run() veri sağlayamadı. Bu sorun, bozuk dosyaların okunmasından veya giriş verilerinin modelin imzası (MLflow) ile uyumsuz olmasından kaynaklanabilir.

Çözüm: Başarısız olan mini toplu işlemle ilgili ayrıntıları bulmak için şu adımları izleyin:

  1. Azure Machine Learning stüdyosu başarısız toplu dağıtım işi çalıştırmasına gidin ve Çıkışlar + günlükler sekmesini seçin.

  2. Kullanıcı>stdout<>node_identifier>>işlem<numarası>.txt dosya günlüklerini>açın.

  3. "Giriş dosyası işlenirken hata oluştu" gibi mini toplu işlem için giriş dosyası hatasını açıklayan girdileri arayın. Ayrıntılar, giriş dosyasının neden doğru okunamediğini açıklamalıdır.

hedef kitleye veya hizmete izin verilmiyor

İzin verilen kullanıcıları (hedef kitleyi), hizmeti ve kaynakları tanımlayan belirli eylemler için Microsoft Entra belirteçleri verilir. Batch Uç Noktası REST API'sinin kimlik doğrulama belirteci parametresini resource olarak https://ml.azure.comayarlamalıdır.

İleti günlüğe kaydedildi: Belirli bir günlüğe kaydedilen ileti yok.

Neden: Farklı bir hedef kitle veya hizmet için verilen bir belirteçle toplu iş uç noktası ve dağıtımı için REST API'yi çağırmaya çalışıyorsunuz.

Çözüm: Bu kimlik doğrulama sorununu çözmek için şu adımları izleyin:

  1. Batch Endpoint REST API için bir kimlik doğrulama belirteci oluşturduğunuzda parametresini resource olarak https://ml.azure.comayarlayın.

    Bu kaynağın REST API'den uç noktayı yönetmek için kullandığınız kaynaktan farklı olduğuna dikkat edin. Tüm Azure kaynakları (toplu iş uç noktaları dahil) yönetim için kaynağı https://management.azure.com kullanır.

  2. Bir toplu iş uç noktası ve dağıtımı için REST API'yi çağırdığınızda, farklı bir hedef kitle veya hizmet için verilen bir belirteci değil Batch Uç Noktası REST API'sine verilen belirteci kullanmaya dikkat edin. Her durumda doğru kaynak URI'sini kullandığınızı onaylayın.

Yönetim API'sini ve iş çağırma API'sini aynı anda kullanmak istiyorsanız iki belirteç gerekir. Daha fazla bilgi için bkz . Toplu iş uç noktaları üzerinde kimlik doğrulaması (REST).

Yönlendirecek geçerli dağıtım yok

Toplu dağıtım işleminin başarılı olması için toplu iş uç noktasının en az bir geçerli dağıtım yolu olmalıdır. Standart yöntem, parametresini kullanarak varsayılan toplu dağıtımı tanımlamaktır defaults.deployment_name .

İleti günlüğe kaydedildi: "Yönlendirecek geçerli dağıtım yok. Lütfen uç noktanın pozitif ağırlık değerlerine sahip en az bir dağıtımı olup olmadığını denetleyin veya yönlendirmek için dağıtıma özgü bir üst bilgi kullanın."

Neden: Varsayılan toplu iş dağıtımı doğru ayarlanmadı.

Çözüm: Yönlendirme sorununu çözmek için aşağıdaki yöntemlerden birini kullanın:

  • parametresinin defaults.deployment_name doğru varsayılan toplu dağıtımını tanımladığı onaylayın. Daha fazla bilgi için bkz . Varsayılan toplu dağıtımı güncelleştirme.

  • Dağıtıma özgü bir üst bilgiyle yolu tanımlayın.

Sınırlamalar ve desteklenmeyen senaryolar

Toplu iş uç noktalarını kullanan makine öğrenmesi dağıtım çözümleri tasarlarken bazı yapılandırmaların ve senaryoların desteklenmediğini unutmayın. Aşağıdaki bölümler desteklenmeyen çalışma alanlarını ve işlem kaynaklarını ve giriş dosyaları için geçersiz türleri tanımlar.

Desteklenmeyen çalışma alanı yapılandırmaları

Toplu dağıtım için aşağıdaki çalışma alanı yapılandırmaları desteklenmez:

  • Karantina özelliği etkin bir Azure Container Registries ile yapılandırılan çalışma alanları
  • Müşteri tarafından yönetilen anahtarlara sahip çalışma alanları

Desteklenmeyen işlem yapılandırmaları

Toplu dağıtım için aşağıdaki işlem yapılandırmaları desteklenmez:

  • Azure ARC Kubernetes kümeleri
  • Azure Kubernetes kümeleri için ayrıntılı kaynak isteği (bellek, vCPU, GPU) (yalnızca örnek sayısı istenebilir)

Desteklenmeyen giriş dosyası türleri

Toplu dağıtım için aşağıdaki giriş dosyası türleri desteklenmez:

  • Tablo veri kümeleri (V1)
  • Klasörler ve Dosya veri kümeleri (V1)
  • MLtable (V2)