Skip to content

Commit 5dbfd8a

Browse files
Update to Onnxruntime 1.5.1 (#5406)
* Added variables to tests to control Gpu settings * Added dependency to prerelease * Updated to 1.5.1 * Remove prerelease feed * Nit on GPU variables
1 parent 4960f9d commit 5dbfd8a

File tree

5 files changed

+51
-29
lines changed

5 files changed

+51
-29
lines changed

build/Dependencies.props

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
<GoogleProtobufPackageVersion>3.10.1</GoogleProtobufPackageVersion>
1717
<LightGBMPackageVersion>2.2.3</LightGBMPackageVersion>
1818
<MicrosoftExtensionsPackageVersion>2.1.0</MicrosoftExtensionsPackageVersion>
19-
<MicrosoftMLOnnxRuntimePackageVersion>1.3.0</MicrosoftMLOnnxRuntimePackageVersion>
19+
<MicrosoftMLOnnxRuntimePackageVersion>1.5.1</MicrosoftMLOnnxRuntimePackageVersion>
2020
<MlNetMklDepsPackageVersion>0.0.0.9</MlNetMklDepsPackageVersion>
2121
<ParquetDotNetPackageVersion>2.1.3</ParquetDotNetPackageVersion>
2222
<SystemDrawingCommonPackageVersion>4.5.0</SystemDrawingCommonPackageVersion>

test/Microsoft.ML.Functional.Tests/ONNX.cs

+8-3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ namespace Microsoft.ML.Functional.Tests
1616
{
1717
public class ONNX : FunctionalTestBaseClass
1818
{
19+
// These two members are meant to be changed
20+
// Only when manually testing the Onnx GPU nuggets
21+
private const bool _fallbackToCpu = true;
22+
private static int? _gpuDeviceId = null;
23+
1924
public ONNX(ITestOutputHelper output) : base(output)
2025
{
2126
}
@@ -52,7 +57,7 @@ public void SaveOnnxModelLoadAndScoreFastTree()
5257
// Therefore the VectorScoreColumn class (which contains a float [] field called Score) is used for the return
5358
// type on the Prediction engine.
5459
// See #2980 and #2981 for more information.
55-
var onnxEstimator = mlContext.Transforms.ApplyOnnxModel(modelPath);
60+
var onnxEstimator = mlContext.Transforms.ApplyOnnxModel(modelPath, gpuDeviceId: _gpuDeviceId, fallbackToCpu: _fallbackToCpu);
5661
var onnxModel = onnxEstimator.Fit(data);
5762

5863
// Create prediction engine and test predictions.
@@ -98,7 +103,7 @@ public void SaveOnnxModelLoadAndScoreKMeans()
98103
mlContext.Model.ConvertToOnnx(model, data, file);
99104

100105
// Load the model as a transform.
101-
var onnxEstimator = mlContext.Transforms.ApplyOnnxModel(modelPath);
106+
var onnxEstimator = mlContext.Transforms.ApplyOnnxModel(modelPath, gpuDeviceId: _gpuDeviceId, fallbackToCpu: _fallbackToCpu);
102107
var onnxModel = onnxEstimator.Fit(data);
103108

104109
// TODO #2980: ONNX outputs don't match the outputs of the model, so we must hand-correct this for now.
@@ -150,7 +155,7 @@ public void SaveOnnxModelLoadAndScoreSDCA()
150155
mlContext.Model.ConvertToOnnx(model, data, file);
151156

152157
// Load the model as a transform.
153-
var onnxEstimator = mlContext.Transforms.ApplyOnnxModel(modelPath);
158+
var onnxEstimator = mlContext.Transforms.ApplyOnnxModel(modelPath, gpuDeviceId: _gpuDeviceId, fallbackToCpu: _fallbackToCpu);
154159
var onnxModel = onnxEstimator.Fit(data);
155160

156161
// Create prediction engine and test predictions.

test/Microsoft.ML.OnnxTransformerTest/OnnxTransformTests.cs

+21-16
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ namespace Microsoft.ML.Tests
2323
{
2424
public class OnnxTransformTests : TestDataPipeBase
2525
{
26+
// These two members are meant to be changed
27+
// Only when manually testing the Onnx GPU nuggets
28+
private const bool _fallbackToCpu = true;
29+
private static int? _gpuDeviceId = null;
30+
2631
private const int InputSize = 150528;
2732

2833
private class TestData
@@ -134,7 +139,7 @@ public void TestSimpleCase()
134139
var xyData = new List<TestDataXY> { new TestDataXY() { A = new float[InputSize] } };
135140
var stringData = new List<TestDataDifferntType> { new TestDataDifferntType() { data_0 = new string[InputSize] } };
136141
var sizeData = new List<TestDataSize> { new TestDataSize() { data_0 = new float[2] } };
137-
var pipe = ML.Transforms.ApplyOnnxModel(new[] { "softmaxout_1" }, new[] { "data_0" }, modelFile);
142+
var pipe = ML.Transforms.ApplyOnnxModel(new[] { "softmaxout_1" }, new[] { "data_0" }, modelFile, gpuDeviceId: _gpuDeviceId, fallbackToCpu: _fallbackToCpu);
138143

139144
var invalidDataWrongNames = ML.Data.LoadFromEnumerable(xyData);
140145
var invalidDataWrongTypes = ML.Data.LoadFromEnumerable(stringData);
@@ -231,7 +236,7 @@ public void OnnxWorkout()
231236
var pipe = ML.Transforms.LoadImages("data_0", imageFolder, "imagePath")
232237
.Append(ML.Transforms.ResizeImages("data_0", imageHeight, imageWidth))
233238
.Append(ML.Transforms.ExtractPixels("data_0", interleavePixelColors: true))
234-
.Append(ML.Transforms.ApplyOnnxModel("softmaxout_1", "data_0", modelFile));
239+
.Append(ML.Transforms.ApplyOnnxModel("softmaxout_1", "data_0", modelFile, gpuDeviceId: _gpuDeviceId, fallbackToCpu: _fallbackToCpu));
235240

236241
TestEstimatorCore(pipe, data);
237242

@@ -292,7 +297,7 @@ public void OnnxModelScenario()
292297
}
293298
});
294299

295-
var pipeline = ML.Transforms.ApplyOnnxModel("softmaxout_1", "data_0", modelFile);
300+
var pipeline = ML.Transforms.ApplyOnnxModel("softmaxout_1", "data_0", modelFile, gpuDeviceId: _gpuDeviceId, fallbackToCpu: _fallbackToCpu);
296301
var onnxTransformer = pipeline.Fit(dataView);
297302
var onnx = onnxTransformer.Transform(dataView);
298303
var scoreCol = onnx.Schema["softmaxout_1"];
@@ -325,7 +330,7 @@ public void OnnxModelMultiInput()
325330
inb = new float[] {1,2,3,4,5}
326331
}
327332
});
328-
var pipeline = ML.Transforms.ApplyOnnxModel(new[] { "outa", "outb" }, new[] { "ina", "inb" }, modelFile);
333+
var pipeline = ML.Transforms.ApplyOnnxModel(new[] { "outa", "outb" }, new[] { "ina", "inb" }, modelFile, gpuDeviceId: _gpuDeviceId, fallbackToCpu: _fallbackToCpu);
329334
var onnxTransformer = pipeline.Fit(dataView);
330335
var onnx = onnxTransformer.Transform(dataView);
331336

