CNTK 2.6-os verzió kibocsátási megjegyzései

Legfontosabb változások

  • .Net-támogatás
  • Hatékony csoportos konvolúció.
  • Szekvenciális konvolúció javítása.
  • Több operátor és a meglévők fejlesztése.
  • ONNX funkciófrissítés az ONNX 1.2.2 támogatásához.
  • Az ONNX konverter által támogatott további műveletek.
  • Hibajavítások.

Hatékony csoportos konvolúció

Frissült a csoportkonvolúció megvalósítása CNTK. A frissített implementáció nem hoz létre algráfot a csoportkonvolúcióhoz (szeletelés és szorzás használatával), hanem közvetlenül cuDNN7 és MKL2017 API-kat használ. Ez javítja a teljesítményt és a modell méretét is.

Példaként egyetlen csoportkonvolúciós művelethez a következő attribútumokkal:

  • Bemeneti tenzor (C, H, W) = (32, 128, 128)
  • Kimeneti csatornák száma = 32 (a csatornaszorzó 1)
  • Csoportok = 32 (mélységi konvolúció)
  • Kernelméret = (5, 5)

Az egyetlen csomópont összehasonlítási számai a következők:

Első fejléc GPU exec. time (millisec., 1000 run avg.) CPU-példa. time (millisec., 1000 run avg.) Modell mérete (KB, CNTK formátumban)
Régi implementáció 9.349 41.921 38
Új implementáció 6.581 9.963 5
Gyorsítás/megtakarítás kb. 30% Kb. 65-75% Kb. 87%

Szekvenciális konvolúció

Frissült a szekvenciális konvolúció megvalósítása CNTK. A frissített implementáció külön szekvenciális konvolúciós réteget hoz létre. A normál konvolúciós rétegtől eltérően ez a művelet a dinamikus tengelyen (sorozaton) is konvergál, és filter_shape[0] erre a tengelyre van alkalmazva. A frissített implementáció szélesebb körű eseteket támogat, például az 1. lépést > a sorrendtengelyhez.

Például egy szekvenciális konvolúció egy egycsatornás fekete-fehér képek kötegén. A képek rögzített magassága 640, de mindegyik változó hosszúságú. A szélességet ezután szekvenciális tengely jelöli. A kitöltés engedélyezve van, és a szélesség és a magasság is 2.

 >>> 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)

Operátorok

depth_to_space és space_to_depth

A depth_to_space és a space_to_depth operátorok kompatibilitástörően változnak. Ezek frissültek, hogy megfeleljenek az ONNX specifikációjának, különösen a mélységi dimenzió térbeli dimenziókban blokkként való elhelyezésének permutációja, és fordítva, módosult. A módosítás megtekintéséhez tekintse meg a két művelet frissített dokumentumpéldáit.

Tan és Atan

A trigonometrikus műveletek Tan és Atana .

ELU

Mostantól támogatottak az attribútumok alpha az ELU-műveletekben.

Konvolúció

Frissítettük az automatikus kitöltési algoritmusokat Convolution , hogy a lehető legjobb erőfeszítéssel szimmetrikus kitöltést eredményezhessenek a CPU-n anélkül, hogy befolyásolnák a végső konvolúciós kimeneti értékeket. Ez a frissítés növeli az MKL API által lefedhető esetek körét, és javítja a teljesítményt, például a ResNet50-et.

Alapértelmezett argumentumok sorrendje

Kompatibilitástörő változás történt CNTK Python API argumentumtulajdonságában. Az alapértelmezett viselkedés úgy lett frissítve, hogy az argumentumokat a C++ sorrend helyett Python-sorrendben adja vissza. Így az argumentumok ugyanabban a sorrendben lesznek visszaadva, mint a műveleti műveletekbe való betáplált argumentumok. Ha továbbra is C++ sorrendben szeretné lekérni az argumentumokat, egyszerűen felülbírálhatja a globális beállítást. Ez a változás csak a következő műveletekre lesz hatással: Times, TransposeTimes és Gemm(internal).

Hibajavítások

  • Frissítettük a konvolúciós réteg dokumentumát a csoport- és dilációs argumentumok belefoglalásához.
  • Továbbfejlesztett bemeneti ellenőrzés lett hozzáadva a csoportkonvolúcióhoz.
  • Frissítve LogSoftMax , hogy numerikusan stabilabb implementációt használjon.
  • Kijavítottuk a Gather op helytelen színátmeneti értékét.
  • A "Nincs" csomópont érvényesítése hozzáadva a Python-klón helyettesítéséhez.
  • Érvényesítés hozzáadva a csatornatengely konvolúcióban való kitöltéséhez.
  • Hozzáadtunk CNTK natív alapértelmezett lotusIR-naplózót, hogy kijavítsuk a "DefaultLogger használatának kísérlete" hibát néhány ONNX-modell betöltésekor.
  • Az ONNX TypeStrToProtoMap megfelelő inicializálása lett hozzáadva.
  • Frissítettük a Python-dokumentumtesztet a numpy(verzió >= 1.14) újabb verziói eltérő nyomtatási formátumának kezeléséhez.
  • Kijavítottuk a készletezést (CPU), hogy helyes kimeneti értékeket állítsunk elő, ha a kernelközpont a kipárnázott bemeneti cellákon van.

ONNX

