Eğitim işlerini yapılandırma ve gönderme

ŞUNUN IÇIN GEÇERLIDIR:Python SDK azureml v1

Bu makalede, modellerinizi eğitmek için Azure Machine Learning işlerini yapılandırmayı ve göndermeyi öğreneceksiniz. Kod parçacıkları, yapılandırmanın önemli bölümlerini ve bir eğitim betiğinin gönderilmesini açıklar. Ardından, tam uçtan uca çalışma örneklerini bulmak için örnek not defterlerinden birini kullanın.

Eğitim sırasında, yerel bilgisayarınızda başlayıp daha sonra ölçeği bulut tabanlı bir kümeye genişletmek yaygın bir durumdur. Azure Machine Learning ile, eğitim betiğinizi değiştirmek zorunda kalmadan betiğinizi çeşitli işlem hedeflerinde çalıştırabilirsiniz.

Tek yapmanız gereken, bir betik işi yapılandırması içindeki her işlem hedefi için ortamı tanımlamaktır. Ardından, eğitim denemenizi farklı bir işlem hedefinde çalıştırmak istediğinizde, bu işlem için iş yapılandırmasını belirtin.

Önkoşullar

Betik çalıştırma yapılandırması nedir?

ScriptRunConfig, denemenin bir parçası olarak eğitim işi göndermek için gereken bilgileri yapılandırmak için kullanılır.

Eğitim denemenizi bir ScriptRunConfig nesnesiyle gönderirsiniz. Bu nesne şunları içerir:

  • source_directory: Eğitim betiğinizi içeren kaynak dizin
  • betik: Çalıştırılacak eğitim betiği
  • compute_target: Üzerinde çalıştırılacak işlem hedefi
  • ortam: Betiği çalıştırırken kullanılacak ortam
  • ve bazı ek yapılandırılabilir seçenekler (daha fazla bilgi için başvuru belgelerine bakın)

Modelinizi eğitme

Eğitim işi göndermeye yönelik kod düzeni, tüm işlem hedefi türleri için aynıdır:

  1. Çalıştırmak için deneme oluşturma
  2. Betiğin çalıştığı bir ortam oluşturma
  3. İşlem hedefini ve ortamını belirten bir ScriptRunConfig oluşturma
  4. İşi gönderme
  5. İşin tamamlanmasını bekleyin

İsterseniz:

  • Hiper parametre ayarlaması için bir HyperDrive çalıştırması gönderin.
  • VS Code uzantısı aracılığıyla bir deneme gönderin.

Deneme oluşturma

Çalışma alanınızda bir deneme oluşturun. Deneme, iş gönderimlerini düzenlemeye ve kodu izlemeye yardımcı olan hafif bir kapsayıcıdır.

ŞUNUN IÇIN GEÇERLIDIR:Python SDK azureml v1

from azureml.core import Experiment

experiment_name = 'my_experiment'
experiment = Experiment(workspace=ws, name=experiment_name)

İşlem hedefi seçme

Eğitim betiğinizin çalıştırılacağı işlem hedefini seçin. ScriptRunConfig içinde herhangi bir işlem hedefi belirtilmezse veya belirtildiyse compute_target='local'Azure Machine Learning betiğinizi yerel olarak yürütür.

Bu makaledeki örnek kod, "Önkoşullar" bölümünden zaten bir işlem hedefi my_compute_target oluşturduğunuzu varsayar.

Not

  • Azure Databricks, model eğitimi için işlem hedefi olarak desteklenmez. Veri hazırlama ve dağıtım görevleri için Azure Databricks'i kullanabilirsiniz.
  • Azure Arc özellikli Kubernetes kümesinde eğitim için bir işlem hedefi oluşturmak ve eklemek için bkz . Azure Arc özellikli Machine Learning'i yapılandırma

Ortam oluşturun

Azure Machine Learning ortamları , makine öğrenmesi eğitiminizin gerçekleştiği ortamın bir kapsüllemesidir. Eğitim ve puanlama betiklerinizin etrafında Python paketlerini, Docker görüntüsünü, ortam değişkenlerini ve yazılım ayarlarını belirtir. Ayrıca çalışma zamanlarını (Python, Spark veya Docker) belirtir.

