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 en SpaceToDepth 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 in ELU ONNX op.
  • Grote revisie naar Convolution en Pooling export. In tegenstelling tot voorheen exporteren deze ops geen expliciete Pad bewerkingen in elke situatie.
  • Grote revisie om te ConvolutionTranspose exporteren en te importeren. Kenmerken zoals output_shape, output_paddingen pads 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 opgelostHardmaxLogSoftmax/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.