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
- Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun. Azure Machine Learning'in ücretsiz veya ücretli sürümünü bugün deneyin
- Python için Azure Machine Learning SDK'sı (>= 1.13.0)
- Bir Azure Machine Learning çalışma alanı,
ws
- İşlem hedefi,
my_compute_target
. İşlem hedefi oluşturma
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:
- Çalıştırılacak deneme oluşturma
- Betiğin çalıştırılacağı bir ortam oluşturma
- İşlem hedefini ve ortamını belirten bir ScriptRunConfig oluşturma
- İşi gönderme
- İşin tamamlanmasını bekleyin
İsterseniz:
- Hiper parametre ayarı 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.
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_target
bkz. Önkoşullar ve ortam (myenv
bkz. 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 .gitignore
dizimi 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 ./logs
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 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:
- Çeşitli işlem hedefleri üzerinde eğitim
- ML çerçeveleri ile eğitim
- tutorials/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: 'RoundTripLoader' nesnesi 'comment_handling' özniteliğine sahip değil: Bu hata, yeni sürümünden (v0.17.5)
ruamel-yaml
gelir ve buazureml-core
bağımlılıkta hataya neden olan bir değişikliktirazureml-core
. Bu hatayı düzeltmek için lütfen farklı bir sürümünüruamel-yaml
çalıştırıppip 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ırarakpip install "ruamel-yaml>=0.15.35,<0.17.5"
bunu yapabilirsiniz.İş şu hata iletisiyle
jwt.exceptions.DecodeError
baş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:
- Bir komut kabuğu başlatın, azureml-core'un yüklü olduğu conda ortamını etkinleştirin.
- değerini girin
pip freeze
ve bulunup bulunmadığına bakınPyJWT
, listelenen sürüm 2.0.0 olmalıdır < - Listelenen sürüm desteklenen bir sürüm değilse komut
pip uninstall PyJWT
kabuğuna onay için y girin. 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 kullanarakconda_dependencies_file
tüm bağımlılıklarınızla bir yml dosyası belirtebilir veya bir txt dosyasındapip_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ığıylaenvironment
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
- Öğretici: Modeli eğitme ve dağıtma, modeli eğitmek için yönetilen bir işlem hedefi kullanır.
- Modelleri Scikit-learn, TensorFlow ve PyTorch gibi belirli ML çerçeveleriyle eğitme hakkında bilgi edinin.
- Daha iyi modeller oluşturmak için hiper parametreleri verimli bir şekilde ayarlamayı öğrenin.
- Eğitilmiş bir modeliniz olduğunda modellerin nasıl ve nereye dağıtılacağı hakkında bilgi edinin.
- ScriptRunConfig sınıf SDK'sı başvurusunu görüntüleyin.
- Azure Sanal Ağları ile Azure Machine Learning'i kullanma