@@ -365,7 +370,7 @@ public void OnnxModelOutputDifferentOrder()
365370
}
366371
});
367372
// The model returns the output columns in the order outa, outb. We are doing the opposite here, making sure the name mapping is correct.
368-
var pipeline = ML.Transforms.ApplyOnnxModel(new[] { "outb", "outa" }, new[] { "ina", "inb" }, modelFile);
373+
var pipeline = ML.Transforms.ApplyOnnxModel(new[] { "outb", "outa" }, new[] { "ina", "inb" }, modelFile, gpuDeviceId: _gpuDeviceId, fallbackToCpu: _fallbackToCpu);
369374
var onnxTransformer = pipeline.Fit(dataView);
370375
var onnx = onnxTransformer.Transform(dataView);
371376

@@ -391,7 +396,7 @@ public void OnnxModelOutputDifferentOrder()
391396
(onnxTransformer as IDisposable)?.Dispose();
392397

393398
// The model returns the output columns in the order outa, outb. We are doing only a subset, outb, to make sure the mapping works.
394-
pipeline = ML.Transforms.ApplyOnnxModel(new[] { "outb" }, new[] { "ina", "inb" }, modelFile);
399+
pipeline = ML.Transforms.ApplyOnnxModel(new[] { "outb" }, new[] { "ina", "inb" }, modelFile, gpuDeviceId: _gpuDeviceId, fallbackToCpu: _fallbackToCpu);
395400
onnxTransformer = pipeline.Fit(dataView);
396401
onnx = onnxTransformer.Transform(dataView);
397402

