Öğretici: İlk makine öğrenmesi modelinizi eğitin (bölüm 2/ 3)
Bu öğreticide, bir makine öğrenmesi modelini Azure Machine Learning. Bu öğretici, üç bölümden bir öğretici serisinin 2. bölümü.
1. Bölüm: "Merhaba dünya!" serisinde, bulutta bir işi çalıştırmak için denetim betiği kullanmayı öğrendinsiniz.
Bu öğreticide, bir makine öğrenmesi modeli eğiten bir betik göndererek bir sonraki adımı atıyoruz. Bu örnek, yerel hata ayıklama Azure Machine Learning uzak çalıştırmalar arasındaki tutarlı davranışı nasıl kolaylaştıran bir işlem olduğunu anlamanıza yardımcı olur.
Bu öğreticide şunları yaptınız:
- Eğitim betiği oluşturun.
- Conda'yı kullanarak bir Azure Machine Learning tanımlayın.
- Denetim betiği oluşturun.
- Sınıf Azure Machine Learning (
Environment,Run, ).Metrics - Eğitim betiğinizi gönderin ve çalıştırın.
- Kod çıktınızı bulutta görüntüleme.
- Ölçümleri günlüğe Azure Machine Learning.
- Ölçümlerinizi bulutta görüntüleme.
Önkoşullar
- Serinin 1. bölümü tamamlandıktan sonra.
Eğitim betikleri oluşturma
İlk olarak sinir ağı mimarisini bir model.py tanımlayın. Tüm eğitim kodunuz, model.py dahil src olmak üzere alt model.py.
Eğitim kodu, PyTorch'tan bu giriş örneğinden alınarak alınır. Bu kavramlar Azure Machine Learning PyTorch'a değil tüm makine öğrenmesi kodlara uygulanır.
src model.py bir dosya 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 xDosyayı kaydetmek için araç çubuğunda Kaydet'i seçin. Isterseniz sekmesini kapatın.
Ardından, src alt klasörüne de eğitim betiği tanımlayın. Bu betik PyTorch API'lerini kullanarak CIFAR10 veri kümesi indirir, model.py'da tanımlanan ağı ayarlar ve standart SGD ve çapraz entropi kaybı kullanarak iki dönem için
torchvision.dataseteğiter.src 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
Komut dosyasını doğrudan işlem örneğinde çalıştırmak için Kaydet ve terminalde betiği train.py çalıştır'ı seçin.
Betik tamamlandıktan sonra dosya klasörlerinin üst tarafından Yenile'yi seçin. get-started/data adlı yeni veri klasörünü, indirilen verileri görüntülemek için bu klasörü genişletin olarak görünür.
Denetim betiği oluşturma
Aşağıdaki denetim betiği ile "Merhaba dünya!" , ortamı ayarlamak için birkaç ek satır eklemenizdir.
get-started klasöründe adlı yeni bir Python dosyası run-pytorch.py 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')
# use curated pytorch environment
env = ws.environments['AzureML-PyTorch-1.6-CPU']
config.run_config.environment = env
run = experiment.submit(config)
aml_url = run.get_portal_url()
print(aml_url)
İpucu
İşlem kümenizi oluşturulduğunda farklı bir ad kullandıysanız, kodda adı da ayarlasanız compute_target='cpu-cluster' emin olun.
Kod değişikliklerini anlama
env = ...
Azure Machine Learning, denemeleri çalıştırmaya ait yenidenlanabilir, sürüme sahip bir Python ortamını temsil eden bir ortam kavramı sağlar. Burada, özel ortamlardan birini kullanırsınız. Ayrıca yerel bir Conda veya pip ortamından ortam oluşturmak da kolaydır.
config.run_config.environment = env
Çalıştırmayı Azure Machine Learning
Terminalde betiği kaydet ve çalıştır'ı seçerek run-pytorch.py çalıştırın.
Terminal penceresinde açılan bir bağlantı görüntülenir. Çalıştırmayı görüntülemek için bağlantıyı seçin.
Not
Yükleme sırasında hata... ile başlayan bazı azureml_run_type_providers. 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 çalıştırma durumunu görebilirsiniz. Bu betiği ilk kez çalıştıracak Azure Machine Learning PyTorch ortamınıza yeni bir Docker görüntüsü derlemeniz gerekir. Çalıştırmanın tamamının tamamlanması 3-4 dakika sürebilir. Bu görüntü, daha hızlı çalışması için gelecek çalıştırmalarda yeniden kullanılır.
- Docker derleme günlüklerini Azure Machine Learning studio'da görüntüleyebilirsiniz. Çıkışlar + günlükler sekmesini seçin ve sonra da20_image_build_log.txt. ****
- Çalıştırmanın durumu Tamamlandı olduğunda Çıkış+ günlükler'i seçin.
- Çalıştırmanın 70_driver_log.txt görüntülemek için70_driver_log.txt'yi seçin.
Downloading https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz to ./data/cifar-10-python.tar.gz
...
Files already downloaded and verified
epoch=1, batch= 2000: loss 2.19
epoch=1, batch= 4000: loss 1.82
epoch=1, batch= 6000: loss 1.66
epoch=1, batch= 8000: loss 1.58
epoch=1, batch=10000: loss 1.52
epoch=1, batch=12000: loss 1.47
epoch=2, batch= 2000: loss 1.39
epoch=2, batch= 4000: loss 1.38
epoch=2, batch= 6000: loss 1.37
epoch=2, batch= 8000: loss 1.33
epoch=2, batch=10000: loss 1.31
epoch=2, batch=12000: loss 1.27
Finished Training
Bir hata Your total snapshot size exceeds the limit görüyorsanız, veri klasörü içinde kullanılan source_directory değerde ScriptRunConfig bulunur.
Klasörün sonundaki ... öğesini seçin ve ardından verileri get-started klasörüne taşımak için Taşı'ya tıklayın.
Günlük eğitim ölçümleri
Artık bazı performans ölçümlerini izlemeye Azure Machine Learning model eğitimine sahipsiniz.
Geçerli eğitim betiği, ölçümleri terminale yazdırır. Azure Machine Learning işlevleriyle ölçümleri günlüğe kaydetmeye olanak sağlayan bir mekanizma sağlar. Birkaç kod satırı ekleyerek studio'da ölçümleri görselleştirme ve birden çok çalıştırma arasındaki ölçümleri karşılaştırma olanağı elde edilir.
Günlük train.py eklemek için ayarları değiştirme
İki train.py kod içerecek şekilde dosya betiğinizi değiştirme:
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
Bu train.py, yöntemini kullanarak eğitim betiğinden çalıştırma nesnesine erişiyor ve ölçümleri günlüğe günlüğe Run.get_context() kaydettiriyor:
# ADDITIONAL CODE: get run from the current context
run = Run.get_context()
...
# ADDITIONAL CODE: log loss metric to AML
run.log('loss', loss)
Ölçümler Azure Machine Learning:
- Deneme ve çalıştırmaya göre düzenlenmiştir, bu nedenle ölçümleri izlemek ve karşılaştırmak kolaydır.
- Studio'da eğitim performansını görselleştirmek için bir kullanıcı arabirimiyle donatıldı.
- Yüzlerce deneme çalıştırarak bile bu avantajları elde tutmanın yanı sıra ölçeklendirmek için tasarlanmıştır.
Çalıştırmayı Azure Machine Learning
Run-pytorch.py betiği için sekmeyi seçin, sonra da betiği terminalde kaydet ve çalıştır'ı seçerek run-pytorch.py çalıştırın.
Bu kez stüdyoyı ziyaret edin, Ölçümler sekmesine gidin; burada model eğitim kaybıyla ilgili canlı güncelleştirmeleri görebilirsiniz! Eğitim başlamadan önce 1-2 dakika sürebilir.
Sonraki adımlar
Bu oturumda temel bir "Merhaba dünya!" betiği, belirli bir Python ortamının çalışması için gerekli olan daha gerçekçi bir eğitim betiğine yöneliktir. Özel ortamlar için nasıl Azure Machine Learning görmüştün. Son olarak birkaç kod satırıyla ölçümleri günlüğe Azure Machine Learning.
Bir pip requirements.txtdosyasından veya mevcut bir yerel Conda ortamından dahil olmak Azure Machine Learning ortamlar oluşturmanın başka yolları da vardır.
Bir sonraki oturumda CIFAR10 veri Azure Machine Learning Azure'a yükerek verilerle nasıl çalışabilirsiniz?
Not
Öğretici serisini burada tamamlamak ve sonraki adıma ilerlemek istemiyorsanız kaynaklarınızı temizlemeyi unutmayın.