Aracılığıyla paylaş


CNTK v2.2 Sürüm Notları

Hataya neden olan değişiklik

  • Bu yineleme, genişlemiş kıvrımı ve belirlenici havuzu desteklemek için cuDNN 6.0 gerektirir. Lütfen cuDNN'nizi güncelleştirin.
  • Bu yineleme, OpenCV'nin TensorBoard Görüntüsü özelliğini desteklemesini gerektirir . CNTK yüklemeden önce lütfen OpenCV'yi yükleyin.

Belgeler

Aranabilir olmaları için öğreticilerin ve kılavuzların HTML sürümünü ekleyin

Python belgeleriyleöğreticilerin ve kılavuzların HTML sürümlerini ekledik. Bu, öğretici not defterlerini ve el kitaplarını da aranabilir hale getirir.

Güncelleştirilmiş değerlendirme belgeleri

Model değerlendirmesiyle ilgili belgeler güncelleştirildi. Lütfen en son belgeleri buradan kontrol edin.

Sistem

Volta GPU'da eğitim için 16 bit destek (sınırlı işlevsellik)

Test altyapısı güncelleştirmelerine bağımlılık nedeniyle bu çalışma bir sonraki sürüme geçirilir.

NCCL 2 desteği

Artık NCCL makineler arasında kullanılabilir. Kullanıcının derleme yapılandırmasında NCCL'yi burada olduğu gibi etkinleştirmesi gerekir. Not:

  • İndirilen NCCL 2 paketini yükledikten sonra iki paket vardır:
/var/nccl-repo-2.0.4-ga/libnccl2_2.0.4-1+cuda8.0_amd64.deb
/var/nccl-repo-2.0.4-ga/libnccl-dev_2.0.4-1+cuda8.0_amd64.deb.

NCCL 2 ile CNTK oluşturmak için her ikisini de yükleyin.

  • Sistem yapılandırmasındaki sorunlar nedeniyle, kullanıcı NCCL başlatma sırasında hatayla karşılaşabilir. Hata hakkında ayrıntılı bilgi almak için lütfen ortam değişkenini NCCL_DEBUG=INFOayarlayın.
  • Karma IB ve IPoIB modlarında çalışan InfiniBand cihazlarıyla yapılandırılmış sistemde NCCL 2'nin geçerli sürümünde bilinen sorunlar vardır. Yalnızca IB modu cihazlarını kullanmak için lütfen IB modunda çalışan ortam değişkenini NCCL_IB_HCA=devices ayarlayın; örneğin:
export NCCL_IB_HCA=mlx5_0,mlx5_2

CNTK öğrenci arabirimi güncelleştirmesi

Bu güncelleştirme, öğrenci API'lerini basitleştirir ve ve UnitType.samplekavramlarını unitType.minibatch kullanımdan kaldırmaktadır. Amaç, HER N örneğin ortalama gradyanlarının gerçek veri minibatch boyutlarına bakılmaksızın model güncelleştirmelerine yaklaşık olarak aynı katkıyı CNTK --- benzersiz model güncelleştirme tekniklerini korurken, api'nin öğrenci hiper parametrelerini belirtmesini sezgisel hale getirmektir. Ayrıntılı açıklama, CNTK Öğrenenlerin Kullanımı kılavuzunda bulunabilir.

Yeni API'de AdaDelta, AdaGrad, FSAdaGrad, Adam, MomentumSGD, Nesterov, RMSProp ve SGD gibi desteklenen tüm öğrenciler artık

cntk.<cntk_supporting_learner>(parameters=model.parametes,
    lr=<float or list>,
    [momentum=<float or list>], [variance_momentum=<float or list>],
    minibatch_size=<None, int, or cntk.learners.IGNORE>,
    ...other learner parameters)

İki önemli değişiklik vardır:

  • lr: Öğrenme hızı zamanlaması float, float listesi veya çift listesi (float, int) olarak belirtilebilir ( learning_parameter_schedule parametre tanımına bakın). Aynı belirtim, bu tür hiper parametrelerin gerekli olduğu öğrenciler, FSAdaGrad, Adam, MomentumSGD, Nesterov'un momentum ve variance_moment için de geçerlidir.

  • minibatch_size: Her N (minibatch_size=N) örneğinin ortalama gradyanının, verilerin gerçek minibatch boyutu N'den farklı olsa bile model güncelleştirmelerine aynı öğrenme hızıyla katkıda bulunduğunu garanti etmek için bir minibatch_size belirtilebilir. Bu, özellikle değişken uzunlukta sıralı eğitim senaryolarında ve/veya dağıtılmış eğitimde eşit olmayan veri bölümü senaryolarında veri minibatch boyutu değiştiğinde yararlıdır.

    • ayarlarsak minibatch_size=cntk.learners.IGNORE, literatürdeki davranışı kurtarırız: Tüm minibatch'in ortalama gradyanı, model güncelleştirmesine aynı öğrenme hızıyla katkıda bulunur. Veri minibatch veri boyutunu yoksayma davranışı, veri minibatch boyutu belirtilen minibatch boyutuna eşit olduğunda öğrenci için bir minibatch boyutu belirtmekle aynıdır.