@@ -425,7 +430,7 @@ public void TestUnknownDimensions()
425430
new TestDataUnknownDimensions(){input = new float[] {-1.1f, -1.3f, 1.2f }},
426431
};
427432
var idv = mlContext.Data.LoadFromEnumerable(data);
428-
var pipeline = ML.Transforms.ApplyOnnxModel(modelFile);
433+
var pipeline = ML.Transforms.ApplyOnnxModel(modelFile, gpuDeviceId: _gpuDeviceId, fallbackToCpu: _fallbackToCpu);
429434
var onnxTransformer = pipeline.Fit(idv);
430435
var transformedValues = onnxTransformer.Transform(idv);
431436
var predictions = mlContext.Data.CreateEnumerable<PredictionUnknownDimensions>(transformedValues, reuseRowObject: false).ToArray();
@@ -451,7 +456,7 @@ public void TestOnnxNoneDimValue()
451456
new TestDataNoneDimension(){features = new float[] { 6.3f, 3.3f, 6.0f, 2.5f }},
452457
};
453458
var idv = mlContext.Data.LoadFromEnumerable(data);
454-
var pipeline = ML.Transforms.ApplyOnnxModel(modelFile);
459+
var pipeline = ML.Transforms.ApplyOnnxModel(modelFile, gpuDeviceId: _gpuDeviceId, fallbackToCpu: _fallbackToCpu);
455460
var onnxTransformer = pipeline.Fit(idv);
456461
var transformedValues = onnxTransformer.Transform(idv);
457462
var predictions = mlContext.Data.CreateEnumerable<PredictionNoneDimension>(transformedValues, reuseRowObject: false).ToArray();
@@ -526,7 +531,7 @@ public void OnnxModelInMemoryImage()
526531
// "softmaxout_1" are model input and output names stored in the used ONNX model file. Users may need to inspect their own models to
527532
// get the right input and output column names.
528533
var pipeline = ML.Transforms.ExtractPixels("data_0", "Image") // Map column "Image" to column "data_0"
529-
.Append(ML.Transforms.ApplyOnnxModel("softmaxout_1", "data_0", modelFile)); // Map column "data_0" to column "softmaxout_1"
534+
.Append(ML.Transforms.ApplyOnnxModel("softmaxout_1", "data_0", modelFile, gpuDeviceId: _gpuDeviceId, fallbackToCpu: _fallbackToCpu)); // Map column "data_0" to column "softmaxout_1"
530535
var model = pipeline.Fit(dataView);
531536
var onnx = model.Transform(dataView);
532537

@@ -576,7 +581,7 @@ public void TestOnnxZipMapWithInt64Keys()
576581
};
577582

578583
var dataView = ML.Data.LoadFromEnumerable(dataPoints);
579-
var pipeline = ML.Transforms.ApplyOnnxModel(new[] { "output" }, new[] { "input" }, modelFile);
584+
var pipeline = ML.Transforms.ApplyOnnxModel(new[] { "output" }, new[] { "input" }, modelFile, gpuDeviceId: _gpuDeviceId, fallbackToCpu: _fallbackToCpu);
580585
var onnxTransformer = pipeline.Fit(dataView);
581586
var transformedDataView = onnxTransformer.Transform(dataView);
582587

