opmerkingen bij de release van CNTK v2.6
Hoogtepunten van deze release
- .NET-ondersteuning
- Efficiënte groepsconvolution.
- Verbetering van sequentiële convolutie.
- Meer operators en verbetering van bestaande operators.
- ONNX-onderdelenupdate ter ondersteuning van ONNX 1.2.2.
- Meer ops ondersteund door ONNX converter.
- Insectenmoeilijke.
Efficiënte groepsconvolution
De implementatie van groepsconvolution in CNTK is bijgewerkt. De bijgewerkte implementatie maakt geen subgrafiek meer voor groepsconvolution (met behulp van segmentering en segmentering) en maakt in plaats daarvan rechtstreeks gebruik van cuDNN7- en MKL2017-API's. Dit verbetert de ervaring op het gebied van prestaties en modelgrootte.
Als voorbeeld: voor één groepsconvolution met de volgende kenmerken:
- Invoertenor (C, H, W) = (32, 128, 128)
- Aantal uitvoerkanalen = 32 (kanaalvermenigvuldiging is 1)
- Groepen = 32 (diepte verstandige convolution)
- Kernelgrootte = (5, 5)
De vergelijkingsnummers voor dit enkele knooppunt zijn als volgt:
Eerste koptekst | GPU exec. tijd (in millisec., 1000 run avg.) | CPU-exec. tijd (in millisec., 1000 run avg.) | Modelgrootte (in KB, CNTK-indeling) |
---|---|---|---|
Oude implementatie | 9.349 | 41.921 | 38 |
Nieuwe implementatie | 6.581 | 9.963 | 5 |
Snelheids-/besparingen Ca. | 30% ca. | 65-75% ca. | 87% |
Sequentiële convolutie
De implementatie van sequentiële convolutie in CNTK is bijgewerkt. De bijgewerkte implementatie maakt een afzonderlijke sequentiële convolutielaag. Afgezien van de normale convolutielaag, wordt deze bewerking ook op de dynamische as(reeks) samengebracht en wordt filter_shape[0] toegepast op die as. De bijgewerkte implementatie ondersteunt bredere gevallen, zoals waarbij stride > 1 voor de reeksas.
Bijvoorbeeld een sequentiële convolutie over een reeks zwart-wit afbeeldingen van één kanaal. De afbeeldingen hebben dezelfde vaste hoogte van 640, maar elk met de breedte van variabele lengten. De breedte wordt vervolgens vertegenwoordigd door de sequentiële as. Opvulling is ingeschakeld en de breedte en hoogte zijn 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)
Operators
depth_to_space en space_to_depth
Er is een belangrijke wijziging in de depth_to_space - en space_to_depth-operators . Deze zijn bijgewerkt zodat deze overeenkomen met de ONNX-specificatie, met name de permutatie voor hoe de dieptedimensie als blokken in de ruimtelijke dimensies wordt geplaatst en omgekeerd is gewijzigd. Raadpleeg de bijgewerkte documentenvoorbeelden voor deze twee ops om de wijziging te zien.
Tan en Atan
Ondersteuning toegevoegd voor trigonometrische ops Tan
en Atan
.
ELU
Ondersteuning toegevoegd voor alpha
kenmerk in ELU op.
Convolutie
Automatische opvullingsalgoritmen bijgewerkt voor het produceren van symmetrische opvulling op basis van Convolution
de CPU, zonder dat dit van invloed is op de uiteindelijke uitvoerwaarden van de convolutie. Deze update verhoogt het bereik van cases die kunnen worden gedekt door de MKL-API en verbetert de prestaties, bijvoorbeeld ResNet50.
Standaardargumentenvolgorde
Er is een belangrijke wijziging in de eigenschap argumenten in CNTK Python-API. Het standaardgedrag is bijgewerkt om argumenten in Python-volgorde te retourneren in plaats van in C++-volgorde. Op deze manier worden argumenten in dezelfde volgorde geretourneerd als ze worden ingevoerd in ops. Als u nog steeds argumenten in C++-volgorde wilt ophalen, kunt u de algemene optie gewoon overschrijven. Deze wijziging mag alleen van invloed zijn op de volgende bewerkingen: Times, TransponeTimes en Gemm(intern).
Opgeloste fouten
- Document voor convolution-laag bijgewerkt om groeps- en dilationargumenten op te nemen.
- Verbeterde invoervalidatie toegevoegd voor groepsconvolution.
- Bijgewerkt
LogSoftMax
om numeriek stabielere implementatie te gebruiken. - De onjuiste kleurovergangswaarde van Gather op is opgelost.
- Validatie toegevoegd voor het knooppunt None in python-kloonvervanging.
- Validatie toegevoegd voor opvulkanaalas in convolutie.
- Er is CNTK systeemeigen lotusIR-logboekregistratie toegevoegd om de fout 'Poging om DefaultLogger te gebruiken' op te lossen bij het laden van sommige ONNX-modellen.
- De juiste initialisatie toegevoegd voor ONNX TypeStrToProtoMap.
- Python doctest bijgewerkt voor het afhandelen van een andere afdrukindeling voor nieuwere versie numpy(versie >= 1.14).
- Opgeloste pooling (CPU) om juiste uitvoerwaarden te produceren wanneer kernelcentrum zich op gevulde invoercellen bevindt.
ONNX
Updates
- De ONNX-import/export van CNTK is bijgewerkt om onnx 1.2-specificatie te gebruiken.
- Belangrijke update van de manier waarop batch- en reeksassen worden verwerkt in export en import. Als gevolg hiervan worden de complexe scenario's en randcases nauwkeurig afgehandeld.
- Onnx
BatchNormalization
op export/import van CNTK bijgewerkt naar de nieuwste specificatie. - Modeldomein toegevoegd aan export van ONNX-modellen.
- Verbeterde foutrapportage tijdens het importeren en exporteren van ONNX-modellen.
- Bijgewerkte
DepthToSpace
enSpaceToDepth
ops die overeenkomen met de ONNX-specificatie over de permutatie voor hoe de dieptedimensie wordt geplaatst als blokdimensie. - Ondersteuning toegevoegd voor het exporteren van
alpha
kenmerk inELU
ONNX op. - Grote revisie naar
Convolution
enPooling
export. In tegenstelling tot voorheen exporteren deze ops geen explicietePad
bewerkingen in elke situatie. - Grote revisie om te
ConvolutionTranspose
exporteren en te importeren. Kenmerken zoalsoutput_shape
,output_padding
enpads
worden volledig ondersteund. - Er is ondersteuning toegevoegd voor CNTK
StopGradient
als no-op. - ONNX-ondersteuning toegevoegd voor TopK op.
- ONNX-ondersteuning toegevoegd voor reeksops: sequence.slice, sequence.first, sequence.last, sequence.reduce_sum, sequence.reduce_max, sequence.softmax. Voor deze bewerkingen hoeft u de ONNX-specificatie niet uit te breiden. CNTK ONNX-exporteur bouwt alleen rekenkundige equavalente grafieken voor deze reeks-ops.
- Volledige ondersteuning toegevoegd voor Softmax op.
- Gemaakt CNTK broadcast-ops compatibel met ONNX-specificatie.
- Verwerk to_batch, to_sequence, unpack_batch, sequence.unpacks in CNTK ONNX-exporteur.
- ONNX-tests voor het exporteren van ONNX-testcases voor andere toolkits om uit te voeren en te valideren.
- Import/export opgelost
Hardmax
LogSoftmax
/Softmax
/. - Er is ondersteuning toegevoegd voor
Select
op export. - Er is ondersteuning toegevoegd voor import/export voor verschillende trigonometrische ops.
- Bijgewerkte CNTK ondersteuning voor ONNX
MatMul
op. - Bijgewerkte CNTK ondersteuning voor ONNX
Gemm
op. - Onnx
MeanVarianceNormalization
op export/import van CNTK bijgewerkt naar de nieuwste specificatie. - Onnx
LayerNormalization
op export/import van CNTK bijgewerkt naar de nieuwste specificatie. - Onnx
PRelu
op export/import van CNTK bijgewerkt naar de nieuwste specificatie. - Onnx
Gather
op export/import van CNTK bijgewerkt naar de nieuwste specificatie. - Onnx
ImageScaler
op export/import van CNTK bijgewerkt naar de nieuwste specificatie. - De ONNX
Reduce
ops export/import van CNTK bijgewerkt naar de meest recente specificatie. - Onnx
Flatten
op export/import van CNTK bijgewerkt naar de nieuwste specificatie. - Er is CNTK ondersteuning toegevoegd voor ONNX
Unsqueeze
op.
Opgeloste fouten of kleine oplossingen:
- LRN op bijgewerkt zodat deze overeenkomt met ONNX 1.2-specificatie waarbij het
size
kenmerk de semantiek van diameter heeft, niet radius. Validatie toegevoegd als de LRN-kernel groter is dan kanaalgrootte. - De importimplementatie is bijgewerkt
Min
/Max
om variadic-invoer af te handelen. - Mogelijke bestandsbeschadiging opgelost bij het opslaan van een bestaand ONNX-modelbestand.
.NET-ondersteuning
De Cntk.Core.Managed-bibliotheek is officieel geconverteerd naar .Net Standard en ondersteunt .Net Core- en .Net Framework-toepassingen op zowel Windows als Linux. Vanaf deze release moeten .Net-ontwikkelaars CNTK Nuget-pakketten kunnen herstellen met behulp van een nieuw .Net SDK-projectbestand met pakketbeheerindeling ingesteld op PackageReference.
De volgende C#-code werkt nu op zowel Windows als Linux:
>>> 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;
Het toevoegen van een ItemGroup-component in het .csproj-bestand van een .Net Core-toepassing is bijvoorbeeld voldoende: >>>>>>>>>>>>netcoreapp2.1>>> x64>>>>>>>>>>>>>>>>>>>>>
Opgeloste fouten of kleine oplossingen:
- Problemen met C#-tekenreeks en tekenreeks opgelost in systeemeigen wstring en wchar UTF-conversie in Linux.
- Er zijn meerderebyte- en brede tekenconversies in de codebasis opgelost.
- Er is een nuget-pakketmechanisme opgelost om in te pakken voor .Net Standard.
- Er is een probleem opgelost met het geheugenlek in de waardeklasse in de C#-API, waarbij Verwijdering niet werd aangeroepen bij objectvernietiging.