Azure Machine Learning ile PyTorch modellerini uygun ölçekte eğitme

ŞUNLAR 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 transfer öğrenme öğreticisini temel alan bir derin öğrenme sinir ağı (DNN) oluşturmak üzere tavuk ve hindi görüntülerini sınıflandırmak için kullanılır. Öğrenme aktarımı, bir sorunun çözümünden 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 bir 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 ortamlardan birinde bu kodu çalıştırın:

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ını 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 nesne oluşturarak workspace ç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.pybir 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.pyzaten 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.

Not

İş yüklerinizin bir bölümünü veya tümünü çalıştırmak için düşük öncelikli VM'leri kullanmayı seçebilirsiniz. Düşük öncelikli bir VM'nin nasıl oluşturulacağını öğrenin.

İş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 ML Ortamını tanımlamak için özel bir ortam tanımlayabilir veya Azure ML tarafından seçilmiş bir ortam kullanabilirsiniz.

Seçilen ortamı kullanma

Azure ML, 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 çeşitli CPU ve GPU ile seçilmiş ortamlar 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 conda bağımlılıklarını diske 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, eksik bağımlılıkları dahil etmek için ortamı 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 ML 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ılmıştır conda_dependencies.yml.

channels:
- conda-forge
dependencies:
- python=3.6.2
- 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 ML ortamı oluşturun. Ortam, çalışma zamanında bir Docker kapsayıcısına paketlenir.

Varsayılan olarak temel görüntü belirtilmezse, Azure ML 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 ML, 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'

İpucu

İ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ğitme.

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 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, tüm kaynak dizini kopyalayarak eğitim betiklerini çalıştırır. Karşıya yüklemek istemediğiniz hassas verileriniz varsa bir .ignore dosyası kullanın veya bunu kaynak dizinine eklemeyin. Bunun yerine, Azure ML 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ı

PyTorch eğitim işlerinizi yapılandırmak için daha önce 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 ML 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 Bkz. ScriptRunConfig'e Tahmin Aracı geçiş kılavuzu.

Ç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 çalıştırma geçmişine de 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 çı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ı 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')

İpucu

Dağıtım nasıl yapılır, modelleri kaydetmeyle ilgili bir bölüm içerir, ancak zaten kayıtlı bir modeliniz olduğundan doğrudan dağıtım için işlem hedefi oluşturmaya atlayabilirsiniz.

Çalıştır nesnesini kullanarak modelin yerel bir kopyasını da indirebilirsiniz. Eğitim betiğinde pytorch_train.pyPyTorch kaydetme nesnesi modeli yerel bir klasörde (işlem hedefinde 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 ML düzenlemeyi sizin için yönetir.

Azure ML, 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ımı 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 bkz. Modeli PyTorch'tan ONNX'e dışarı aktarma öğreticisi.

Sonraki adımlar

Bu makalede, Azure Machine Learning'de PyTorch kullanarak bir derin öğrenme, sinir ağı eğitip kaydettiniz. Modeli dağıtmayı öğrenmek için model dağıtım makalemize geçin.