Öğretici: İlk makine öğrenmesi modelinizi eğitme (SDK v1, bölüm 2 /3)
ŞUNUN IÇIN GEÇERLIDIR: Python SDK azureml v1
Bu öğreticide, Azure Machine Learning'de makine öğrenmesi modelini eğitmeyi öğreneceksiniz. Bu öğretici, iki bölümden oluşan bir öğretici serisinin 2. bölümüdür.
Bölüm 1: Serinin "Merhaba dünya!" çalıştırma bölümünde, bulutta bir iş çalıştırmak için bir denetim betiği kullanmayı öğrendinsiniz.
Bu öğreticide, bir makine öğrenmesi modelini eğiten bir betik göndererek sonraki adımı atacaksınız. Bu örnek, Azure Machine Learning'in yerel hata ayıklama ve uzak çalıştırmalar arasındaki tutarlı davranışı nasıl kolaylaştırdığınızı anlamanıza yardımcı olur.
Bu öğreticide şunları yaptınız:
- Eğitim betiği oluşturma.
- Azure Machine Learning ortamı tanımlamak için Conda kullanın.
- Bir denetim betiği oluşturun.
- Azure Machine Learning sınıflarını (
Environment
,Run
,Metrics
) anlama. - Eğitim betiğinizi gönderin ve çalıştırın.
- Kod çıkışınızı bulutta görüntüleyin.
- Ölçümleri Azure Machine Learning'de günlüğe kaydetme.
- Ölçümlerinizi bulutta görüntüleyin.
Önkoşullar
- Serinin 1 . bölümünün tamamlanması.
Eğitim betikleri oluşturma
İlk olarak sinir ağı mimarisini bir model.py dosyasında tanımlarsınız. Model.py dahil olmak üzere tüm eğitim kodunuz alt dizine src
gider.
Eğitim kodu, PyTorch'un bu giriş örneğinden alınmıştır. Azure Machine Learning kavramları yalnızca PyTorch için değil tüm makine öğrenmesi kodları için geçerlidir.
src alt klasöründe bir model.py dosyası oluşturun. Bu kodu dosyaya kopyalayın:
import torch.nn as nn import torch.nn.functional as F class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(3, 6, 5) self.pool = nn.MaxPool2d(2, 2) self.conv2 = nn.Conv2d(6, 16, 5) self.fc1 = nn.Linear(16 * 5 * 5, 120) self.fc2 = nn.Linear(120, 84) self.fc3 = nn.Linear(84, 10) def forward(self, x): x = self.pool(F.relu(self.conv1(x))) x = self.pool(F.relu(self.conv2(x))) x = x.view(-1, 16 * 5 * 5) x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = self.fc3(x) return x
Dosyayı kaydetmek için araç çubuğunda Kaydet'i seçin. İstersen, sekmeyi kapatın.
Ardından, src alt klasöründe de eğitim betiğini tanımlayın. Bu betik, PyTorch
torchvision.dataset
API'lerini kullanarak CIFAR10 veri kümesini indirir, model.py'de tanımlanan ağı ayarlar ve standart SGD ve çapraz entropi kaybı kullanarak iki dönem için eğitilir.src alt klasöründe bir train.py betiği oluşturun:
import torch import torch.optim as optim import torchvision import torchvision.transforms as transforms from model import Net # download CIFAR 10 data trainset = torchvision.datasets.CIFAR10( root="../data", train=True, download=True, transform=torchvision.transforms.ToTensor(), ) trainloader = torch.utils.data.DataLoader( trainset, batch_size=4, shuffle=True, num_workers=2 ) if __name__ == "__main__": # define convolutional network net = Net() # set up pytorch loss / optimizer criterion = torch.nn.CrossEntropyLoss() optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9) # train the network for epoch in range(2): running_loss = 0.0 for i, data in enumerate(trainloader, 0): # unpack the data inputs, labels = data # zero the parameter gradients optimizer.zero_grad() # forward + backward + optimize outputs = net(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() # print statistics running_loss += loss.item() if i % 2000 == 1999: loss = running_loss / 2000 print(f"epoch={epoch + 1}, batch={i + 1:5}: loss {loss:.2f}") running_loss = 0.0 print("Finished Training")
Artık aşağıdaki klasör yapısına sahipsiniz:
Yerel olarak test edin
train.py betiğini doğrudan işlem örneğinde çalıştırmak için Betiği terminalde kaydet ve çalıştır'ı seçin.
Betik tamamlandıktan sonra dosya klasörlerinin üstündeki Yenile'yi seçin. İndirilen verileri görüntülemek için get-started/data Bu klasörü genişlet adlı yeni veri klasörünü görürsünüz.
Python ortamı oluşturma
Azure Machine Learning, denemeleri çalıştırmak için yeniden üretilebilir, sürüme dönüştürülen bir Python ortamını temsil eden bir ortam kavramı sağlar. Yerel conda veya pip ortamından ortam oluşturmak kolaydır.
İlk olarak paket bağımlılıklarıyla bir dosya oluşturursunuz.
Başlarken klasöründe adlı
pytorch-env.yml
yeni bir dosya oluşturun:name: pytorch-env channels: - defaults - pytorch dependencies: - python=3.7 - pytorch - torchvision
Dosyayı kaydetmek için araç çubuğunda Kaydet'i seçin. İstersen, sekmeyi kapatın.
Denetim betiğini oluşturma
Aşağıdaki denetim betiği ile "Merhaba dünya!" göndermek için kullandığınız betik arasındaki fark, ortamı ayarlamak için birkaç ek satır eklemenizdir.
Get-started klasöründe adlı run-pytorch.py
yeni bir Python dosyası oluşturun:
# run-pytorch.py
from azureml.core import Workspace
from azureml.core import Experiment
from azureml.core import Environment
from azureml.core import ScriptRunConfig
if __name__ == "__main__":
ws = Workspace.from_config()
experiment = Experiment(workspace=ws, name='day1-experiment-train')
config = ScriptRunConfig(source_directory='./src',
script='train.py',
compute_target='cpu-cluster')
# set up pytorch environment
env = Environment.from_conda_specification(
name='pytorch-env',
file_path='pytorch-env.yml'
)
config.run_config.environment = env
run = experiment.submit(config)
aml_url = run.get_portal_url()
print(aml_url)
İpucu
İşlem kümenizi oluştururken farklı bir ad kullandıysanız koddaki compute_target='cpu-cluster'
adı da ayarladığınızdan emin olun.
Kod değişikliklerini anlama
env = ...
Yukarıda oluşturduğunuz bağımlılık dosyasına başvurur.
config.run_config.environment = env
Çalıştırmayı Azure Machine Learning'e gönderme
run-pytorch.py betiğini çalıştırmak için Betiği terminalde kaydet ve çalıştır'ı seçin.
Açılan terminal penceresinde bir bağlantı görürsünüz. İşi görüntülemek için bağlantıyı seçin.
Not
azureml_run_type_providers yüklenirken Hata ile başlayan bazı uyarılar görebilirsiniz.... Bu uyarıları yoksayabilirsiniz. Çıkışınızı görüntülemek için bu uyarıların altındaki bağlantıyı kullanın.
Çıkışı görüntüleme
- Açılan sayfada iş durumunu görürsünüz. Bu betiği ilk kez çalıştırdığınızda, Azure Machine Learning PyTorch ortamınızdan yeni bir Docker görüntüsü oluşturur. tüm işin tamamlanması yaklaşık 10 dakika sürebilir. Bu görüntü, daha hızlı çalışmasını sağlamak için gelecekteki işlerde yeniden kullanılır.
- Docker derleme günlüklerini Azure Machine Learning stüdyosu görebilirsiniz. derleme günlüklerini görüntülemek için:
- Çıkışlar + günlükler sekmesini seçin.
- azureml-logs klasörünü seçin.
- 20_image_build_log.txt'ı seçin.
- İşin durumu Tamamlandı olduğunda Çıkış + günlükler'i seçin.
- user_logs'ı seçin ve ardından işinizin çıkışını görüntülemek için std_log.txt.
Downloading https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz to ../data/cifar-10-python.tar.gz
Extracting ../data/cifar-10-python.tar.gz to ../data
epoch=1, batch= 2000: loss 2.19
epoch=1, batch= 4000: loss 1.82
epoch=1, batch= 6000: loss 1.66
...
epoch=2, batch= 8000: loss 1.51
epoch=2, batch=10000: loss 1.49
epoch=2, batch=12000: loss 1.46
Finished Training
hatasını Your total snapshot size exceeds the limit
görürseniz, veri klasörü içinde kullanılan değerde source_directory
ScriptRunConfig
bulunur.
Klasörün sonundaki ... öğesini seçin ve ardından Verileri başlarken klasörüne taşımak için Taşı'yı seçin.
Eğitim ölçümlerini günlüğe kaydetme
Artık Azure Machine Learning'de bir model eğitimine sahip olduğunuz için bazı performans ölçümlerini izlemeye başlayın.
Geçerli eğitim betiği ölçümleri terminale yazdırır. Azure Machine Learning, ölçümleri daha fazla işlevle günlüğe kaydetmeye yönelik bir mekanizma sağlar. Birkaç kod satırı ekleyerek, stüdyodaki ölçümleri görselleştirme ve birden çok iş arasındaki ölçümleri karşılaştırma olanağı elde edebilirsiniz.
train.py günlüğü içerecek şekilde değiştirme
train.py betiğinizi iki kod satırı daha içerecek şekilde değiştirin:
import torch import torch.optim as optim import torchvision import torchvision.transforms as transforms from model import Net from azureml.core import Run # ADDITIONAL CODE: get run from the current context run = Run.get_context() # download CIFAR 10 data trainset = torchvision.datasets.CIFAR10( root='./data', train=True, download=True, transform=torchvision.transforms.ToTensor() ) trainloader = torch.utils.data.DataLoader( trainset, batch_size=4, shuffle=True, num_workers=2 ) if __name__ == "__main__": # define convolutional network net = Net() # set up pytorch loss / optimizer criterion = torch.nn.CrossEntropyLoss() optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9) # train the network for epoch in range(2): running_loss = 0.0 for i, data in enumerate(trainloader, 0): # unpack the data inputs, labels = data # zero the parameter gradients optimizer.zero_grad() # forward + backward + optimize outputs = net(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() # print statistics running_loss += loss.item() if i % 2000 == 1999: loss = running_loss / 2000 # ADDITIONAL CODE: log loss metric to AML run.log('loss', loss) print(f'epoch={epoch + 1}, batch={i + 1:5}: loss {loss:.2f}') running_loss = 0.0 print('Finished Training')
Bu dosyayı kaydedin ve isterseniz sekmeyi kapatın.
Ek iki kod satırı anlama
train.py, yöntemini kullanarak eğitim betiğinin içinden çalıştırma nesnesine Run.get_context()
erişip ölçümleri günlüğe kaydetmek için bunu kullanırsınız:
# ADDITIONAL CODE: get run from the current context
run = Run.get_context()
...
# ADDITIONAL CODE: log loss metric to AML
run.log('loss', loss)
Azure Machine Learning'deki ölçümler şunlardır:
- Deneme ve çalıştırmaya göre düzenlenerek ölçümleri takip etmek ve karşılaştırmak kolaydır.
- Stüdyoda eğitim performansını görselleştirebilmeniz için bir kullanıcı arabirimi ile donatılmıştır.
- Ölçeklendirilecek şekilde tasarlanmıştır, böylece yüzlerce deneme çalıştırırken bile bu avantajları koruyabilirsiniz.
Conda ortam dosyasını güncelleştirme
Betik train.py
üzerinde yeni bir bağımlılık azureml.core
aldı. Bu değişikliği yansıtacak şekilde güncelleştirin pytorch-env.yml
:
name: pytorch-env
channels:
- defaults
- pytorch
dependencies:
- python=3.7
- pytorch
- torchvision
- pip
- pip:
- azureml-sdk
Çalıştırmayı göndermeden önce bu dosyayı kaydettiğinizden emin olun.
Çalıştırmayı Azure Machine Learning'e gönderme
run-pytorch.py betiğinin sekmesini seçin ve ardından run-pytorch.py betiğini yeniden çalıştırmak için Betiği terminalde kaydet ve çalıştır'ı seçin. İlk olarak değişikliklerinizi kaydettiğinizden pytorch-env.yml
emin olun.
Bu kez stüdyoyu ziyaret ettiğinizde, artık model eğitim kaybıyla ilgili canlı güncelleştirmeleri görebileceğiniz Ölçümler sekmesine gidin! Eğitimin başlaması 1-2 dakika sürebilir.
Kaynakları temizleme
Şimdi başka bir öğreticiye devam etmek veya kendi eğitim işlerinizi başlatmak istiyorsanız İlgili kaynaklar'a atlayın.
İşlem örneğini durdurma
Şimdi kullanmayacaksanız işlem örneğini durdurun:
- Stüdyoda, sol tarafta İşlem'i seçin.
- Üst sekmelerde İşlem örnekleri'ni seçin
- Listeden işlem örneğini seçin.
- Üst araç çubuğunda Durdur'u seçin.
Tüm kaynakları silme
Önemli
Oluşturduğunuz kaynaklar, diğer Azure Machine Learning öğreticileri ve nasıl yapılır makaleleri için önkoşul olarak kullanılabilir.
Oluşturduğunuz kaynaklardan hiçbirini kullanmayı planlamıyorsanız, ücret ödememek için bunları silin:
Azure portalının en sol tarafındaki Kaynak gruplarını seçin.
Listeden, oluşturduğunuz kaynak grubunu seçin.
Kaynak grubunu sil'i seçin.
Kaynak grubu adını girin. Ardından Sil'i seçin.
Ayrıca kaynak grubunu koruyabilir, ancak tek bir çalışma alanını silebilirsiniz. Çalışma alanı özelliklerini görüntüleyin ve Sil'i seçin.
İlgili kaynaklar
Bu oturumda, temel bir "Merhaba dünya!" betiğinden belirli bir Python ortamının çalıştırılmasını gerektiren daha gerçekçi bir eğitim betiğine yükselttiniz. Seçilmiş Azure Machine Learning ortamlarının nasıl kullanılacağını gördünüz. Son olarak, birkaç kod satırıyla ölçümleri Azure Machine Learning'de nasıl günlüğe kaydedebileceğinizi gördünüz.
Bir pip requirements.txt dosyasından veya mevcut bir yerel Conda ortamından olmak üzere Azure Machine Learning ortamları oluşturmanın başka yolları da vardır.