Yeni API ile:

  • Model güncelleştirmelerinin klasik derin öğrenme literatüründe olduğu gibi olması için minibatch boyutunu yoksayarak öğrenciyi minibatch_size=cntk.learners.IGNORE belirtebiliriz; örneğin.
sgd_learner_m = C.sgd(z.parameters, lr = 0.5, minibatch_size = C.learners.IGNORE)

Not

  • Gerçek minibatch boyutlarına bakılmaksızın her N örneğinin ortalama gradyanı için aynı öğrenme oranını uygulayan CNTK belirli teknikleri etkinleştirmek için, öğrenciyi ayarlayarak minibatch_size=Nbelirtebiliriz; örneğin ayarı minibatch_size=2,
sgd_learner_s2 = C.sgd(z.parameters, lr = 0.5, minibatch_size = 2)

Öğrencilerin FSAdaGrad, Adam, MomentumSGD ve Nesterov momentum_schedule ilgili olarak, benzer şekilde belirtilebilir. Örnek olarak kullanalım momentum_sgd :

momentum_sgd(parameters, lr=float or list of floats, momentum=float or list of floats,
             minibatch_size=C.learners.IGNORE, epoch_size=epoch_size)
momentum_sgd(parameters, lr=float or list of floats, momentum=float or list of floats,
             minibatch_size=N, epoch_size=epoch_size)

benzer şekilde learning_rate_schedule, bağımsız değişkenler de aynı şekilde yorumlanır:

  • ile minibatch_size=C.learners.IGNOREbozulma momentum=beta , boyutuna bakılmaksızın tüm minibatch'in ortalama gradyanlarına uygulanır. Örneğin, minibatch boyutunun N veya 2N (veya herhangi bir boyut) olmasına bakılmaksızın, böyle bir minibatch'in ortalama gradyanı aynı bozulma faktörü beta'ya sahip olur.

  • ile minibatch_size=N, çürüme momentum=beta her N örneğinin ortalama gradyanlarına uygulanır. Örneğin, N, 2N, 3N ve kN boyutlarındaki küçük harflerde sırasıyla beta, pow(beta, 2), pow(beta, 3) ve pow(beta, k) bozulmaları olur --- bozulma, gerçek minibatch boyutunun belirtilen minibatch boyutuyla orantılı olarak üsteldir.

Kişilerin ağ oluşturmasına ve eğitmeye olanak tanıyan bir C#/.NET API'si.

C#/.NET API'sine eğitim desteği eklenir.

.NET geliştiricileri, mevcut CNTK C# Değerlendirme API'sine ek olarak tümleşik derin öğrenme deneyiminin keyfini çıkarabilir. Derin bir sinir ağı C# dilinde derlenebilir, eğitilebilir ve doğrulanabilirken CNTK performans gücünden yararlanmaya devam edebilir. Kullanıcılar DNN'nin nasıl eğitilip değerlendirildiğini görmek için doğrudan CNTK kaynak kodunda hata ayıklar. Yeni özellikler şunları içerir:

Temel C# Eğitim API'si.

Hesaplama ağı oluşturmak için 100'den fazla temel işlev desteklenir. Bu işlevler arasında Sigmoid, Tanh, ReLU, Plus, Eksi, Convolution, Pooling, BatchNormalization yer alır.

Örneğin, lojistik regresyon kaybı işlevi oluşturmak için:

Function z = CNTKLib.Times(weightParam, input) + biasParam;
Function loss = CNTKLib.CrossEntropyWithSoftmax(z, labelVariable);
CNTK, DNN oluşturmak için temel öğe olarak işlev görür

DNN, temel işlem bileşimiyle oluşturulur. Örneğin, bir ResNet düğümü oluşturmak için:

Function conv = CNTKLib.Pooling(CNTKLib.Convolution(convParam, input),
                                PoolingType.Average, poolingWindowShape);
Function resNetNode = CNTKLib.ReLU(CNTKLib.Plus(conv, input));
Toplu İşlem Desteği

Verimli veri yükleme ve toplu işlemeye yardımcı olmak için MinibatchSource ve MinibacthData yardımcı programları sunuyoruz.

Eğitim Desteği

