PyTorch Modelini Eğitme

Bu makalede, DenseNet gibi PyTorch modellerini eğitmek için Azure Machine Learning tasarımcısında PyTorch Modeli Eğitme bileşeninin nasıl kullanılacağı açıklanmaktadır. Eğitim, modeli tanımlayıp parametrelerini ayarladıktan sonra gerçekleştirilir ve etiketlenmiş veriler gerektirir.

Şu anda PyTorch Modelini Eğitme bileşeni hem tek düğümü hem de dağıtılmış eğitimi destekler.

PyTorch Modelini Eğitme'yi kullanma

  1. Tasarımcıda işlem hattı taslağınıza DenseNet bileşeni veya ResNet ekleyin.

  2. İşlem hattına Train PyTorch Modeli bileşenini ekleyin. Bu bileşeni Model Eğitimi kategorisi altında bulabilirsiniz. Eğit'i genişletin ve ardından PyTorch Modelini Eğit bileşenini işlem hattınıza sürükleyin.

    Not

    PyTorch Modeli bileşenini eğitme , büyük veri kümesi için GPU türü işlemde daha iyi çalıştırılır, aksi takdirde işlem hattınız başarısız olur. Diğer işlem hedefini kullan'ı ayarlayarak bileşenin sağ bölmesinde belirli bir bileşen için işlem seçebilirsiniz.

  3. Sol girişe eğitilmemiş bir model ekleyin. Eğitim veri kümesini ve doğrulama veri kümesini PyTorch Modelini Eğitme'nin orta ve sağ girişine ekleyin.

    Eğitilmemiş model için, DenseNet gibi bir PyTorch modeli olmalıdır; aksi takdirde bir 'InvalidModelDirectoryError' oluşturulur.

    Veri kümesi için eğitim veri kümesinin etiketlenmiş bir görüntü dizini olması gerekir. Etiketli bir görüntü dizini almak için Görüntü Dizinine Dönüştür'e bakın. Etiketlenmemişse bir 'NotLabeledDatasetError' oluşturulur.

    Eğitim veri kümesi ve doğrulama veri kümesi aynı etiket kategorilerine sahiptir, aksi takdirde InvalidDatasetError oluşturulur.

  4. Dönemler için, eğitmek istediğiniz dönem sayısını belirtin. Veri kümesinin tamamı her dönem (varsayılan olarak 5) yinelenir.

  5. Toplu iş boyutu için, varsayılan olarak 16 olmak üzere bir toplu işlemde eğitilmesi gereken örnek sayısını belirtin.

  6. Isınma adım numarası için, ilk öğrenme oranının yakınsamaya başlanamayacak kadar büyük olması durumunda, varsayılan olarak 0 olmak üzere eğitimi ısıtmak istediğiniz dönem sayısını belirtin.

  7. Öğrenme oranı için öğrenme oranı için bir değer belirtin ve varsayılan değer 0,001'dir. Öğrenme oranı, modelin her test edilişinde ve düzeltildiğinde sgd gibi iyileştiricide kullanılan adımın boyutunu denetler.

    Hızı daha küçük ayarlayarak modeli daha sık test edersiniz ve yerel bir platoda takılma riskiniz olur. Hızı daha büyük ayarlayarak, gerçek minima'yı aşırı izleme riskiyle daha hızlı yakınsayabilirsiniz.

    Not

    Eğitim sırasında eğitim kaybı nan olursa ve bunun nedeni çok yüksek öğrenme oranı olabilir, öğrenme oranının azalması yararlı olabilir. Dağıtılmış eğitimde, gradyan azalmasını kararlı tutmak için gerçek öğrenme oranı tarafından hesaplanır lr * torch.distributed.get_world_size() çünkü işlem grubunun toplu boyutu tek işlemin dünya boyut süreleridir. Polinomsal öğrenme hızı bozulmaları uygulanır ve daha iyi performans gösteren bir model elde etmek için yardımcı olabilir.

  8. Rastgele tohum için isteğe bağlı olarak, tohum olarak kullanılacak bir tamsayı değeri yazın. Denemenin işler arasında yeniden üretilebilirliğini sağlamak istiyorsanız, bir tohum kullanılması önerilir.

  9. Patience için doğrulama kaybı art arda azalmazsa eğitimin kaç dönem erken durdurulacağını belirtin. varsayılan olarak 3' e tıklayın.

  10. Yazdırma sıklığı için, her dönemdeki yinelemeler üzerinde eğitim günlüğü yazdırma sıklığını varsayılan olarak 10 olarak belirtin.

  11. İşlem hattını gönderin. Veri kümenizin boyutu daha büyükse bu işlem biraz zaman alır ve GPU işlem önerilir.

Dağıtılmış eğitim

Dağıtılmış eğitimde bir modeli eğitmek için iş yükü, çalışan düğümleri olarak adlandırılan birden çok mini işlemci arasında bölünür ve paylaşılır. Bu çalışan düğümleri model eğitimini hızlandırmak için paralel olarak çalışır. Şu anda tasarımcı , PyTorch Modeli bileşenini eğitme için dağıtılmış eğitimi desteklemekte.

Eğitim süresi

Dağıtılmış eğitim, PyTorch Modelini Eğiterek ImageNet gibi büyük bir veri kümesinde (1000 sınıf, 1,2 milyon görüntü) yalnızca birkaç saat içinde eğitim almayı mümkün kılar. Aşağıdaki tabloda, farklı cihazlara dayalı sıfırdan ImageNet üzerinde Resnet50'nin 50 dönemi boyunca eğitim süresi ve performansı gösterilmektedir.

