Eğitim çalıştırmalarını yapılandırma ve gönderme
bu makalede, modellerinizi eğitmek için Azure Machine Learning çalıştırmalarını yapılandırmayı ve göndermeyi öğreneceksiniz. Kod parçacıkları, bir eğitim betiğinin yapılandırma ve göndermesinin temel kısımlarını açıklamaktadır. Ardından, uçtan uca tam çalışma örneklerini bulmak için örnek not defterlerinden birini kullanın.
Eğitim sırasında, yerel bilgisayarınızda başlamak ve daha sonra bulut tabanlı bir kümeye genişletmek yaygın bir şekilde yapılır. Azure Machine Learning, komut dosyanızı, eğitim betiğinizi değiştirmek zorunda kalmadan çeşitli işlem hedeflerinde çalıştırabilirsiniz.
Yapmanız gereken tek şey, bir komut dosyası çalıştırma yapılandırması içindeki her bir işlem hedefi için ortamı tanımlamaktır. Daha sonra eğitim denemenizi farklı bir işlem hedefinde çalıştırmak istediğinizde, bu işlem için çalıştırma yapılandırmasını belirtin.
Önkoşullar
- Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun. Azure Machine Learning ücretsiz veya ücretli sürümünü bugün deneyin
- Python için Azure Machine Learning SDK (>= 1.13.0)
- Azure Machine Learning çalışma alanı,
ws - İşlem hedefi,
my_compute_target. İşlem hedefi oluştur
Betik çalıştırma Yapılandırması nedir?
Bir deneme kapsamında bir eğitim çalışması göndermek için gereken bilgileri yapılandırmak üzere bir ScriptRunConfig kullanılır.
Eğitim denemenizi bir ScriptRunConfig nesnesi ile gönderebilirsiniz. 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 çalışması göndermek için kod deseninin her türlü bilgi işlem hedefi vardır:
- Çalıştırmak için bir deneme oluşturun
- Betiğin çalışacağı bir ortam oluşturun
- İşlem hedefini ve ortamı belirten bir ScriptRunConfig oluşturun
- Çalıştırmayı gönder
- Çalıştırmanın tamamlanmasını bekleyin
İsterseniz şunları yapabilirsiniz:
- Hiper parametre ayarlamaIçin bir Hyperdrive çalıştırması gönderebilirsiniz.
- VS Code uzantısıaracılığıyla bir deneme gönderir.
Deneme oluşturma
Çalışma alanınızda bir deneme oluşturun. Bir experiemnt, çalışma gönderimlerini düzenlemenize ve kodun izlenmesini sağlamaya 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)
Bir işlem hedefi seçin
Eğitim betiğinizin çalışacağı işlem hedefini seçin. ScriptRunConfig içinde herhangi bir işlem hedefi belirtilmemişse veya compute_target='local' Azure ML, komut dosyanızı yerel olarak yürütecektir.
Bu makaledeki örnek kod, my_compute_target "Önkoşullar" bölümünde zaten bir işlem hedefi oluşturmuş olduğ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 kullanabilirsiniz.
Not
Azure Arc özellikli Kubernetes kümesinde eğitim için işlem hedefi oluşturmak ve eklemek için bkz. Azure Arc özellikli Machine Learning
Ortam oluşturma
Azure Machine Learning ortamlar , Machine Learning eğitiminin gerçekleştiği ortamın kapsüllenmesi. Bunlar, eğitim ve Puanlama betikleriniz etrafında Python paketlerini, Docker görüntüsünü, ortam değişkenlerini ve yazılım ayarlarını belirler. Bunlar ayrıca çalışma zamanlarını belirtir (Python, Spark veya Docker).
kendi ortamınızı tanımlayabilir ya da Azure ML seçkin bir ortam kullanabilirsiniz. Seçkin ortamlar , varsayılan olarak çalışma alanınızda kullanılabilir olan önceden tanımlanmış ortamlardır. Bu ortamlar çalıştırma hazırlığı maliyetini düşüren önbelleğe alınmış Docker görüntüleriyle desteklenir. kullanılabilir tüm ortamların tam listesi için bkz. Azure Machine Learning seçkin ortamlar .
Uzaktan işlem hedefi için, aşağıdaki popüler ortamlarından birini kullanarak şunları yapabilirsiniz:
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 yazılım ortamları oluşturma & kullanma.
Yerel işlem hedefi
İşlem hedefinizin yerel makineniz olması durumunda, gerekli tüm paketlerin betiğin çalıştığı Python ortamında kullanılabilir olmasını sağlamaktan siz sorumlusunuz. python.user_managed_dependenciesGeçerli Python ortamınızı (veya belirttiğiniz yolda Python) kullanmak için kullanın.
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 çalıştırma yapılandırmasını oluşturma
Artık bir işlem hedefine sahip olduğunuza göre (bkz my_compute_target . Önkoşullar ve ortam ( myenv bkz. ortam oluşturma), dizininizde bulunan eğitim betiğinizi () çalıştıran bir betik çalıştırma yapılandırması oluşturma train.py project_folder :
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ğe geçirmek istediğiniz komut satırı bağımsız değişkenlerinizin varsa, arguments ScriptRunConfig oluşturucusunun parametresi aracılığıyla bunları belirtebilirsiniz, örneğin arguments=['--arg1', arg1_val, '--arg2', arg2_val] .
Çalıştırma için izin verilen varsayılan en uzun süreyi geçersiz kılmak istiyorsanız, bunu parametresi aracılığıyla yapabilirsiniz max_run_duration_seconds . Sistem, bu değerden daha uzun sürerse, çalıştırmayı otomatik olarak iptal etmeye çalışacaktır.
Dağıtılmış iş yapılandırması belirtme
Dağıtılmış bir eğitim işi çalıştırmak istiyorsanız, parametreye dağıtılmış işe özgü yapılandırmayı sağlayın distributed_job_config . Desteklenen yapılandırma türleri, Mpiconation, Tensorflowconfigurationve pytorchconfigurationiçerir.
Dağıtılmış Horovod, TensorFlow ve PyTorch işlerini çalıştırmaya yönelik daha fazla bilgi ve örnek için bkz.:
Denemeyi gönderme
run = experiment.submit(config=src)
run.wait_for_completion(show_output=True)
Önemli
Eğitim çalıştırmasını gönderdiğinizde, eğitim betiklerinizi içeren dizinin bir 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 da depolanır. Dosyaları değiştirir ve çalışmayı yeniden gönderirseniz yalnızca değiştirilen dosyalar karşıya yüklenir.
Gereksiz dosyaların anlık görüntüye eklenmesini engellemek için, dizinde bir yoksayma dosyası ( .gitignore veya .amlignore ) oluşturun. Dışlanacak dosyaları ve dizinleri bu dosyaya ekleyin. Bu dosya içinde kullanılacak sözdizimi hakkında daha fazla bilgi için bkz. sözdizimi ve desenleri .gitignore . .amlignoreDosya aynı sözdizimini 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ış ve günlük, Azure Machine Learning özel bir işleme alır. Eğitim sırasında, kök dizine (ve sırasıyla) göre olan çıktılar ve Günlükler adlı klasörlere dosya yazdığınızda ./outputs ./logs , çalışma işlemi tamamlandıktan sonra dosyalara erişmeniz için dosyalar otomatik olarak çalıştırma geçmişinize yüklenir.
Eğitim sırasında (model dosyaları, kontrol noktaları, veri dosyaları veya çizilmiş görüntüler gibi) yapıt oluşturmak için bunları ./outputs klasörüne yazın.
Benzer şekilde, eğitim çalıştırınızdan klasöre her türlü günlüğü de yazabilirsiniz ./logs . Azure Machine Learning tensorboard tümleştirmesini kullanmak için, tensorboard günlüklerinizi bu klasöre yazdığınızdan emin olun. Çalışma işlemi devam ederken, TensorBoard 'ı başlatabilir ve bu günlükleri akıtırabileceksiniz. Daha sonra, günlükleri önceki çalıştırabileceksiniz herhangi birinden geri yükleyebilirsiniz.
Örneğin, uzak eğitime çalıştıktan sonra çıktılar 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 çalıştırması başlattığınızda, depo hakkındaki bilgiler çalıştırma 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ında çalıştırmaları yapılandırma örnekleri için bu not defterlerine bakın:
- Çeşitli işlem hedeflerine yönelik eğitim
- ML çerçeveler ile eğitim
- Öğreticiler/img-Classification-part1-Training. ipynb
Not defterlerini çalıştırmayı öğrenmek için bkz. Hizmeti keşfetmek için Jupyter not defterlerini kullanma.
Sorun giderme
AttributeError: ' Roundtııle Yükleyicisi ' nesnesi ' comment_handling ' özniteliğine sahip değil: Bu hata, ' ın yeni sürümünden (v 0.17.5) gelir
ruamel-yamlazureml-core, bunun için bir son değişiklik sunan bir bağımlılıkazureml-core. Bu hatayı çözebilmek için lütfenruamel-yamlpip uninstall ruamel-yamlfarklı bir sürümünü çalıştırıp yükleyerek kaldırınruamel-yaml; Desteklenen sürümler v 0.15.35 to v 0.17.4 (dahil). Bunu çalıştırarak yapabilirsinizpip install "ruamel-yaml>=0.15.35,<0.17.5".Çalıştırma başarısız
jwt.exceptions.DecodeError: tam hata iletisi:jwt.exceptions.DecodeError: It is required that you pass in a value for the "algorithms" argument when calling decode().En son azureml-Core sürümüne yükseltmeyi göz önünde bulundurun:
pip install -U azureml-core.Bu sorunu yerel çalıştırmalar için çalıştırıyorsanız, ortamınızda çalıştırmalarının çalıştırıldığı PyJWT sürümünün sürümünü denetleyin. PyJWT 'nin desteklenen sürümleri < 2.0.0. Sürüm >= 2.0.0 olduğunda PyJWT öğesini ortamdan kaldırın. PyJWT sürümünü denetleyebilir, doğru sürümü aşağıdaki şekilde kaldırıp yükleyebilirsiniz:
- Bir komut kabuğu başlatın, azureml, azureml 'nın yüklü olduğu Conda ortamını etkinleştirin.
pip freezePyJWTBulunursa, listelenen sürümün < 2.0.0 olması gerektiğini belirtin- Listelenen sürüm desteklenen bir sürüm değilse,
pip uninstall PyJWTkomut kabuğu 'nda, onay için y girin. pip install 'PyJWT<2.0.0'kullanarak yükleme
Çalıştırılmasıyla birlikte Kullanıcı tarafından oluşturulan bir ortam gönderiyorsanız, bu ortamda en son azureml-çekirdek sürümünü kullanmayı düşünün. Sürümler >= 1.18.0 of azureml-Core zaten pin PyJWT < 2.0.0. Gönderdiğiniz ortamda bir azureml-Core < 1.18.0 sürümü kullanmanız gerekiyorsa, PIP bağımlılıklarınız içinde PyJWT < 2.0.0 belirttiğinizden emin olun.
moduleerrors (modül adı yok): Azure ML 'de denemeleri gönderirken modulehatalarıyla karşılaşırsanız, eğitim betiği bir paketin yüklenmesini bekliyor ancak bu, eklenmez. paket adını sağladığınızda Azure ML, paketi eğitim çalıştırınızdan kullanılan ortama yüklenir.
Denemeleri göndermek için estimators kullanıyorsanız, paketi
pip_packagesconda_packagesyüklemek istediğiniz kaynağı temel alarak tahmin aracı 'da veya parametresi aracılığıyla bir paket adı belirtebilirsiniz. Ayrıca, tüm bağımlılıklarınızı kullanarak bir de bir de belirtebilirsinizconda_dependencies_fileveya parametresini kullanarak bir txt dosyasındaki tüm PIP gereksinimlerinizi listeleyinpip_requirements_file. tahmin aracı tarafından kullanılan varsayılan görüntüyü geçersiz kılmak istediğiniz Azure ML ortamı nesneniz varsa, bu ortamıenvironmenttahmin aracı oluşturucusunun parametresi aracılığıyla belirtebilirsiniz.Azure ML tarafından korunan docker görüntüleri ve bunların içerikleri, AzureML kapsayıcılarındagörülebilir. Çerçeveye özgü bağımlılıklar ilgili Framework belgelerinde listelenmiştir:
Not
belirli bir paketin Azure ML korunan görüntülere ve ortamlara eklenmek üzere yeterince yaygın olduğunu düşünüyorsanız, lütfen AzureML kapsayıcılarındabir GitHub sorunu yükseltin.
NameError (ad tanımlı değil), AttributeError (nesne bir özniteliğe sahip değil): Bu özel durum eğitim betiklerinden gelmelidir. Tanımlı bir ad veya öznitelik hatası hakkında daha fazla bilgi edinmek için, Azure portal günlük dosyalarına bakabilirsiniz. SDK 'dan,
run.get_details()hata iletisine bakmak için ' i kullanabilirsiniz. Bu, çalıştırma için oluşturulan tüm günlük dosyalarını da listeler. Lütfen eğitim betiğe göz atın ve çalıştırmayı yeniden göndermeden önce hatayı düzeltemedi.çalıştırma veya deneme silme: denemeleri, deneme. arşiv yöntemi kullanılarak veya Azure Machine Learning studio istemcisindeki deneme sekmesi görünümünden "arşiv denemesi" düğmesi aracılığıyla arşivlenebilir. Bu eylem, sorgu ve görünümleri listeleme denemesini gizler, ancak silmez.
Tek tek denemelerin veya çalıştırmaların 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ı veya silme.
ölçüm belgesi çok büyük: Azure Machine Learning bir eğitim çalıştırmasında bir kez günlüğe kaydedilebilir ölçüm nesnelerinin boyutunda iç sınırlara sahiptir. 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 ML dahili olarak aynı ölçüm adına sahip blokları bitişik bir listede birleştirir.
İşlem hedefinin başlaması uzun sürüyor: işlem hedeflerine yönelik Docker görüntüleri Azure Container Registry (ACR) ' den 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 değiştirmek, görüntüleri oluşturmak ve yüklemek için geçen süreyi azaltabilir. Daha fazla bilgi için bkz. Azure Container Registry hizmet katmanları.
Sonraki adımlar
- Öğretici: bir modeli eğitme bir modeli eğmek için yönetilen bir işlem hedefi kullanır.
- bkz. scikit-öğren, tensorflowve pytorchgibi belirli ML çerçeveleri ile modelleri eğitme.
- Daha iyi modeller oluşturmak için hiper parametreleri verimli bir şekilde ayarlamayı öğrenin.
- Eğitilen bir modelden sonra modellerin nasıl ve nereye dağıtılacağınıöğrenin.
- ScriptRunConfig sınıfı SDK başvurusunu görüntüleyin.
- Azure sanal ağları ile Azure Machine Learning kullanma