DNN literatüründe yaygın olarak görülen birçok Stokastik Gradyan Azalma iyileştiricisini destekliyoruz: MomentumSGDLearner, AdamLearner, AdaGradLearner vb. Örneğin, ADAM Stochastic Optimizer ile model eğitmek için:

var parameterLearners = new List<Learner>() { Learner.AdamLearner(classifierOutput.Parameters(),
                                                                  learningRate, momentum) };
var trainer = Trainer.CreateTrainer(classifierOutput, trainingLoss,
                                    prediction, parameterLearners);

Eğitim örnekleri çok çeşitli DNN kullanım örneklerini kapsar:

CNTK için R bağlama

Hem eğitim hem de değerlendirme sağlayan CNTK için R bağlaması çok yakında ayrı bir depoda yayımlanacaktır.

Örnekler

Hızlı R-CNN ve Daha Hızlı R-CNN ile Nesne Algılama

Yeni C++ Değerlendirme Örnekleri

Yeni C++ örnekleri CNTKLibraryCPPEvalCPUOnlyExamples ve CNTKLibraryCPPEvalGPUExamplesekledik. CPU ve GPU üzerinde model değerlendirmesi için C++ CNTK Kitaplığı'nın nasıl kullanılacağını gösterir. Bir diğer yeni örnek de model değerlendirmesi için CNTK UWP kitaplığını kullanan UWPImageRecognition örneğidir.

Yeni C# Değerlendirme örnekleri

Zaman uyumsuz değerlendirme için bir örnek ekledik: EvaluationSingleImageAsync(). Değerlendirme CPU'ya bağlı bir işlem olduğundan CNTK C# API'sinin Evaluate() için zaman uyumsuz bir yöntemi olmadığıdır (ayrıntılı açıklama için lütfen bu makaleye bakın). Ancak, yanıt verme için boşaltma gibi bazı kullanım örneklerinde değerlendirmenin zaman uyumsuz olarak çalıştırılması istenmektedir. Örnekte EvaluationSingleImageAsync() uzantı yöntemini EvaluateAsync()kullanarak bunu nasıl gerçekleştirebileceğimizi gösteriyoruz. Ayrıntılar için lütfen C#/.NET Yönetilen API kullanarak sayfasında Değerlendirmeyi zaman uyumsuz olarak çalıştırma bölümüne bakın.

Operations

Gürültü karşıtlığı tahmin düğümü

Bu, sınıfların sayısı çok fazla olduğunda ağları eğitmek için kullanılan yerleşik verimli (ancak yaklaşık) bir kayıp işlevi sağlar. Örneğin, on veya yüz binlerce sözcükten oluşan bir sözlükten sonraki sözcüğü tahmin etmek istediğinizde bunu kullanabilirsiniz.

Bunu kullanmak için kaybınızı şu şekilde tanımlayın:

loss = nce_loss(weights, biases, inputs, labels, noise_distribution)

ve eğitimi tamamladıktan sonra aşağıdaki gibi tahminlerde bulunabilirsiniz

logits = C.times(weights, C.reshape(inputs, (1,), 1)) + biases

Gürültü karşıtlığı tahmin kaybının çıkarım maliyetlerini azaltmaya yardımcı olamayacağını unutmayın; maliyet tasarrufları yalnızca eğitim sırasında sağlanır.

Geliştirilmiş AttentionModel

AttentionModel katmanımızdaki bir hata düzeltildi ve artık kağıdı sadık bir şekilde uyguluyoruz

Hizalamak ve Çevirmek için Ortak Learning Nöral Makine Çevirisi (Bahdanau ve diğerleri)

Ayrıca, AttentionModel bağımsız değişkenleri attention_span ve attention_axis kullanım dışı bırakılmıştır. Varsayılan değerlerine bırakılmalıdır. Bu durumda dikkat tüm dizi üzerinde hesaplanır ve çıkış, ikinci bağımsız değişkenin ekseni üzerindeki ilk bağımsız değişkenle aynı boyuttaki vektörlerin dizisidir. Bu da önemli hız kazanımlarına yol açar (CNTK 204 Öğreticimiz artık 2 kat daha hızlı çalışıyor).

Katıştırılmış katman için seyrek gradyan üzerinde toplama

Bu değişiklik, sözcük dağarcığı boyutu çok büyük olduğunda gradyan toplamadan önce seyrekten yoğuna maliyetli dönüştürme tasarrufu sağlar. Şu anda, gpu üzerinde sayısal olmayan veri paralel SGD ile eğitim yaparken GPU derlemesi için etkinleştirilmiştir. Diğer dağıtılmış öğrenciler ve CPU derlemesi için varsayılan olarak devre dışıdır. Python'da çağrılarak cntk.cntk_py.use_sparse_gradient_aggregation_in_data_parallel_sgd(False)el ile kapatılabilir. GPU derlemesinde CPU cihazıyla dağıtılmış eğitim çalıştırmaya yönelik nadir durumlarda, engellenmemiş özel durumu önlemek için bunu el ile kapatmanız gerektiğini unutmayın

1B verilerde kıvrımı etkinleştirmek için C++ dilinde daha düşük konvolusyon sıralaması

Şimdi convolution ve convolution_transpose 1 yerine 0 olarak ayarlayarak reductionRank kanal veya derinlik boyutu olmayan verileri destekleyin. Bu değişikliğin motivasyonu, geometrik verileri yeniden şekillendirme yoluyla sahte bir kanal boyutu eklemeye gerek kalmadan yerel olarak destekleyebilme yeteneği eklemektir.

Genişlemiş konvolüsyon (yalnızca GPU)

BrainScript, C++ ve Python API'si tarafından kullanıma sunulan GPU'da dilasyon kıvrımı desteği ekledik. Dilasyon kıvrımı, aslında büyük bir çekirdek gerektirmeden çekirdek boyutunu etkili bir şekilde artırır. Dilasyon kıvrımı kullanmak için en az cuDNN 6.0 gerekir. Genişlemiş konvolüsyon, içindeki https://arxiv.org/pdf/1511.07122.pdfgörüntü segmentasyonunun sonucunu iyileştirerek gerekli belleği artırmadan alıcı alanı üstel olarak artırdı. Dikkate alınacak bir nokta, şu anda CPU'da genişlemiş konvolüsyon uygulaması olmamasıdır, bu nedenle CPU üzerinde genişlemiş konvolüsyon içeren bir modeli değerlendiremezsiniz.

Konvolüsyon için ücretsiz statik eksen desteği

  • Konvolüsyon için ücretsiz statik eksenler FreeDimension için destek ekledik. Bu, giriş tensor boyutunu minibatch'ten minibatch'e değiştirmeye olanak tanır. Örneğin, CNN'ler söz konusu olduğunda bu, her minibatch'in farklı bir temel görüntü boyutuna sahip olmasını sağlar. Havuz düğümü için de benzer destek etkinleştirildi.
  • Nesne algılama için Daha Hızlı R-CNN örneğinin henüz konvolüsyon için ücretsiz statik eksen desteğinden yararlanmadığını unutmayın (yani giriş görüntülerini sabit bir boyuta ölçeklendirmeye ve doldurmaya devam eder). Bu örnek, rastgele giriş görüntüsü boyutları için serbest statik eksenler kullanacak şekilde güncelleştiriliyor ve sonraki sürüm için hedefleniyor.

Deterministic Pooling

Şimdi çağrısı cntk.debug.force_deterministic() maksimum ve ortalama havuz belirlemesi yapacaktır, bu davranış cuDNN sürüm 6 veya sonraki bir sürüme bağlıdır.

Python API'sine Kırpma Düğümü Ekleme

Bazı görüntü segmentasyon ağını desteklemek için C++ ve Python API'sine Kırpma düğümü ekledik. Kırpma düğümü, ilk girişini uzamsal eksenler boyunca kırparak sonucun ikinci (başvuru) girişinin uzamsal boyutuyla eşleşmesini sağlar. Tüm uzamsal olmayan boyutlar değişmez. Kırpma uzaklıkları, ağdan geçirilerek ve iki girişteki etkinleştirmeler arasında alıcı alanların merkezlerini eşleştirerek doğrudan belirtilebilir veya otomatik olarak hesaplanabilir

Performans

AlexNet'te CPU'da çıkarım hızını yaklaşık 2 kat artırmaya yönelik Intel MKL güncelleştirmesi

Test altyapısı güncelleştirmelerine bağımlılık nedeniyle bu çalışma bir sonraki sürüme geçirilir.

Keras ve Tensorboard

CNTK üzerinde Keras için çoklu GPU desteği.

Keras ile CNTK üzerinde paralel eğitim gerçekleştirmeyi ayrıntılı bir şekilde ele alan bir makale ekledik. Ayrıntılar burada.

CNTK için tensorboard görüntüsü desteği.

TensorBoard için görüntü özelliği desteğini ekledik. Artık CNTK kullanıcılar resimleri görüntülemek için TensorBoard kullanabilir. Daha fazla ayrıntı ve örnek burada bulunabilir.

Teşekkürler

Aşağıdaki topluluk üyelerine katkılarından dolayı teşekkür ederiz:+

Bu sürüm notlarında gözden kaçırmış olabileceğimiz topluluk katkıları için özür dileriz.

Diğer

edX'te Derin Learning Açıklandı kursu üzerinde çalışmaya devam edin.