Cihazlar Eğitim Zamanı Eğitim Aktarım Hızı İlk 1 Doğrulama Doğruluğu İlk 5 Doğrulama Doğruluğu
16 V100 GPU 6h22 dak ~3200 Resim/Sn 68.83% 88.84%
8 V100 GPU 12h21 dak ~1670 Resim/Sn 68.84% 88.74%

Bu bileşen 'Ölçümler' sekmesine tıklayın ve 'Saniyede görüntü eğit' ve 'İlk 1 doğruluk' gibi eğitim ölçüm grafiklerini görün.

Eğitim ölçümlerini gösteren ekran görüntüsü

Dağıtılmış eğitimi etkinleştirme

PyTorch Modelini Eğitme bileşeni için dağıtılmış eğitimi etkinleştirmek için bileşenin sağ bölmesindeki İş ayarları'nda ayarlayabilirsiniz. Dağıtılmış eğitim için yalnızca AML İşlem kümesi desteklenir.

Not

NCCL arka ucu Train PyTorch Model bileşeninin cuda kullanması gerektiğinden, dağıtılmış eğitimi etkinleştirmek için birden çok GPU gereklidir.

  1. Bileşeni seçin ve sağ paneli açın. İş ayarları bölümünü genişletin.

    Runsetting'te dağıtılmış eğitimi ayarlamayı gösteren ekran görüntüsü

  2. İşlem hedefi için AML işlem'i seçtiğinizden emin olun.

  3. Kaynak düzeni bölümünde aşağıdaki değerleri ayarlamanız gerekir:

    • Düğüm sayısı : Eğitim için kullanılan işlem hedefindeki düğüm sayısı. İşlem kümenizin düğüm sayısı üst sınırındanküçük veya buna eşit olmalıdır. Varsayılan olarak 1'dir ve bu da tek düğüm iş anlamına gelir.

    • Düğüm başına işlem sayısı: Düğüm başına tetiklenen işlem sayısı. İşleminizin İşlem Birimi'neeşit veya ondan küçük olmalıdır. Varsayılan olarak 1'dir ve bu da tek işlem işi anlamına gelir.

    İşlem ayrıntı sayfasında işlem adına tıklayarak İşleminizin En fazla düğüm sayısı ve İşlem Birimi'ni de kontrol edebilirsiniz.

    İşlem kümesini denetlemeyi gösteren ekran görüntüsü

Azure Machine Learning'de dağıtılmış eğitim hakkında daha fazla bilgiyi burada bulabilirsiniz.

Dağıtılmış eğitim için sorun giderme

Bu bileşen için dağıtılmış eğitimi etkinleştirirseniz, her işlem için sürücü günlükleri olacaktır. 70_driver_log_0 ana işlem içindir. Sağ bölmedeki Outputs+logs sekmesinde her işlemin hata ayrıntıları için sürücü günlüklerini de kontrol edebilirsiniz.

Sürücü günlüğünü gösteren ekran görüntüsü

Bileşenin etkinleştirildiği dağıtılmış eğitim herhangi bir 70_driver günlük olmadan başarısız olursa hata ayrıntılarını de kontrol 70_mpi_log edebilirsiniz.

Aşağıdaki örnekte, düğüm başına işlem sayısı işleminin İşlem Biriminden daha büyük olan yaygın bir hata gösterilmektedir.

mpi günlüğünü gösteren ekran görüntüsü

Bileşen sorunlarını giderme hakkında daha fazla ayrıntı için bu makaleye bakabilirsiniz.

Sonuçlar

İşlem hattı işi tamamlandıktan sonra, modeli puanlama için kullanmak üzere PyTorch ModeliniPuanlama Görüntüsü Modeli'ne bağlayarak yeni giriş örneklerinin değerlerini tahmin edin.

Teknik notlar

Beklenen girişler

Ad Tür Açıklama
Eğitilmemiş model UntrainedModelDirectory Eğitilmemiş model, PyTorch gerektirir
Eğitim veri kümesi ImageDirectory Eğitim veri kümesi
Doğrulama veri kümesi ImageDirectory Her dönem değerlendirme için doğrulama veri kümesi

Bileşen parametreleri

Name Aralık Tür Varsayılan Açıklama
Dönemler >0 Tamsayı 5 Etiket veya sonuç sütununu içeren sütunu seçin
Toplu iş boyutu >0 Tamsayı 16 Toplu olarak eğitmek için kaç örnek
Isınma adımı numarası >=0 Tamsayı 0 Eğitimin ısınması için kaç dönem
Öğrenme oranı >=çift. Epsilon Float 0.1 Stokastik Gradyan Azalma iyileştiricisi için ilk öğrenme oranı.
Rastgele tohum Herhangi biri Tamsayı 1 Model tarafından kullanılan rastgele sayı oluşturucunun tohumu.
Sabır >0 Tamsayı 3 Eğitimi erken durdurmak için kaç dönem
Yazdırma sıklığı >0 Tamsayı 10 Her dönemdeki yinelemeler üzerinde eğitim günlüğü yazdırma sıklığı

Çıkışlar

Ad Tür Açıklama
Eğitilmiş model Model Dizini Eğitilmiş model

Sonraki adımlar

Azure Machine Learning'in kullanabileceği bileşenler kümesine bakın.