Frissítések

  • Frissítettük CNTK ONNX importálási/exportálási szolgáltatását, hogy az ONNX 1.2 specifikációt használja.
  • Jelentős frissítés a köteg- és szekvenciális tengelyek exportálás és importálás során történő kezeléséről. Ennek eredményeképpen a rendszer pontosan kezeli az összetett forgatókönyveket és a peremes eseteket.
  • Frissítettük CNTK ONNX BatchNormalization op exportálását/importálását a legújabb specifikációra.
  • Modelltartomány hozzáadva az ONNX-modell exportálásához.
  • Továbbfejlesztett hibajelentés az ONNX-modellek importálása és exportálása során.
  • Frissült DepthToSpace és SpaceToDepth működik, hogy megfeleljen az ONNX-specifikációnak a permutáción, hogy a mélységi dimenzió hogyan legyen blokkdimenzióként elhelyezve.
  • Mostantól támogatott az attribútumok exportálása alpha az ONNX-műveletben ELU .
  • Jelentős átdolgozás és ConvolutionPooling exportálás. A korábbiaktól eltérően ezek a műveletek semmilyen helyzetben nem exportálnak explicit Pad műveleteket.
  • Jelentős átalakítás az exportáláshoz és az importáláshoz ConvolutionTranspose . Az olyan attribútumok, mint a output_shape, output_paddingés pads teljes mértékben támogatottak.
  • A CNTK StopGradient mostantól nem használható.
  • OnnX-támogatás hozzáadva a TopK-művelethez.
  • OnnX-támogatás hozzáadva a következő sorrendi műveletekhez: sequence.slice, sequence.first, sequence.last, sequence.reduce_sum, sequence.reduce_max, sequence.softmax. Ezekhez a műveletekhez nincs szükség az ONNX specifikációinak kibontására. CNTK ONNX-exportőr egyszerűen egyenértékű számítási gráfokat készít ezekhez a sorrendi műveletekhez.
  • Teljes körű támogatás hozzáadva a Softmax op-hoz.
  • A CNTK szórási műveletek kompatibilisek lettek az ONNX specifikációjával.
  • Kezelje to_batch, to_sequence, unpack_batch, sequence.unpack műveletek CNTK ONNX exportőr.
  • ONNX-tesztek ONNX-tesztesetek exportálásához más eszközkészletek futtatásához és ellenőrzéséhez.
  • Kijavítottuk Hardmax//SoftmaxLogSoftmax az importálást/exportálást.
  • Az opexportálás támogatása Select hozzáadva.
  • Több trigonometriai művelet importálási/exportálási támogatása hozzáadva.
  • Frissített CNTK ONNX-művelet MatMul támogatása.
  • Frissített CNTK ONNX-művelet Gemm támogatása.
  • Frissítettük CNTK ONNX-műveletének MeanVarianceNormalization exportálását/importálását a legújabb specifikációra.
  • Frissítettük CNTK ONNX-műveletének LayerNormalization exportálását/importálását a legújabb specifikációra.
  • Frissítettük CNTK ONNX-műveletének PRelu exportálását/importálását a legújabb specifikációra.
  • Frissítettük CNTK ONNX-műveletének Gather exportálását/importálását a legújabb specifikációra.
  • Frissítettük CNTK ONNX-műveletének ImageScaler exportálását/importálását a legújabb specifikációra.
  • Frissítettük CNTK ONNX-műveletének Reduce exportálását/importálását a legújabb specifikációra.
  • Frissítettük CNTK ONNX-műveletének Flatten exportálását/importálását a legújabb specifikációra.
  • CNTK támogatása hozzáadva az ONNX-művelethezUnsqueeze.

Hiba- vagy kisebb javítások:

  • Frissült az LRN-művelet, hogy megfeleljen az ONNX 1.2 specifikációnak, ahol az size attribútum átmérője szemantikája van, nem sugár. Érvényesítés hozzáadva, ha az LRN-kernel mérete nagyobb, mint a csatorna mérete.
  • Frissített Min/Max importálási implementáció a variaikus bemenetek kezeléséhez.
  • Kijavítottuk a lehetséges fájlsérülést a meglévő ONNX-modellfájlra való újbóli mentéskor.

.NET-támogatás

A Cntk.Core.Managed kódtár hivatalosan .Net Standardra lett konvertálva, és támogatja a .Net Core és a .Net Framework alkalmazásokat Windows és Linux rendszeren is. Ettől a kiadástól kezdve a .Net-fejlesztőknek képesnek kell lenniük visszaállítani CNTK NuGet-csomagokat az új .Net SDK stílusú projektfájllal, a csomagkezelési formátumot PackageReference értékre kell állítani.

A következő C#-kód mostantól Windows és Linux rendszeren is működik:

 >>> 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;

Egy .Net Core-alkalmazás .csproj fájljában például elég egyszerűen hozzáadni egy ItemGroup záradékot: >>>>>>>>>>>>netcoreapp2.1>>> x64>>>>>>>>>>>>>>>>>>>>>

Hiba- vagy kisebb javítások:

  • Ki lett javítva a C#-sztring és a karakter natív wstring- és wchar UTF-konverziós problémái Linuxon.
  • Kijavítottuk a többbájtos és széles karakterkonverziókat a kódbázisban.
  • Kijavítottuk a NuGet-csomag mechanizmusát a .Net Standardhoz való csomagoláshoz.
  • Kijavítottunk egy memóriavesztési hibát a C# API Value osztályában, ahol a dispose utasítás nem volt meghívva objektummegsemmisítésre.