Aracılığıyla paylaş


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

ŞUNLAR 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 temel bölümlerini ve eğitim betiğinin gönderilmesini açıklar. Ardından uçtan uca çalışma örneklerinin tamamını bulmak için örnek not defterlerinden birini kullanın.

Eğitim sırasında genellikle yerel bilgisayarınızda çalışmaya başlanır ve daha sonra ölçeği bulut tabanlı bir kümeye genişletilir. Azure Machine Learning ile betiğinizi eğitim betiğinizi değiştirmek zorunda kalmadan ç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.

Ön koşullar

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

ScriptRunConfig, bir denemenin 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
  • environment: 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 deseni, tüm işlem hedefi türleri için aynıdır:

  1. Çalıştırılacak deneme oluşturma
  2. Betiğin çalıştırılacağı 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:

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.

from azureml.core import Experiment

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

İşlem hedefi seçme

Eğitim betiğinizin üzerinde çalışacağı işlem hedefini seçin. ScriptRunConfig içinde herhangi bir işlem hedefi belirtilmezse veya ise 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. Azure Databricks'i veri hazırlama ve dağıtım görevleri için kullanabilirsiniz.

Not

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şturma

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, iş hazırlama maliyetini azaltan önbelleğe alınmış Docker görüntüleriyle desteklenir. Kullanılabilir seçilmiş ortamların tam listesi için bkz. Azure Machine Learning Seçilmiş Ortamları .

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

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ılar için bkz. Azure Machine Learning'de kullanım yazılımı ortamları oluşturma&.

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 .

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:

from azureml.core import ScriptRunConfig

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

# Set compute target
# Skip this if you are running on your local computer
script_run_config.run_config.target = my_compute_target

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 daha uzun sürerse işi otomatik olarak iptal etmeye çalışır.

Dağıtılmış iş yapılandırması 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 örnekler için bkz:

Denemeyi gönderme

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ızda 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) yapın. 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 .gitignoredizimi ve desenleri. 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 Çıkışlar ve günlükler adlı iki klasör, Azure Machine Learning tarafından özel işlem alır. Eğitim sırasında, kök dizine (./outputs ve ./logssı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 yüklenir.

Eğitim sırasında yapıtlar (model dosyaları, denetim noktaları, veri dosyaları veya çizilmiş görüntüler 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üklerin akışını yapabileceksiniz. 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ılmış 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 bir 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' nesnesi 'comment_handling' özniteliğine sahip değil: Bu hata, yeni sürümünden (v0.17.5) ruamel-yamlgelir ve bu azureml-core bağımlılıkta hataya neden olan bir değişikliktir azureml-core. Bu hatayı düzeltmek için lütfen 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. komutunu çalıştırarak pip install "ruamel-yaml>=0.15.35,<0.17.5"bunu 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.

    Yerel işler için bu sorunla karşılanıyorsanız, işleri başlatmakta olduğunuz ortamınızda yüklü olan PyJWT sürümünü denetleyin. PyJWT'nin desteklenen sürümleri 2.0.0'dır < . Sürüm = 2.0.0 ise >PyJWT'yi ortamdan kaldırın. Aşağıda gösterildiği gibi PyJWT sürümünü denetleyebilir, kaldırabilir ve doğru sürümü 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 komut pip uninstall PyJWT kabuğuna onay için y girin.
    4. pip install 'PyJWT<2.0.0' kullanarak yükleme

    İşinizle birlikte kullanıcı tarafından oluşturulan bir ortam gönderiyorsanız, 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):: Azure Machine Learning'de denemeler gönderirken ModuleErrors ile karşınıza çıkarsa eğitim betiği bir paketin yüklenmesini bekler ancak eklenmez. Paket adını sağladıktan sonra, Azure Machine Learning paketi eğitim işiniz için kullanılan ortama yükler.

    Denemeleri göndermek için Tahmin Aracı'nı kullanıyorsanız, paketi hangi kaynaktan yüklemek istediğinize bağlı olarak tahmin aracında aracılığıyla veya conda_packages parametresiyle bir paket adı pip_packages belirtebilirsiniz. Ayrıca parametresini kullanarak tüm pip gereksinimlerinizi kullanarak conda_dependencies_filetüm bağımlılıklarınızla bir yml dosyası belirtebilir veya bir txt dosyasında pip_requirements_file 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'de tutulan 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'de bakımı yapılan görüntülere ve ortamlara 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. Tanımlanmayan ad veya öznitelik hatası hakkında daha fazla bilgi edinmek için Azure portal günlük dosyalarına bakabilirsiniz. SDK'dan hata iletisine bakmak için komutunu 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 Azure Machine Learning stüdyosu istemcisindeki Deneme sekmesi görünümünden "Denemeyi arşivle" düğmesiyle 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 boyutu üzerinde 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. Varsayılan olarak, Azure Machine Learning 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