Kendi ortamınızı tanımlayabilir veya Azure Machine Learning tarafından seçilmiş bir ortam kullanabilirsiniz. Seçilen ortamlar , çalışma alanınızda varsayılan olarak kullanılabilen önceden tanımlanmış ortamlardır. Bu ortamlar önbelleğe alınmış Docker görüntüleriyle desteklenir ve bu da iş hazırlama maliyetini azaltır. Seçki olarak sunulan ortamların tam listesi için bkz . Azure Machine Learning Seçilmiş Ortamları .

Uzak işlem hedefi için şu popüler seçilmiş ortamlardan birini kullanarak şunlardan başlayabilirsiniz:

ŞUNUN IÇIN GEÇERLIDIR:Python SDK azureml v1

from azureml.core import Workspace, Environment

ws = Workspace.from_config()
myenv = Environment.get(workspace=ws, name="AzureML-Minimal")

Ortamlar hakkında daha fazla bilgi ve ayrıntı için bkz . Azure Machine Learning'de yazılım ortamları oluşturma ve kullanma.

Yerel işlem hedefi

İşlem hedefiniz yerel makinenizse, betiğin çalıştığı Python ortamında tüm gerekli paketlerin kullanılabilir olduğundan emin olmanız gerekir. Geçerli Python ortamınızı (veya belirttiğiniz yolda Python'ı) kullanmak için kullanın python.user_managed_dependencies .

ŞUNUN IÇIN GEÇERLIDIR:Python SDK azureml v1

from azureml.core import Environment

myenv = Environment("user-managed-env")
myenv.python.user_managed_dependencies = True

# You can choose a specific Python environment by pointing to a Python path 
# myenv.python.interpreter_path = '/home/johndoe/miniconda3/envs/myenv/bin/python'

Betik işi yapılandırmasını oluşturma

Artık bir işlem hedefiniz olduğuna göre (my_compute_targetbkz. Önkoşullar ve ortam (myenvbkz. Ortam oluşturma), dizininizde project_folder bulunan eğitim betiğinizi (train.py) çalıştıran bir betik işi yapılandırması oluşturun:

ŞUNUN IÇIN GEÇERLIDIR:Python SDK azureml v1

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory=project_folder,
                      script='train.py',
                      compute_target=my_compute_target,
                      environment=myenv)

Bir ortam belirtmezseniz, sizin için varsayılan bir ortam oluşturulur.

Eğitim betiğinize geçirmek istediğiniz komut satırı bağımsız değişkenleriniz varsa, bunları ScriptRunConfig oluşturucusunun parametresi aracılığıyla arguments belirtebilirsiniz; örneğin, arguments=['--arg1', arg1_val, '--arg2', arg2_val].

İş için izin verilen varsayılan en uzun süreyi geçersiz kılmak istiyorsanız, bunu parametresi aracılığıyla max_run_duration_seconds yapabilirsiniz. Sistem, bu değerden uzun sürerse işi otomatik olarak iptal etmeye çalışır.

Dağıtılmış iş yapılandırmasını belirtme

Dağıtılmış bir eğitim işi çalıştırmak istiyorsanız, parametresine dağıtılmış işe özgü yapılandırmayı distributed_job_config sağlayın. Desteklenen yapılandırma türleri MpiConfiguration, TensorflowConfiguration ve PyTorchConfiguration'dır.

Dağıtılmış Horovod, TensorFlow ve PyTorch işlerini çalıştırma hakkında daha fazla bilgi ve örnek için bkz:

Denemeyi gönderme

ŞUNUN IÇIN GEÇERLIDIR:Python SDK azureml v1

run = experiment.submit(config=src)
run.wait_for_completion(show_output=True)

Önemli

Eğitim işini gönderdiğinizde, eğitim betiklerinizi içeren dizinin anlık görüntüsü oluşturulur ve işlem hedefine gönderilir. Ayrıca çalışma alanınızdaki denemenin bir parçası olarak depolanır. Dosyaları değiştirir ve işi yeniden gönderirseniz, yalnızca değiştirilen dosyalar karşıya yüklenir.

Gereksiz dosyaların anlık görüntüye eklenmesini önlemek için dizinde bir yoksayma dosyası (.gitignore veya .amlignore) oluşturun. Dışlanacak dosyaları ve dizinleri bu dosyaya ekleyin. Bu dosyanın içinde kullanılacak söz dizimi hakkında daha fazla bilgi için bkz. söz dizimi ve desenleri..gitignore Dosya .amlignore aynı söz dizimini kullanır. Her iki dosya da varsa, .amlignore dosya kullanılır ve .gitignore dosya kullanılmaz.

Anlık görüntüler hakkında daha fazla bilgi için bkz . Anlık görüntüler.

Önemli

Özel Klasörler İki klasör, çıkışlar ve günlükler, Azure Machine Learning tarafından özel işlem alır. Eğitim sırasında, kök dizine (./outputs ve sırasıyla) göre çıkışlar ve günlükler adlı klasörlere dosya yazdığınızda, işiniz tamamlandıktan sonra bunlara erişebilmeniz için dosyalar otomatik olarak iş geçmişinize ./logsyüklenir.

Eğitim sırasında yapıtlar (model dosyaları, denetim noktaları, veri dosyaları veya çizilmiş resimler gibi) oluşturmak için bunları klasöre ./outputs yazın.

Benzer şekilde, eğitim işinizden klasöre ./logs herhangi bir günlük yazabilirsiniz. Azure Machine Learning'in TensorBoard tümleştirmesini kullanmak için TensorBoard günlüklerinizi bu klasöre yazdığınızdan emin olun. İşiniz devam ederken TensorBoard'u başlatabilecek ve bu günlükleri akışla aktarabileceksiniz. Daha sonra, günlükleri önceki işlerinizin herhangi birinden de geri yükleyebilirsiniz.

Örneğin, uzak eğitim işinizden sonra outputs klasörüne yazılan bir dosyayı yerel makinenize indirmek için: run.download_file(name='outputs/my_output_file', output_file_path='my_destination_path')

Git izleme ve tümleştirme

Kaynak dizinin yerel git deposu olduğu bir eğitim işi başlattığınızda, depo hakkındaki bilgiler iş geçmişinde depolanır. Daha fazla bilgi için bkz . Azure Machine Learning için Git tümleştirmesi.

Not defteri örnekleri

Çeşitli eğitim senaryoları için işleri yapılandırma örnekleri için şu not defterlerine bakın:

Not defterlerini çalıştırmayı öğrenmek için bkz. Hizmeti keşfetmek için Jupyter not defterlerini kullanma.

Sorun giderme

  • AttributeError: 'RoundTripLoader' nesnesinin 'comment_handling' özniteliği yok: Bu hata, üzerinde hataya neden olan bir değişiklik azureml-coregetiren bir azureml-core bağımlılık olan yeni sürümünden ruamel-yaml(v0.17.5) gelir. Bu hatayı düzeltmek için farklı bir sürümünü ruamel-yamlçalıştırıp pip uninstall ruamel-yaml yükleyerek kaldırınruamel-yaml; desteklenen sürümler v0.15.35 ile v0.17.4 (dahil) arasındadır. bunu komutunu çalıştırarak pip install "ruamel-yaml>=0.15.35,<0.17.5"yapabilirsiniz.

  • İş şu hata iletisiyle jwt.exceptions.DecodeErrorbaşarısız oluyor: jwt.exceptions.DecodeError: It is required that you pass in a value for the "algorithms" argument when calling decode().

    azureml-core'un en son sürümüne yükseltmeyi göz önünde bulundurun: pip install -U azureml-core.

    Ise. yerel işler için bu sorunla karşılaşıyorsunuz, ortamınızda yüklü olan PyJWT sürümünü denetleyin. Burada . iş başlatıyorsunuz. PyJWT'nin desteklenen sürümleri 2.0.0'dır < . Sürüm = 2.0.0 ise >PyJWT'yi ortamdan kaldırın. PyJWT sürümünü denetleyebilir, aşağıdaki gibi doğru sürümü kaldırabilir ve yükleyebilirsiniz:

    1. Bir komut kabuğu başlatın, azureml-core'un yüklü olduğu conda ortamını etkinleştirin.
    2. değerini girin pip freeze ve bulunup bulunmadığına bakınPyJWT, listelenen sürüm 2.0.0 olmalıdır <
    3. Listelenen sürüm desteklenen bir sürüm değilse, pip uninstall PyJWT komut kabuğuna onay için y girin.
    4. pip install 'PyJWT<2.0.0' kullanarak yükleme

    Ise. işinizle birlikte kullanıcı tarafından oluşturulan bir ortam gönderebilirsiniz. Bu ortamda azureml-core'un en son sürümünü kullanmayı göz önünde bulundurun. Sürümler >= azureml-core'un 1.18.0 sürümü PyJWT < 2.0.0'a zaten sabitlenmiştir. Gönderdiğiniz ortamda azureml-core < 1.18.0 sürümünü kullanmanız gerekiyorsa pip bağımlılıklarınızda PyJWT < 2.0.0'ı belirttiğinizden emin olun.

  • ModuleErrors (Adlı modül yok): If . Azure Machine Learning'de deneme gönderirken ModuleErrors ile karşılaşıyorsunuz, eğitim betiği bir paketin yüklenmesini bekliyor ancak eklenmedi. Paket adını sağladıktan sonra Azure Machine Learning, paketi eğitim işiniz için kullanılan ortama yükler.

    Ise. Denemeleri göndermek için Estimators kullanıyorsanız, paketi yüklemek istediğiniz kaynağı temel alarak tahmin aracısında veya conda_packages parametresiyle pip_packages bir paket adı belirtebilirsiniz. Ayrıca parametresini kullanarak pip_requirements_file tüm pip gereksinimlerinizi kullanarak conda_dependencies_filetüm bağımlılıklarınızın bulunduğu bir yml dosyası belirtebilir veya bir txt dosyasında listeleyebilirsiniz. Tahmin aracı tarafından kullanılan varsayılan görüntüyü geçersiz kılmak istediğiniz kendi Azure Machine Learning Ortamı nesneniz varsa, tahmin aracı oluşturucusunun parametresi aracılığıyla environment bu ortamı belirtebilirsiniz.

    Azure Machine Learning tarafından korunan docker görüntüleri ve bunların içerikleri Azure Machine Learning Kapsayıcıları'nda görülebilir. Çerçeveye özgü bağımlılıklar ilgili çerçeve belgelerinde listelenmiştir:

    Not

    Belirli bir paketin Azure Machine Learning bakımlı görüntülerine ve ortamlarına eklenecek kadar yaygın olduğunu düşünüyorsanız lütfen Azure Machine Learning Kapsayıcıları'nda bir GitHub sorunu oluşturun.

  • NameError (Ad tanımlanmadı), AttributeError (Nesnenin özniteliği yok): Bu özel durum eğitim betiklerinizden gelmelidir. Belirli bir ad tanımlanmamış veya öznitelik hatası hakkında daha fazla bilgi edinmek için Azure portalındaki günlük dosyalarına bakabilirsiniz. SDK'dan hata iletisine bakmak için kullanabilirsiniz run.get_details() . Bu, işiniz için oluşturulan tüm günlük dosyalarını da listeler. Lütfen işinizi yeniden göndermeden önce eğitim betiğinize göz atıp hatayı düzelttiğinizden emin olun.

  • İş veya deneme silme: Denemeler, Experiment.archive yöntemi kullanılarak veya "Denemeyi arşivle" düğmesi aracılığıyla Azure Machine Learning stüdyosu istemcisindeki Deneme sekmesi görünümünden arşivlenebilir. Bu eylem, denemeyi liste sorgularından ve görünümlerinden gizler, ancak silmez.

    Tek tek denemelerin veya işlerin kalıcı olarak silinmesi şu anda desteklenmiyor. Çalışma alanı varlıklarını silme hakkında daha fazla bilgi için bkz . Machine Learning hizmeti çalışma alanı verilerinizi dışarı aktarma veya silme.

  • Ölçüm Belgesi çok büyük: Azure Machine Learning'in bir eğitim işinden aynı anda günlüğe kaydedilebilecek ölçüm nesnelerinin boyutuyla ilgili iç sınırları vardır. Liste değerli bir ölçümü günlüğe kaydederken "ölçüm belgesi fazla büyük" hatasıyla karşılaşıyorsanız listeyi daha küçük parçalara ayırmayı deneyin, örneğin:

    run.log_list("my metric name", my_metric[:N])
    run.log_list("my metric name", my_metric[N:])
    

    Azure Machine Learning dahili olarak aynı ölçüm adına sahip blokları bitişik bir listede birleştirir.

  • İşlem hedefinin başlatılması uzun sürüyor: İşlem hedefleri için Docker görüntüleri Azure Container Registry'den (ACR) yüklenir. Azure Machine Learning varsayılan olarak temel hizmet katmanını kullanan bir ACR oluşturur. Çalışma alanınızın ACR'sini standart veya premium katmana geçirmek, görüntüleri oluşturma ve yükleme süresini kısaltabilir. Daha fazla bilgi için bkz. Azure Container Registry hizmet katmanları.

Sonraki adımlar