Azure Machine Learning SDK'sı (v1) ile PyTorch modellerini uygun ölçekte eğitme
ŞUNUN IÇIN GEÇERLIDIR:Python SDK azureml v1
Bu makalede Azure Machine Learning kullanarak PyTorch eğitim betiklerinizi kurumsal ölçekte çalıştırmayı öğrenin.
Bu makaledeki örnek betikler, PyTorch'un öğrenme aktarımı öğreticisine göre derin öğrenme sinir ağı (DNN) oluşturmak üzere tavuk ve hindi görüntülerini sınıflandırmak için kullanılır. Öğrenmeyi aktarma, bir sorunun çözülmesinden elde edilen bilgileri farklı ama ilgili bir soruna uygulayan bir tekniktir. Öğrenme aktarımı sıfırdan eğitime kıyasla daha az veri, zaman ve işlem kaynağı gerektirerek eğitim sürecini kısaltır. Öğrenme aktarımı hakkında daha fazla bilgi edinmek için derin öğrenme ve makine öğrenmesi makalesine bakın.
İster sıfırdan derin öğrenme pyTorch modeli eğitin ister mevcut bir modeli buluta taşıyın, Azure Machine Learning'i kullanarak esnek bulut işlem kaynaklarını kullanarak açık kaynak eğitim işlerinin ölçeğini genişletebilirsiniz. Azure Machine Learning ile üretim sınıfı modeller oluşturabilir, dağıtabilir, sürüm oluşturabilir ve izleyebilirsiniz.
Önkoşullar
Bu kodu şu ortamlardan birinde çalıştırın:
Azure Machine Learning işlem örneği - indirme veya yükleme gerekmez
- Hızlı Başlangıcı tamamlayın: SDK ve örnek depo ile önceden yüklenmiş ayrılmış bir not defteri sunucusu oluşturmak için Azure Machine Learning'i kullanmaya başlayın.
- Not defteri sunucusundaki örnekler derin öğrenme klasöründe, şu dizine giderek tamamlanmış ve genişletilmiş bir not defteri bulun: how-to-use-azureml > ml-frameworks > pytorch > train-hyperparameter-tune-deploy-with-pytorch klasörü.
Kendi Jupyter Notebook sunucunuz
- Azure Machine Learning SDK'sını (>= 1.15.0) yükleyin.
- Çalışma alanı yapılandırma dosyası oluşturun.
- Örnek betik dosyalarını indirme
pytorch_train.py
Bu kılavuzun tamamlanmış Jupyter Notebook sürümünü GitHub örnekleri sayfasında da bulabilirsiniz. Not defteri, akıllı hiper parametre ayarlama, model dağıtımı ve not defteri pencere öğelerini kapsayan genişletilmiş bölümler içerir.
Gpu kümesi oluşturmak için bu makaledeki kodu çalıştırabilmeniz için önce çalışma alanınız için kota artışı istemeniz gerekir.
Denemeyi ayarlama
Bu bölüm, gerekli Python paketlerini yükleyerek, çalışma alanını başlatarak, işlem hedefini oluşturarak ve eğitim ortamını tanımlayarak eğitim denemesini ayarlar.
Paketleri içeri aktarma
İlk olarak, gerekli Python kitaplıklarını içeri aktarın.
import os
import shutil
from azureml.core.workspace import Workspace
from azureml.core import Experiment
from azureml.core import Environment
from azureml.core.compute import ComputeTarget, AmlCompute
from azureml.core.compute_target import ComputeTargetException
Çalışma alanı başlatma
Azure Machine Learning çalışma alanı, hizmetin en üst düzey kaynağıdır. Oluşturduğunuz tüm yapıtlarla çalışmak için merkezi bir yer sağlar. Python SDK'sında, bir workspace
nesne oluşturarak çalışma alanı yapıtlarına erişebilirsiniz.
Önkoşullar bölümünde oluşturulan dosyadan config.json
bir çalışma alanı nesnesi oluşturun.
ws = Workspace.from_config()
Verileri alma
Veri kümesi, hindiler ve tavuklar için yaklaşık 120 eğitim görüntüsünden ve her sınıf için 100 doğrulama görüntüsünden oluşur. Eğitim betiğimizin pytorch_train.py
bir parçası olarak veri kümesini indirip ayıklayacağız. Görüntüler, Açık Görüntüler v5 Veri Kümesinin bir alt kümesidir. Kendi verilerinizle eğitmek üzere JSONL oluşturma hakkında daha fazla adım için bu Jupyter not defterine bakın.
Eğitim betiğini hazırlama
Bu öğreticide , eğitim betiği pytorch_train.py
zaten sağlanmıştır. Uygulamada olduğu gibi herhangi bir özel eğitim betiğini alabilir ve Azure Machine Learning ile çalıştırabilirsiniz.
Eğitim betikleriniz için bir klasör oluşturun.
project_folder = './pytorch-birds'
os.makedirs(project_folder, exist_ok=True)
shutil.copy('pytorch_train.py', project_folder)
İşlem hedefi oluşturma
PyTorch işinizin üzerinde çalışması için bir işlem hedefi oluşturun. Bu örnekte GPU özellikli bir Azure Machine Learning işlem kümesi oluşturun.
Önemli
GPU kümesi oluşturabilmeniz için önce çalışma alanınız için kota artışı istemeniz gerekir.
# Choose a name for your CPU cluster
cluster_name = "gpu-cluster"
# Verify that cluster does not exist already
try:
compute_target = ComputeTarget(workspace=ws, name=cluster_name)
print('Found existing compute target')
except ComputeTargetException:
print('Creating a new compute target...')
compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_NC6',
max_nodes=4)
# Create the cluster with the specified name and configuration
compute_target = ComputeTarget.create(ws, cluster_name, compute_config)
# Wait for the cluster to complete, show the output log
compute_target.wait_for_completion(show_output=True, min_node_count=None, timeout_in_minutes=20)
Bunun yerine bir CPU kümesi oluşturmak istiyorsanız, vm_size parametresine STANDARD_D2_V2 gibi farklı bir VM boyutu sağlayın.
İşlem hedefleri hakkında daha fazla bilgi için işlem hedefi nedir makalesine bakın.
Ortamınızı tanımlama
Eğitim betiğinizin bağımlılıklarını kapsülleyen Azure Machine Learning Ortamını tanımlamak için özel bir ortam tanımlayabilir veya Azure Machine Learning tarafından seçilmiş bir ortam kullanabilirsiniz.
Seçilmiş bir ortam kullanma
Azure Machine Learning, kendi ortamınızı tanımlamak istemiyorsanız önceden oluşturulmuş, seçilmiş ortamlar sağlar. PyTorch için pyTorch'un farklı sürümlerine karşılık gelen birkaç CPU ve GPU tarafından seçilmiş ortam vardır.
Seçilmiş bir ortam kullanmak istiyorsanız, bunun yerine aşağıdaki komutu çalıştırabilirsiniz:
curated_env_name = 'AzureML-PyTorch-1.6-GPU'
pytorch_env = Environment.get(workspace=ws, name=curated_env_name)
Seçilen ortama dahil edilen paketleri görmek için diske conda bağımlılıklarını yazabilirsiniz:
pytorch_env.save_to_directory(path=curated_env_name)
Seçilen ortamın eğitim betiğinizin gerektirdiği tüm bağımlılıkları içerdiğinden emin olun. Aksi takdirde, ortamı eksik bağımlılıkları içerecek şekilde değiştirmeniz gerekir. Ortam değiştirilirse, 'AzureML' ön eki seçilmiş ortamlar için ayrıldığından yeni bir ad vermeniz gerekir. Conda bağımlılıkları YAML dosyasını değiştirdiyseniz, dosyadan yeni bir adla yeni bir ortam oluşturabilirsiniz, örneğin:
pytorch_env = Environment.from_conda_specification(name='pytorch-1.6-gpu', file_path='./conda_dependencies.yml')
Bunun yerine, seçilen ortam nesnesini doğrudan değiştirdiyseniz, bu ortamı yeni bir adla kopyalayabilirsiniz:
pytorch_env = pytorch_env.clone(new_name='pytorch-1.6-gpu')
Özel ortam oluşturma
Ayrıca, eğitim betiğinizin bağımlılıklarını kapsülleyen kendi Azure Machine Learning ortamınızı da oluşturabilirsiniz.
İlk olarak, conda bağımlılıklarınızı bir YAML dosyasında tanımlayın; bu örnekte dosya olarak adlandırılır conda_dependencies.yml
.
channels:
- conda-forge
dependencies:
- python=3.7
- pip=21.3.1
- pip:
- azureml-defaults
- torch==1.6.0
- torchvision==0.7.0
- future==0.17.1
- pillow
Bu conda ortamı belirtiminden bir Azure Machine Learning ortamı oluşturun. Ortam, çalışma zamanında bir Docker kapsayıcısına paketlenir.
Varsayılan olarak temel görüntü belirtilmezse, Azure Machine Learning temel görüntü olarak bir CPU görüntüsü azureml.core.environment.DEFAULT_CPU_IMAGE
kullanır. Bu örnek bir GPU kümesinde eğitim çalıştırdığından, gerekli GPU sürücülerine ve bağımlılıklarına sahip bir GPU temel görüntüsü belirtmeniz gerekir. Azure Machine Learning, Microsoft Container Registry'de (MCR) yayımlanan ve kullanabileceğiniz bir dizi temel görüntü tutar. Daha fazla bilgi için bkz . AzureML-Containers GitHub deposu.
pytorch_env = Environment.from_conda_specification(name='pytorch-1.6-gpu', file_path='./conda_dependencies.yml')
# Specify a GPU base image
pytorch_env.docker.enabled = True
pytorch_env.docker.base_image = 'mcr.microsoft.com/azureml/openmpi3.1.2-cuda10.1-cudnn7-ubuntu18.04'
Bahşiş
İsteğe bağlı olarak, tüm bağımlılıklarınızı doğrudan özel bir Docker görüntüsünde veya Dockerfile'da yakalayabilir ve ortamınızı bu görüntüden oluşturabilirsiniz. Daha fazla bilgi için bkz . Özel görüntüyle eğitma.
Ortam oluşturma ve kullanma hakkında daha fazla bilgi için bkz . Azure Machine Learning'de yazılım ortamları oluşturma ve kullanma.
Eğitim çalıştırmanızı yapılandırma ve gönderme
ScriptRunConfig Oluşturma
Eğitim betiğiniz, kullanılacak ortamınız ve üzerinde çalıştırılacak işlem hedefi dahil olmak üzere eğitim işinizin yapılandırma ayrıntılarını belirtmek için bir ScriptRunConfig nesnesi oluşturun. Eğitim betiğinizin bağımsız değişkenleri, parametresinde arguments
belirtilirse komut satırı aracılığıyla geçirilir. Aşağıdaki kod tek düğümlü bir PyTorch işi yapılandıracaktır.
from azureml.core import ScriptRunConfig
src = ScriptRunConfig(source_directory=project_folder,
script='pytorch_train.py',
arguments=['--num_epochs', 30, '--output_dir', './outputs'],
compute_target=compute_target,
environment=pytorch_env)
Uyarı
Azure Machine Learning, kaynak dizinin tamamını kopyalayarak eğitim betikleri çalıştırır. Karşıya yüklemek istemediğiniz hassas verileriniz varsa bir .ignore dosyası kullanın veya kaynak dizinine eklemeyin. Bunun yerine, Azure Machine Learning veri kümesini kullanarak verilerinize erişin.
ScriptRunConfig ile işleri yapılandırma hakkında daha fazla bilgi için bkz . Eğitim çalıştırmalarını yapılandırma ve gönderme.
Uyarı
Daha önce PyTorch eğitim işlerinizi yapılandırmak için PyTorch tahmin aracını kullandıysanız Estimators'ın 1.19.0 SDK sürümünden itibaren kullanım dışı bırakıldığını lütfen unutmayın. Azure Machine Learning SDK >= 1.15.0 ile ScriptRunConfig, derin öğrenme çerçeveleri kullananlar da dahil olmak üzere eğitim işlerini yapılandırmanın önerilen yoludur. Sık sorulan geçiş soruları için Estimator to ScriptRunConfig geçiş kılavuzuna bakın.
Çalıştırmanızı gönderme
Run nesnesi, iş çalışırken ve tamamlandıktan sonra çalıştırma geçmişine arabirim sağlar.
run = Experiment(ws, name='Tutorial-pytorch-birds').submit(src)
run.wait_for_completion(show_output=True)
Çalıştırma yürütmesi sırasında ne olur?
Çalıştırma yürütülürken aşağıdaki aşamalardan geçer:
Hazırlanıyor: Tanımlanan ortama göre bir docker görüntüsü oluşturulur. Görüntü çalışma alanının kapsayıcı kayıt defterine yüklenir ve sonraki çalıştırmalar için önbelleğe alınır. Günlükler de çalıştırma geçmişine akışla aktarılır ve ilerleme durumunu izlemek için görüntülenebilir. Bunun yerine seçilmiş bir ortam belirtilirse, seçilen ortamı destekleyen önbelleğe alınmış görüntü kullanılır.
Ölçeklendirme: Batch AI kümesinin çalıştırmayı yürütmek için şu anda kullanılabilir olandan daha fazla düğüme ihtiyacı varsa küme ölçeği artırmaya çalışır.
Çalışıyor: Betik klasöründeki tüm betikler işlem hedefine yüklenir, veri depoları bağlanır veya kopyalanır ve
script
yürütülür. stdout ve ./logs klasöründen alınan çıkışlar çalıştırma geçmişine akışla aktarılır ve çalıştırmayı izlemek için kullanılabilir.İşlem Sonrası: Çalıştırmanın ./outputs klasörü çalıştırma geçmişine kopyalanır.
Modeli kaydetme veya indirme
Modeli eğitdikten sonra çalışma alanınıza kaydedebilirsiniz. Model kaydı, model yönetimini ve dağıtımını basitleştirmek için modellerinizi çalışma alanınızda depolamanıza ve sürüm oluşturmanıza olanak tanır.
model = run.register_model(model_name='pytorch-birds', model_path='outputs/model.pt')
Bahşiş
Dağıtım nasıl yapılır, modelleri kaydetmeyle ilgili bir bölüm içerir, ancak kayıtlı bir modeliniz olduğundan doğrudan dağıtım için işlem hedefi oluşturmaya atlayabilirsiniz.
Run nesnesini kullanarak modelin yerel bir kopyasını da indirebilirsiniz. Eğitim betiğinde pytorch_train.py
PyTorch kaydetme nesnesi modeli yerel bir klasörde (işlem hedefine yerel) kalıcı hale getirir. Bir kopyasını indirmek için Run nesnesini kullanabilirsiniz.
# Create a model folder in the current directory
os.makedirs('./model', exist_ok=True)
# Download the model from run history
run.download_file(name='outputs/model.pt', output_file_path='./model/model.pt'),
Dağıtılmış eğitim
Azure Machine Learning, eğitim iş yüklerinizi ölçeklendirebilmeniz için çok düğümlü dağıtılmış PyTorch işlerini de destekler. Dağıtılmış PyTorch işlerini kolayca çalıştırabilirsiniz ve Azure Machine Learning düzenlemeyi sizin için yönetir.
Azure Machine Learning, hem Horovod hem de PyTorch'un yerleşik DistributedDataParallel modülüyle dağıtılmış PyTorch işlerini çalıştırmayı destekler.
Dağıtılmış eğitim hakkında daha fazla bilgi için bkz . Dağıtılmış GPU eğitim kılavuzu.
ONNX'e dışarı aktarma
ONNX Çalışma Zamanı ile çıkarımları iyileştirmek için eğitilen PyTorch modelinizi ONNX biçimine dönüştürün. Çıkarım veya model puanlaması, dağıtılan modelin tahmin için en yaygın olarak üretim verilerinde kullanıldığı aşamadır. Bir örnek için PyTorch'tan ONNX'e modeli dışarı aktarma öğreticisine bakın.
Sonraki adımlar
Bu makalede, Azure Machine Learning'de PyTorch kullanarak derin öğrenme, sinir ağı eğitip kaydettiniz. Modelin nasıl dağıtılacağı hakkında bilgi edinmek için model dağıtım makalemize geçin.