@@ -629,7 +634,7 @@ public void TestOnnxZipMapWithStringKeys()
629634
};
630635

631636
var dataView = ML.Data.LoadFromEnumerable(dataPoints);
632-
var pipeline = ML.Transforms.ApplyOnnxModel(new[] { "output" }, new[] { "input" }, modelFile);
637+
var pipeline = ML.Transforms.ApplyOnnxModel(new[] { "output" }, new[] { "input" }, modelFile, gpuDeviceId: _gpuDeviceId, fallbackToCpu: _fallbackToCpu);
633638
var onnxTransformer = pipeline.Fit(dataView);
634639
var transformedDataView = onnxTransformer.Transform(dataView);
635640

@@ -794,19 +799,19 @@ public void TestOnnxTransformWithCustomShapes()
794799
// Test 1.
795800
pipeline[0] = ML.Transforms.ApplyOnnxModel(
796801
new[] { nameof(PredictionWithCustomShape.argmax) }, new[] { nameof(InputWithCustomShape.input) },
797-
modelFile, shapeDictionary);
802+
modelFile, shapeDictionary, gpuDeviceId: _gpuDeviceId, fallbackToCpu: _fallbackToCpu);
798803
onnxTransformer[0] = pipeline[0].Fit(dataView);
799804
transformedDataViews[0] = onnxTransformer[0].Transform(dataView);
800805

801806
// Test 2.
802807
pipeline[1] = ML.Transforms.ApplyOnnxModel(
803808
nameof(PredictionWithCustomShape.argmax), nameof(InputWithCustomShape.input),
804-
modelFile, shapeDictionary);
809+
modelFile, shapeDictionary, gpuDeviceId: _gpuDeviceId, fallbackToCpu: _fallbackToCpu);
805810
onnxTransformer[1] = pipeline[1].Fit(dataView);
806811
transformedDataViews[1] = onnxTransformer[1].Transform(dataView);
807812

808813
// Test 3.
809-
pipeline[2] = ML.Transforms.ApplyOnnxModel(modelFile, shapeDictionary);
814+
pipeline[2] = ML.Transforms.ApplyOnnxModel(modelFile, shapeDictionary, gpuDeviceId: _gpuDeviceId, fallbackToCpu: _fallbackToCpu);
810815
onnxTransformer[2] = pipeline[2].Fit(dataView);
811816
transformedDataViews[2] = onnxTransformer[2].Transform(dataView);
812817

@@ -856,7 +861,7 @@ private void TryModelWithCustomShapesHelper(IDictionary<string, int[]> shapeDict
856861

857862
// Define a ONNX transform, trains it, and apply it to the input data.
858863
var pipeline = ML.Transforms.ApplyOnnxModel(new[] { "outa", "outb" }, new[] { "ina", "inb" },
859-
modelFile, shapeDictionary);
864+
modelFile, shapeDictionary, gpuDeviceId: _gpuDeviceId, fallbackToCpu: _fallbackToCpu);
860865
}
861866

862867
/// <summary>
@@ -956,7 +961,7 @@ public void TestOnnxTransformSaveAndLoadWithCustomShapes()
956961
var dataView = ML.Data.LoadFromEnumerable(dataPoints);
957962

958963
var pipeline = ML.Transforms.ApplyOnnxModel(nameof(PredictionWithCustomShape.argmax),
959-
nameof(InputWithCustomShape.input), modelFile, shapeDictionary);
964+
nameof(InputWithCustomShape.input), modelFile, shapeDictionary, gpuDeviceId: _gpuDeviceId, fallbackToCpu: _fallbackToCpu);
960965

961966
var model = pipeline.Fit(dataView);
962967

test/Microsoft.ML.Tests/OnnxConversionTest.cs

