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 Atan
a .
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
ésSpaceToDepth
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űveletbenELU
. - Jelentős átdolgozás és
Convolution
Pooling
exportálás. A korábbiaktól eltérően ezek a műveletek semmilyen helyzetben nem exportálnak explicitPad
műveleteket. - Jelentős átalakítás az exportáláshoz és az importáláshoz
ConvolutionTranspose
. Az olyan attribútumok, mint aoutput_shape
,output_padding
éspads
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
//Softmax
LogSoftmax
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űvelethez
Unsqueeze
.
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.