Skip to content

System.AccessViolationException at TorchSharp.PInvoke.LibTorchSharp.THSGenerator_manual_seed #1038

Open

Description

I was trying to reproduce the example of ML.Net: machinelearning-samples/samples/csharp/getting-started/MLNET2/SentenceSimilarity and I got the following error :

Fatal error. System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Repeat 2 times:

at TorchSharp.PInvoke.LibTorchSharp.THSGenerator_manual_seed(Int64)

at TorchSharp.torch+random.manual_seed(Int64)
at Microsoft.ML.TorchSharp.NasBert.NasBertTrainer2+TrainerBase[[System.Single, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.Single, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].TrainStep(Microsoft.ML.DataViewRowCursor, Microsoft.ML.ValueGetter1<System.ReadOnlyMemory1<Char>>, Microsoft.ML.ValueGetter1<System.ReadOnlyMemory1<Char>>, Microsoft.ML.ValueGetter1, System.Collections.Generic.List1<Tensor> ByRef, System.Collections.Generic.List1 ByRef)
at Microsoft.ML.TorchSharp.NasBert.NasBertTrainer2+TrainerBase[[System.Single, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.Single, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].Train(Microsoft.ML.IDataView) at Microsoft.ML.TorchSharp.NasBert.NasBertTrainer2[[System.Single, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.Single, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].Fit(Microsoft.ML.IDataView)
at Microsoft.ML.Data.EstimatorChain`1[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].Fit(Microsoft.ML.IDataView)
at Program.

$(System.String[])

in this line:

var model = pipeline.Fit(dataSplit.TrainSet);

the complete code is the following:

using Microsoft.ML.Data;
using Microsoft.ML.TorchSharp;
using MathNet.Numerics.Statistics;
using Microsoft.ML.Transforms;

// Initialize MLContext
var ctx = new MLContext();

// (Optional) Use GPU
ctx.GpuDeviceId = 0;
ctx.FallbackToCpu = false;

// Log training output
ctx.Log += (o, e) => {
	if (e.Source.Contains("NasBertTrainer"))
		Console.WriteLine(e.Message);
};

// Load data into IDataView
var columns = new[]
{
		new TextLoader.Column("search_term",DataKind.String,3),
		new TextLoader.Column("relevance",DataKind.Single,4),
		new TextLoader.Column("product_description",DataKind.String,5)
};

var loaderOptions = new TextLoader.Options()
{
	Columns = columns,
	HasHeader = true,
	Separators = new[] { ',' },
	MaxRows = 1000 // Dataset has 75k rows. Only load 1k for quicker training
};

var dataPath = Path.GetFullPath(@"C:\Dropbox\Documents\Visual Studio 2019\source\repos\Machine Learning & AI\home-depot-sentence-similarity.csv");
var textLoader = ctx.Data.CreateTextLoader(loaderOptions);
var data = textLoader.Load(dataPath);

// Split data into 80% training, 20% testing
var dataSplit = ctx.Data.TrainTestSplit(data, testFraction: 0.2);

// Define pipeline
var pipeline =
		ctx.Transforms.ReplaceMissingValues("relevance", replacementMode: MissingValueReplacingEstimator.ReplacementMode.Mean)
		.Append(ctx.Regression.Trainers.SentenceSimilarity(labelColumnName: "relevance", sentence1ColumnName: "search_term", sentence2ColumnName: "product_description"));

// Train the model
var model = pipeline.Fit(dataSplit.TrainSet);   // THIS IS THE LINE THAT PRODUCED THE ERROR


// Use the model to make predictions on the test dataset
var predictions = model.Transform(dataSplit.TestSet);

// Evaluate the model
Evaluate(predictions, "relevance", "Score");

// Save the model
ctx.Model.Save(model, data.Schema, "model.zip");

void Evaluate(IDataView predictions, string actualColumnName, string predictedColumnName)
{
	var actual =
			predictions.GetColumn<float>(actualColumnName)
					.Select(x => (double)x);
	var predicted =
			predictions.GetColumn<float>(predictedColumnName)
					.Select(x => (double)x);
	var corr = Correlation.Pearson(actual, predicted);
	Console.WriteLine($"Pearson Correlation: {corr}");
}

I used the same version of the packages that were used in the example:

MathNet.Numeric.Signed (5.00)

Microsoft.ML (2.0.0)

Microsoft.ML.TorchSharp (0.20.0)

TorchSharp-cuda-windows (0.98.3)

but the error persist.
Any idea?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions