CNTK v2.6 Sürüm Notları

Bu sürümün öne çıkan özellikleri

  • .Net Desteği
  • Verimli grup kıvrımı.
  • Sıralı konvolüsyonun geliştirilmesi.
  • Daha fazla işleç ve mevcut işleçlerin geliştirilmesi.
  • ONNX 1.2.2'yi desteklemek için ONNX özellik güncelleştirmesi.
  • ONNX dönüştürücü tarafından desteklenen diğer operasyonlar.
  • Hata düzeltmeleri.

Verimli grup kıvrımı

CNTK'de grup konvolüsyonunun uygulanması güncelleştirildi. Güncelleştirilmiş uygulama, grup kıvrımı için alt grafik oluşturmaktan uzaklaşır (dilimleme ve dilimleme kullanarak) ve bunun yerine doğrudan cuDNN7 ve MKL2017 API'lerini kullanır. Bu, hem performans hem de model boyutu açısından deneyimi geliştirir.

Örneğin, aşağıdaki özniteliklere sahip tek bir grup convolution işlemi için:

  • Giriş tensörü (C, H, W) = (32, 128, 128)
  • Çıkış kanalı sayısı = 32 (kanal çarpanı 1'dir)
  • Gruplar = 32 (derinlik açısından konvolüsyon)
  • Çekirdek boyutu = (5, 5)

Bu tek düğümün karşılaştırma numaraları aşağıdaki gibidir:

İlk Üst Bilgi GPU exec. time (milisaniye cinsinden, 1000 çalıştırma ort.) CPU exec. time (milisaniye cinsinden, 1000 çalıştırma ort.) Model Boyutu (KB, CNTK biçiminde)
Eski uygulama 9.349 41.921 38
Yeni uygulama 6.581 9.963 5
Hız/tasarruf Yaklaşık. %30 yaklaşık. %65-75 yaklaşık. 87%

Sıralı Convolution

CNTK'de sıralı konvolüsyon uygulaması güncelleştirildi. Güncelleştirilmiş uygulama ayrı bir sıralı kıvrım katmanı oluşturur. Normal kıvrım katmanından farklı olarak, bu işlem dinamik eksende de (sıra) birleşerek bu eksene filter_shape[0] uygulanır. Güncelleştirilmiş uygulama, dizi ekseni için adım > 1 gibi daha geniş durumları destekler.

Örneğin, bir dizi tek kanallı siyah beyaz görüntü üzerinde sıralı bir kıvrım. Görüntülerin sabit yüksekliği 640'tır, ancak her biri değişken uzunluklarda genişliğe sahiptir. Daha sonra genişlik sıralı eksenle gösterilir. Doldurma etkinleştirilir ve hem genişlik hem de yükseklik için adımlar 2'dir.

 >>> f = SequentialConvolution((3,3), reduction_rank=0, pad=True, strides=(2,2), activation=C.relu)
 >>> x = C.input_variable(**Sequence[Tensor[640]])
 >>> x.shape
     (640,)
 >>> h = f(x)
 >>> h.shape
     (320,)
 >>> f.W.shape
     (1, 1, 3, 3)

İşleçler

depth_to_space ve space_to_depth

depth_to_space ve space_to_depth işleçlerinde hataya neden olan bir değişiklik vardır. Bunlar ONNX belirtimi ile eşleşecek şekilde güncelleştirilmiştir. Özellikle derinlik boyutunun uzamsal boyutlara bloklar olarak yerleştirilmesine yönelik permütasyon (veya tam tersi) değişmiştir. Değişikliği görmek için lütfen bu iki işlemi için güncelleştirilmiş belge örneklerine bakın.

Tan ve Atan

trigonometrik ops Tan ve Atandesteği eklendi.

EREN

ELU op'da öznitelik desteği alpha eklendi.

Evrişim

otomatik doldurma algoritmaları Convolution , son kıvrım çıkış değerlerini etkilemeden CPU üzerinde en iyi çabayla simetrik doldurma üretecek şekilde güncelleştirildi. Bu güncelleştirme, MKL API kapsamında olabilecek servis taleplerinin aralığını artırır ve performansı artırır, örneğin ResNet50.

Varsayılan bağımsız değişken sırası

CNTK python API'sindeki arguments özelliğinde hataya neden olan bir değişiklik vardır. Varsayılan davranış, bağımsız değişkenleri C++ sırası yerine python sırasına göre döndürecek şekilde güncelleştirildi. Bu şekilde bağımsız değişkenleri ops'a beslenen sırayla döndürür. Bağımsız değişkenleri yine de C++ sırasına göre almak istiyorsanız, genel seçeneği geçersiz kılabilirsiniz. Bu değişiklik yalnızca şu işlemleri etkilemelidir: Times, TransposeTimes ve Gemm(internal).

Hata düzeltmeleri

  • Convolution katmanı için belge, gruplama ve dilasyon bağımsız değişkenlerini içerecek şekilde güncelleştirildi.
  • Grup kıvrımı için geliştirilmiş giriş doğrulaması eklendi.
  • Daha sayısal olarak kararlı bir uygulama kullanmak için güncelleştirildi LogSoftMax .
  • Toplama işlemi yanlış gradyan değeri düzeltildi.
  • Python kopyası değişiminde 'Yok' düğümü için doğrulama eklendi.
  • Convolution'da doldurma kanalı ekseni için doğrulama eklendi.
  • Bazı ONNX modellerini yüklerken "DefaultLogger'ı kullanmaya çalış" hatasını düzeltmek için yerel varsayılan lotusIR günlükçüs CNTK eklendi.
  • ONNX TypeStrToProtoMap için uygun başlatma eklendi.
  • Python doctest, daha yeni sürüm numpy(sürüm >= 1.14) için farklı yazdırma biçimini işleyecek şekilde güncelleştirildi.
  • Çekirdek merkezi doldurulmuş giriş hücrelerinde olduğunda doğru çıkış değerleri üretmek için Havuz oluşturma (CPU) düzeltildi.

ONNX

Güncelleştirmeler

  • CNTK ONNX içeri/dışarı aktarma özelliği ONNX 1.2 belirtimlerini kullanacak şekilde güncelleştirildi.
  • Toplu iş ve sıra eksenlerinin dışarı ve içeri aktarma işlemlerinde nasıl işlenmeleri konusunda önemli güncelleştirmeler. Sonuç olarak, karmaşık senaryolar ve uç durumlar doğru şekilde işlenir.
  • CNTK ONNX BatchNormalization op dışarı/içeri aktarma özelliği en son belirtimlere güncelleştirildi.
  • ONNX model dışarı aktarma işlemine model etki alanı eklendi.
  • ONNX modellerinin içeri ve dışarı aktarılması sırasında hata raporlama geliştirildi.
  • Derinlik boyutunun blok boyutu olarak nasıl yerleştirildiğine ilişkin permütasyondaki ONNX belirtimi ile eşleşecek şekilde güncelleştirildi DepthToSpace ve SpaceToDepth operasyonlar.
  • ONNX işlemine ELU özniteliği dışarı aktarma alpha desteği eklendi.
  • Büyük elden geçirme Convolution ve Pooling dışarı aktarma. Öncekilerden farklı olarak, bu op'lar herhangi bir durumda açık Pad bir işlemi dışarı aktarmaz.
  • Dışarı ve içeri aktarma için ConvolutionTranspose büyük bakım. , output_paddingve pads gibi output_shapeöznitelikler tam olarak desteklenir.
  • CNTK'ler StopGradient için çalışmama desteği eklendi.
  • TopK op için ONNX desteği eklendi.
  • Sequence ops için ONNX desteği eklendi: sequence.slice, sequence.first, sequence.last, sequence.reduce_sum, sequence.reduce_max, sequence.softmax. Bu işlemler için ONNX belirtimini genişletmeye gerek yoktur. CNTK ONNX dışarı aktarma işlemi yalnızca bu dizi op'lar için hesaplama eşitliği olan grafikler oluşturur.
  • Softmax op için tam destek eklendi.
  • YAYıN ops CNTK ONNX belirtimiyle uyumlu hale getirildi.
  • CNTK ONNX dışarı aktarmasında to_batch, to_sequence, unpack_batch, sequence.unpack işlemlerini işleyebilir.
  • Diğer araç setlerinin çalışması ve doğrulanması için ONNX test çalışmalarını dışarı aktarmak için ONNX testleri.
  • İçeri/dışarı aktarma düzeltildiHardmaxLogSoftmax/Softmax/.
  • İşlem dışarı aktarma desteği Select eklendi.
  • Birkaç trigonometrik işlem için içeri/dışarı aktarma desteği eklendi.
  • ONNX MatMul işlemi için CNTK desteği güncelleştirildi.
  • ONNX Gemm işlemi için CNTK desteği güncelleştirildi.
  • CNTK ONNX MeanVarianceNormalization op dışarı/içeri aktarma işlemi en son belirtimlere güncelleştirildi.
  • CNTK ONNX LayerNormalization op dışarı/içeri aktarma işlemi en son belirtimlere güncelleştirildi.
  • CNTK ONNX PRelu op dışarı/içeri aktarma işlemi en son belirtimlere güncelleştirildi.
  • CNTK ONNX Gather op dışarı/içeri aktarma işlemi en son belirtimlere güncelleştirildi.
  • CNTK ONNX ImageScaler op dışarı/içeri aktarma işlemi en son belirtimlere güncelleştirildi.
  • CNTK ONNX Reduce ops dışarı/içeri aktarma işlemi en son belirtimlere güncelleştirildi.
  • CNTK ONNX Flatten op dışarı/içeri aktarma işlemi en son belirtimlere güncelleştirildi.
  • ONNX Unsqueeze işlemi için CNTK destek eklendi.

Hata veya küçük düzeltmeler:

  • LRN işlemi, özniteliğin yarıçap değil çap semantiğine sahip olduğu size ONNX 1.2 belirtimleriyle eşleşecek şekilde güncelleştirildi. LRN çekirdek boyutu kanal boyutundan büyükse doğrulama eklendi.
  • Variadic girişleri işlemek için içeri aktarma uygulaması güncelleştirildi Min/Max .
  • Mevcut ONNX model dosyasının üzerine yeniden kaydetme sırasında oluşan olası dosya bozulması düzeltildi.

.Net Desteği

Cntk.Core.Managed kitaplığı resmi olarak .Net Standard'a dönüştürüldü ve hem Windows hem de Linux üzerinde .Net Core ve .Net Framework uygulamalarını destekler. Bu sürümden itibaren .Net geliştiricileri, paket yönetimi biçimi PackageReference olarak ayarlanmış yeni .Net SDK stili proje dosyasını kullanarak CNTK Nuget paketlerini geri yükleyebilmelidir.

Aşağıdaki C# kodu artık hem Windows hem de Linux üzerinde çalışır:

 >>> var weightParameterName = "weight";
 >>> var biasParameterName = "bias";
 >>> var inputName = "input";
 >>> var outputDim = 2;
 >>> var inputDim = 3;
 >>> Variable inputVariable = Variable.InputVariable(new int[] { inputDim }, DataType.Float, inputName);
 >>> var weightParameter = new Parameter(new int[] { outputDim, inputDim }, DataType.Float, 1, device, weightParameterName);
 >>> var biasParameter = new Parameter(new int[] { outputDim }, DataType.Float, 0, device, biasParameterName);
 >>> 
 >>> Function modelFunc = CNTKLib.Times(weightParameter, inputVariable) + biasParameter;

Örneğin, bir .Net Core uygulamasının .csproj dosyasına ItemGroup yan tümcesi eklemek yeterlidir: >>>>>>>>>>>>netcoreapp2.1>>> x64>>>>>>>>>>>>>>>>>>>>>

Hata veya küçük düzeltmeler:

  • Linux'ta yerel wstring ve wchar UTF dönüştürme sorunları için C# dizesi ve karakteri düzeltildi.
  • Kod tabanı genelinde çok baytlı ve geniş karakter dönüştürmeleri düzeltildi.
  • .Net Standard için paketlenmesi gereken Nuget paket mekanizması düzeltildi.
  • C# API'sindeki Value sınıfında nesne yok etme sırasında Dispose'ın çağrılmamasıyla ilgili bellek sızıntısı sorunu düzeltildi.