+12-7
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ namespace Microsoft.ML.Tests
3333
{
3434
public class OnnxConversionTest : BaseTestBaseline
3535
{
36+
// These two members are meant to be changed
37+
// Only when manually testing the Onnx GPU nuggets
38+
private const bool _fallbackToCpu = true;
39+
private static int? _gpuDeviceId = null;
40+
3641
private class AdultData
3742
{
3843
[LoadColumn(0, 10), ColumnName("FeatureVector")]
@@ -811,7 +816,7 @@ public void RemoveVariablesInPipelineTest()
811816
if (IsOnnxRuntimeSupported())
812817
{
813818
// Evaluate the saved ONNX model using the data used to train the ML.NET pipeline.
814-
var onnxEstimator = mlContext.Transforms.ApplyOnnxModel(onnxModelPath);
819+
var onnxEstimator = mlContext.Transforms.ApplyOnnxModel(onnxModelPath, gpuDeviceId: _gpuDeviceId, fallbackToCpu: _fallbackToCpu);
815820
var onnxTransformer = onnxEstimator.Fit(data);
816821
var onnxResult = onnxTransformer.Transform(data);
817822
CompareResults("Score", "Score", transformedData, onnxResult, isRightColumnOnnxScalar: true);
@@ -973,7 +978,7 @@ public void PcaOnnxConversionTest(int customOpSetVersion)
973978
if (IsOnnxRuntimeSupported())
974979
{
975980
// Evaluate the saved ONNX model using the data used to train the ML.NET pipeline.
976-
var onnxEstimator = mlContext.Transforms.ApplyOnnxModel(onnxModelPath);
981+
var onnxEstimator = mlContext.Transforms.ApplyOnnxModel(onnxModelPath, gpuDeviceId: _gpuDeviceId, fallbackToCpu: _fallbackToCpu);
977982
var onnxTransformer = onnxEstimator.Fit(dataView);
978983
var onnxResult = onnxTransformer.Transform(dataView);
979984
CompareResults("pca", "pca", transformedData, onnxResult);
@@ -1338,7 +1343,7 @@ public void NgramOnnxConversionTest(
13381343

13391344
if (IsOnnxRuntimeSupported())
13401345
{
1341-
var onnxEstimator = mlContext.Transforms.ApplyOnnxModel(onnxFilePath);
1346+
var onnxEstimator = mlContext.Transforms.ApplyOnnxModel(onnxFilePath, gpuDeviceId: _gpuDeviceId, fallbackToCpu: _fallbackToCpu);
13421347
var onnxTransformer = onnxEstimator.Fit(dataView);
13431348
var onnxResult = onnxTransformer.Transform(dataView);
13441349
var columnName = i == pipelines.Length - 1 ? "Tokens" : "NGrams";
@@ -1455,7 +1460,7 @@ public void OptionalColumnOnnxTest(DataKind dataKind)
14551460
{
14561461
string[] inputNames = onnxModel.Graph.Input.Select(valueInfoProto => valueInfoProto.Name).ToArray();
14571462
string[] outputNames = onnxModel.Graph.Output.Select(valueInfoProto => valueInfoProto.Name).ToArray();
1458-
var onnxEstimator = mlContext.Transforms.ApplyOnnxModel(outputNames, inputNames, onnxModelPath);
1463+
var onnxEstimator = mlContext.Transforms.ApplyOnnxModel(outputNames, inputNames, onnxModelPath, gpuDeviceId: _gpuDeviceId, fallbackToCpu: _fallbackToCpu);
14591464
var onnxTransformer = onnxEstimator.Fit(dataView);
14601465
var onnxResult = onnxTransformer.Transform(dataView);
14611466
CompareResults("Label", "Label", outputData, onnxResult, isRightColumnOnnxScalar: true);
@@ -1589,7 +1594,7 @@ public void UseKeyDataViewTypeAsUInt32InOnnxInput()
15891594
if (IsOnnxRuntimeSupported())
15901595
{
15911596
// Step 5: Apply Onnx Model
1592-
var onnxEstimator = mlContext.Transforms.ApplyOnnxModel(outputNames, inputNames, onnxModelPath);
1597+
var onnxEstimator = mlContext.Transforms.ApplyOnnxModel(outputNames, inputNames, onnxModelPath, gpuDeviceId: _gpuDeviceId, fallbackToCpu: _fallbackToCpu);
15931598
var onnxTransformer = onnxEstimator.Fit(reloadedData);
15941599
var onnxResult = onnxTransformer.Transform(reloadedData);
15951600

@@ -1602,7 +1607,7 @@ public void UseKeyDataViewTypeAsUInt32InOnnxInput()
16021607
string onnxModelPath2 = GetOutputPath("onnxmodel2-kdvt-as-uint32.onnx");
16031608
using (FileStream stream = new FileStream(onnxModelPath2, FileMode.Create))
16041609
mlContext.Model.ConvertToOnnx(model, mappedData, stream);
1605-
var onnxEstimator2 = mlContext.Transforms.ApplyOnnxModel(outputNames, inputNames, onnxModelPath2);
1610+
var onnxEstimator2 = mlContext.Transforms.ApplyOnnxModel(outputNames, inputNames, onnxModelPath2, gpuDeviceId: _gpuDeviceId, fallbackToCpu: _fallbackToCpu);
16061611
var onnxTransformer2 = onnxEstimator2.Fit(originalData);
16071612
var onnxResult2 = onnxTransformer2.Transform(originalData);
16081613

@@ -2034,7 +2039,7 @@ private void TestPipeline<TLastTransformer>(EstimatorChain<TLastTransformer> pip
20342039
if (IsOnnxRuntimeSupported() && columnsToCompare != null)
20352040
{
20362041
// Evaluate the saved ONNX model using the data used to train the ML.NET pipeline.
2037-
var onnxEstimator = ML.Transforms.ApplyOnnxModel(onnxModelPath);
2042+
var onnxEstimator = ML.Transforms.ApplyOnnxModel(onnxModelPath, gpuDeviceId: _gpuDeviceId, fallbackToCpu: _fallbackToCpu);
20382043
var onnxTransformer = onnxEstimator.Fit(dataView);
20392044
var onnxResult = onnxTransformer.Transform(dataView);
20402045

test/Microsoft.ML.Tests/OnnxSequenceTypeWithAttributesTest.cs

+9-2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ namespace Microsoft.ML.Tests
1919
{
2020
public class OnnxSequenceTypeWithAttributesTest : BaseTestBaseline
2121
{
22+
private const bool _fallbackToCpu = true;
23+
private static int? _gpuDeviceId = null;
24+
2225
public class OutputObj
2326
{
2427
[ColumnName("output")]
@@ -42,7 +45,9 @@ public static PredictionEngine<FloatInput, OutputObj> LoadModel(string onnxModel
4245

4346
var pipeline = ctx.Transforms.ApplyOnnxModel(
4447
modelFile: onnxModelFilePath,
45-
outputColumnNames: new[] { "output" }, inputColumnNames: new[] { "input" });
48+
outputColumnNames: new[] { "output" }, inputColumnNames: new[] { "input" },
49+
gpuDeviceId: _gpuDeviceId,
50+
fallbackToCpu: _fallbackToCpu);
4651

4752
var model = pipeline.Fit(dataView);
4853
return ctx.Model.CreatePredictionEngine<FloatInput, OutputObj>(model);
@@ -79,7 +84,9 @@ public static PredictionEngine<FloatInput, WrongOutputObj> LoadModelWithWrongCus
7984

8085
var pipeline = ctx.Transforms.ApplyOnnxModel(
8186
modelFile: onnxModelFilePath,
82-
outputColumnNames: new[] { "output" }, inputColumnNames: new[] { "input" });
87+
outputColumnNames: new[] { "output" }, inputColumnNames: new[] { "input" },
88+
gpuDeviceId: _gpuDeviceId,
89+
fallbackToCpu: _fallbackToCpu);
8390

8491
var model = pipeline.Fit(dataView);
8592
return ctx.Model.CreatePredictionEngine<FloatInput, WrongOutputObj>(model);

0 commit comments

Comments
 (0)