Move towards being able to build for x86 - #1008

Merged
tannergooding merged 1 commit into
dotnet:masterfrom
tannergooding:x86
Oct 10, 2018
Merged

Move towards being able to build for x86#1008
tannergooding merged 1 commit into
dotnet:masterfrom
tannergooding:x86

Conversation

@tannergooding

Copy link
Copy Markdown
Member

This is work towards #97

It allows you to build using build.cmd -buildArch=x86 and, if you manually set the correct testhost, it allows the tests to pass.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

CC. @eerhardt

@tannergooding

Copy link
Copy Markdown
MemberAuthor

Most of the skipped tests are due to a x64 only dependency (TensorFlow or LightGBM). Some of them were caused by differences in the baseline vs actual output.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

In order to be able to run tests from the command line, we will need some kind of "test-host" logic, possibly similar to what CoreFX has. Right now, init-tools.cmd only pulls down the x64 CLI and it uses that when attempting to run the tests.

Comment threadDirectory.Build.props Outdated
}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about this test and the below test require x64? I don't see tensorflow or lightgbm in the tests. Are there other things that only work on x64?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As mentioned here: #1008 (comment), there are a few tests which have different outputs from the baseline.

These need further investigation and potentially fixes.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's put that in the code comments then, so we know which ones need to be investigated, and which ones don't.

}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar question here - what requires x64?

Comment threadDirectory.Build.props
}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 fails with "An attempt was made to load a program with an incorrect format."

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I assume Onnx support (i.e. Microsoft.ML.Scoring) is 64-bit only. @shmoradims@jignparm - can you confirm?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If so it might be more self documenting to have something like [ConditionalFact(typeof(TestUtilities), nameof(TestUtilities.IsOnnxScoringSupported))] (and similar for TF)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Was there a response to this feedback? I think this seems like a good idea. Or perhaps even deriving a few fact attributes like OnnxFact or TensorflowFact, etc.


In reply to: 222758463 [](ancestors = 222758463)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure its worth the added overhead to declare a new fact, which itself calls Environment.Is64BitProcess.

The current conditional fact requires no "new" code and clearly defines that it is only supported on 64-bit processes.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And when we try to add Aarch64 (i.e. arm64)?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Then we will need to re-review any of the currently disabled tests and possibly change this based on whether they support ARM and/or ARM64.

@eerhardteerhardtOct 10, 2018

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are multiple advantages to taking the above approach:

  1. It is self-documenting, like @danmosemsft said.
  2. It is centralized, so if it ever needs to be updated, only need to update a single spot.
  3. We can add any rules we want into the method, where you can't do this in a single attribute.
  4. It sets a good pattern for other tests to follow.

The only disadvantage I see is the small amount of effort it is going to take to make this change.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eerhardt, do you have any problem with logging a tracking issue to improve this?

I'd like to get this merged in order to unblock people and I don't think it's going to be as trivial as just defining some new attributes, since we will need to do something different for .NET Core (where we need to instead check the S.R.InteropServices.Architecture of the process)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that's fine with me.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment threadtest/Microsoft.ML.Predictor.Tests/TestPipelineSweeper.cs Outdated
///A test for binary classifiers
///</summary>
[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 output differs from Baseline

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should fix/adjust the baseline mechanism so tests like this can be executed. We shouldn't disable tests just because the baseline differs.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree, but it requires more investigation to determine what differs and why. I saw a number of other tests that are already disabled due to baseline differences as well (for all targets), that also need investigation.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you, at minimum, log an issue to address the x86 baseline differences?

other tests that are already disabled

Those tests have never been enabled in dotnet/machinelearning. They were ported to this repo and immediately disabled.

IMO, the existing test shortcomings in this repo aren't valid reasons for not following good practices going forward. We need to actively make things better, or else it won't get better.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking at a handful of the differences, they generally seem to be minor differences in the computed result (for example: 1.4157174495771871 vs 1.4157174495771872). This is likely fallout from alignment differences and algorithm differences for various System.Math (and other) functions.

The comparison logic, in general, likely needs an overhaul (to properly account for these differences cross-architecture and cross-platform).

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 fails with "Unknown command: 'train'; Format error at (83,3)-(83,4011): Illegal quoting"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be investigated and fixed.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could perhaps be a follow up issue if @tannergooding isn't the right person to investigate.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Was there a follow up issue for this?


In reply to: 222758690 [](ancestors = 222758690)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've not logged issues for anything that requires followup yet.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eerhardt

Copy link
Copy Markdown
Member

@tannergooding

Copy link
Copy Markdown
MemberAuthor

Updated. Significantly fewer tests disabled now. The ones that are still disabled depend on a 64-bit only native component or currently have results that don't match for digitsOfPrecision: 4.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

@sfilipi, would you be able to give this a quick review?

As per above, there are still a few tests that are disabled due to having less than 4 matching significant digits. From a brief look, some of these are caused by bugs in the parser/formatter code for full framework that have been fixed (or are being fixed) in .NET Core.

@sfilipi

Copy link
Copy Markdown
Member

Taking a look shortly!


In reply to: 428336304 [](ancestors = 428336304)

/// Multiclass Logistic Regression test with a tree featurizer.
/// </summary>
[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 output differs from Baseline

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 output differs from Baseline [](start = 8, length = 110)

Let's add an issue to create baselines for those x86 tests, after checking that the difference is ok.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment threadtest/Microsoft.ML.TimeSeries.Tests/TimeSeriesDirectApi.cs

@sfilipisfilipi left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@eerhardteerhardt left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@ghostghost locked as resolved and limited conversation to collaborators Mar 28, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@tannergooding@eerhardt@sfilipi@danmoseley
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Move towards being able to build for x86 - #1008

Merged
tannergooding merged 1 commit into
dotnet:masterfrom
tannergooding:x86
Oct 10, 2018
Merged

Move towards being able to build for x86#1008
tannergooding merged 1 commit into
dotnet:masterfrom
tannergooding:x86

Conversation

@tannergooding

Copy link
Copy Markdown
Member

This is work towards #97

It allows you to build using build.cmd -buildArch=x86 and, if you manually set the correct testhost, it allows the tests to pass.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

CC. @eerhardt

@tannergooding

Copy link
Copy Markdown
MemberAuthor

Most of the skipped tests are due to a x64 only dependency (TensorFlow or LightGBM). Some of them were caused by differences in the baseline vs actual output.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

In order to be able to run tests from the command line, we will need some kind of "test-host" logic, possibly similar to what CoreFX has. Right now, init-tools.cmd only pulls down the x64 CLI and it uses that when attempting to run the tests.

Comment threadDirectory.Build.props Outdated
}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about this test and the below test require x64? I don't see tensorflow or lightgbm in the tests. Are there other things that only work on x64?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As mentioned here: #1008 (comment), there are a few tests which have different outputs from the baseline.

These need further investigation and potentially fixes.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's put that in the code comments then, so we know which ones need to be investigated, and which ones don't.

}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar question here - what requires x64?

Comment threadDirectory.Build.props
}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 fails with "An attempt was made to load a program with an incorrect format."

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I assume Onnx support (i.e. Microsoft.ML.Scoring) is 64-bit only. @shmoradims@jignparm - can you confirm?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If so it might be more self documenting to have something like [ConditionalFact(typeof(TestUtilities), nameof(TestUtilities.IsOnnxScoringSupported))] (and similar for TF)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Was there a response to this feedback? I think this seems like a good idea. Or perhaps even deriving a few fact attributes like OnnxFact or TensorflowFact, etc.


In reply to: 222758463 [](ancestors = 222758463)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure its worth the added overhead to declare a new fact, which itself calls Environment.Is64BitProcess.

The current conditional fact requires no "new" code and clearly defines that it is only supported on 64-bit processes.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And when we try to add Aarch64 (i.e. arm64)?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Then we will need to re-review any of the currently disabled tests and possibly change this based on whether they support ARM and/or ARM64.

@eerhardteerhardtOct 10, 2018

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are multiple advantages to taking the above approach:

  1. It is self-documenting, like @danmosemsft said.
  2. It is centralized, so if it ever needs to be updated, only need to update a single spot.
  3. We can add any rules we want into the method, where you can't do this in a single attribute.
  4. It sets a good pattern for other tests to follow.

The only disadvantage I see is the small amount of effort it is going to take to make this change.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eerhardt, do you have any problem with logging a tracking issue to improve this?

I'd like to get this merged in order to unblock people and I don't think it's going to be as trivial as just defining some new attributes, since we will need to do something different for .NET Core (where we need to instead check the S.R.InteropServices.Architecture of the process)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that's fine with me.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment threadtest/Microsoft.ML.Predictor.Tests/TestPipelineSweeper.cs Outdated
///A test for binary classifiers
///</summary>
[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 output differs from Baseline

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should fix/adjust the baseline mechanism so tests like this can be executed. We shouldn't disable tests just because the baseline differs.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree, but it requires more investigation to determine what differs and why. I saw a number of other tests that are already disabled due to baseline differences as well (for all targets), that also need investigation.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you, at minimum, log an issue to address the x86 baseline differences?

other tests that are already disabled

Those tests have never been enabled in dotnet/machinelearning. They were ported to this repo and immediately disabled.

IMO, the existing test shortcomings in this repo aren't valid reasons for not following good practices going forward. We need to actively make things better, or else it won't get better.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking at a handful of the differences, they generally seem to be minor differences in the computed result (for example: 1.4157174495771871 vs 1.4157174495771872). This is likely fallout from alignment differences and algorithm differences for various System.Math (and other) functions.

The comparison logic, in general, likely needs an overhaul (to properly account for these differences cross-architecture and cross-platform).

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 fails with "Unknown command: 'train'; Format error at (83,3)-(83,4011): Illegal quoting"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be investigated and fixed.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could perhaps be a follow up issue if @tannergooding isn't the right person to investigate.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Was there a follow up issue for this?


In reply to: 222758690 [](ancestors = 222758690)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've not logged issues for anything that requires followup yet.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eerhardt

Copy link
Copy Markdown
Member

@tannergooding

Copy link
Copy Markdown
MemberAuthor

Updated. Significantly fewer tests disabled now. The ones that are still disabled depend on a 64-bit only native component or currently have results that don't match for digitsOfPrecision: 4.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

@sfilipi, would you be able to give this a quick review?

As per above, there are still a few tests that are disabled due to having less than 4 matching significant digits. From a brief look, some of these are caused by bugs in the parser/formatter code for full framework that have been fixed (or are being fixed) in .NET Core.

@sfilipi

Copy link
Copy Markdown
Member

Taking a look shortly!


In reply to: 428336304 [](ancestors = 428336304)

/// Multiclass Logistic Regression test with a tree featurizer.
/// </summary>
[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 output differs from Baseline

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 output differs from Baseline [](start = 8, length = 110)

Let's add an issue to create baselines for those x86 tests, after checking that the difference is ok.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment threadtest/Microsoft.ML.TimeSeries.Tests/TimeSeriesDirectApi.cs

@sfilipisfilipi left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@eerhardteerhardt left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@ghostghost locked as resolved and limited conversation to collaborators Mar 28, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@tannergooding@eerhardt@sfilipi@danmoseley
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Move towards being able to build for x86 - #1008

Merged
tannergooding merged 1 commit into
dotnet:masterfrom
tannergooding:x86
Oct 10, 2018
Merged

Move towards being able to build for x86#1008
tannergooding merged 1 commit into
dotnet:masterfrom
tannergooding:x86

Conversation

@tannergooding

Copy link
Copy Markdown
Member

This is work towards #97

It allows you to build using build.cmd -buildArch=x86 and, if you manually set the correct testhost, it allows the tests to pass.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

CC. @eerhardt

@tannergooding

Copy link
Copy Markdown
MemberAuthor

Most of the skipped tests are due to a x64 only dependency (TensorFlow or LightGBM). Some of them were caused by differences in the baseline vs actual output.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

In order to be able to run tests from the command line, we will need some kind of "test-host" logic, possibly similar to what CoreFX has. Right now, init-tools.cmd only pulls down the x64 CLI and it uses that when attempting to run the tests.

Comment threadDirectory.Build.props Outdated
}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about this test and the below test require x64? I don't see tensorflow or lightgbm in the tests. Are there other things that only work on x64?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As mentioned here: #1008 (comment), there are a few tests which have different outputs from the baseline.

These need further investigation and potentially fixes.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's put that in the code comments then, so we know which ones need to be investigated, and which ones don't.

}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar question here - what requires x64?

Comment threadDirectory.Build.props
}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 fails with "An attempt was made to load a program with an incorrect format."

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I assume Onnx support (i.e. Microsoft.ML.Scoring) is 64-bit only. @shmoradims@jignparm - can you confirm?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If so it might be more self documenting to have something like [ConditionalFact(typeof(TestUtilities), nameof(TestUtilities.IsOnnxScoringSupported))] (and similar for TF)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Was there a response to this feedback? I think this seems like a good idea. Or perhaps even deriving a few fact attributes like OnnxFact or TensorflowFact, etc.


In reply to: 222758463 [](ancestors = 222758463)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure its worth the added overhead to declare a new fact, which itself calls Environment.Is64BitProcess.

The current conditional fact requires no "new" code and clearly defines that it is only supported on 64-bit processes.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And when we try to add Aarch64 (i.e. arm64)?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Then we will need to re-review any of the currently disabled tests and possibly change this based on whether they support ARM and/or ARM64.

@eerhardteerhardtOct 10, 2018

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are multiple advantages to taking the above approach:

  1. It is self-documenting, like @danmosemsft said.
  2. It is centralized, so if it ever needs to be updated, only need to update a single spot.
  3. We can add any rules we want into the method, where you can't do this in a single attribute.
  4. It sets a good pattern for other tests to follow.

The only disadvantage I see is the small amount of effort it is going to take to make this change.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eerhardt, do you have any problem with logging a tracking issue to improve this?

I'd like to get this merged in order to unblock people and I don't think it's going to be as trivial as just defining some new attributes, since we will need to do something different for .NET Core (where we need to instead check the S.R.InteropServices.Architecture of the process)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that's fine with me.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment threadtest/Microsoft.ML.Predictor.Tests/TestPipelineSweeper.cs Outdated
///A test for binary classifiers
///</summary>
[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 output differs from Baseline

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should fix/adjust the baseline mechanism so tests like this can be executed. We shouldn't disable tests just because the baseline differs.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree, but it requires more investigation to determine what differs and why. I saw a number of other tests that are already disabled due to baseline differences as well (for all targets), that also need investigation.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you, at minimum, log an issue to address the x86 baseline differences?

other tests that are already disabled

Those tests have never been enabled in dotnet/machinelearning. They were ported to this repo and immediately disabled.

IMO, the existing test shortcomings in this repo aren't valid reasons for not following good practices going forward. We need to actively make things better, or else it won't get better.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking at a handful of the differences, they generally seem to be minor differences in the computed result (for example: 1.4157174495771871 vs 1.4157174495771872). This is likely fallout from alignment differences and algorithm differences for various System.Math (and other) functions.

The comparison logic, in general, likely needs an overhaul (to properly account for these differences cross-architecture and cross-platform).

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 fails with "Unknown command: 'train'; Format error at (83,3)-(83,4011): Illegal quoting"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be investigated and fixed.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could perhaps be a follow up issue if @tannergooding isn't the right person to investigate.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Was there a follow up issue for this?


In reply to: 222758690 [](ancestors = 222758690)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've not logged issues for anything that requires followup yet.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eerhardt

Copy link
Copy Markdown
Member

@tannergooding

Copy link
Copy Markdown
MemberAuthor

Updated. Significantly fewer tests disabled now. The ones that are still disabled depend on a 64-bit only native component or currently have results that don't match for digitsOfPrecision: 4.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

@sfilipi, would you be able to give this a quick review?

As per above, there are still a few tests that are disabled due to having less than 4 matching significant digits. From a brief look, some of these are caused by bugs in the parser/formatter code for full framework that have been fixed (or are being fixed) in .NET Core.

@sfilipi

Copy link
Copy Markdown
Member

Taking a look shortly!


In reply to: 428336304 [](ancestors = 428336304)

/// Multiclass Logistic Regression test with a tree featurizer.
/// </summary>
[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 output differs from Baseline

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 output differs from Baseline [](start = 8, length = 110)

Let's add an issue to create baselines for those x86 tests, after checking that the difference is ok.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment threadtest/Microsoft.ML.TimeSeries.Tests/TimeSeriesDirectApi.cs

@sfilipisfilipi left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@eerhardteerhardt left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@ghostghost locked as resolved and limited conversation to collaborators Mar 28, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@tannergooding@eerhardt@sfilipi@danmoseley
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Move towards being able to build for x86 - #1008

Merged
tannergooding merged 1 commit into
dotnet:masterfrom
tannergooding:x86
Oct 10, 2018
Merged

Move towards being able to build for x86#1008
tannergooding merged 1 commit into
dotnet:masterfrom
tannergooding:x86

Conversation

@tannergooding

Copy link
Copy Markdown
Member

This is work towards #97

It allows you to build using build.cmd -buildArch=x86 and, if you manually set the correct testhost, it allows the tests to pass.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

CC. @eerhardt

@tannergooding

Copy link
Copy Markdown
MemberAuthor

Most of the skipped tests are due to a x64 only dependency (TensorFlow or LightGBM). Some of them were caused by differences in the baseline vs actual output.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

In order to be able to run tests from the command line, we will need some kind of "test-host" logic, possibly similar to what CoreFX has. Right now, init-tools.cmd only pulls down the x64 CLI and it uses that when attempting to run the tests.

Comment threadDirectory.Build.props Outdated
}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about this test and the below test require x64? I don't see tensorflow or lightgbm in the tests. Are there other things that only work on x64?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As mentioned here: #1008 (comment), there are a few tests which have different outputs from the baseline.

These need further investigation and potentially fixes.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's put that in the code comments then, so we know which ones need to be investigated, and which ones don't.

}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar question here - what requires x64?

Comment threadDirectory.Build.props
}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 fails with "An attempt was made to load a program with an incorrect format."

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I assume Onnx support (i.e. Microsoft.ML.Scoring) is 64-bit only. @shmoradims@jignparm - can you confirm?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If so it might be more self documenting to have something like [ConditionalFact(typeof(TestUtilities), nameof(TestUtilities.IsOnnxScoringSupported))] (and similar for TF)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Was there a response to this feedback? I think this seems like a good idea. Or perhaps even deriving a few fact attributes like OnnxFact or TensorflowFact, etc.


In reply to: 222758463 [](ancestors = 222758463)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure its worth the added overhead to declare a new fact, which itself calls Environment.Is64BitProcess.

The current conditional fact requires no "new" code and clearly defines that it is only supported on 64-bit processes.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And when we try to add Aarch64 (i.e. arm64)?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Then we will need to re-review any of the currently disabled tests and possibly change this based on whether they support ARM and/or ARM64.

@eerhardteerhardtOct 10, 2018

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are multiple advantages to taking the above approach:

  1. It is self-documenting, like @danmosemsft said.
  2. It is centralized, so if it ever needs to be updated, only need to update a single spot.
  3. We can add any rules we want into the method, where you can't do this in a single attribute.
  4. It sets a good pattern for other tests to follow.

The only disadvantage I see is the small amount of effort it is going to take to make this change.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eerhardt, do you have any problem with logging a tracking issue to improve this?

I'd like to get this merged in order to unblock people and I don't think it's going to be as trivial as just defining some new attributes, since we will need to do something different for .NET Core (where we need to instead check the S.R.InteropServices.Architecture of the process)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that's fine with me.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment threadtest/Microsoft.ML.Predictor.Tests/TestPipelineSweeper.cs Outdated
///A test for binary classifiers
///</summary>
[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 output differs from Baseline

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should fix/adjust the baseline mechanism so tests like this can be executed. We shouldn't disable tests just because the baseline differs.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree, but it requires more investigation to determine what differs and why. I saw a number of other tests that are already disabled due to baseline differences as well (for all targets), that also need investigation.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you, at minimum, log an issue to address the x86 baseline differences?

other tests that are already disabled

Those tests have never been enabled in dotnet/machinelearning. They were ported to this repo and immediately disabled.

IMO, the existing test shortcomings in this repo aren't valid reasons for not following good practices going forward. We need to actively make things better, or else it won't get better.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking at a handful of the differences, they generally seem to be minor differences in the computed result (for example: 1.4157174495771871 vs 1.4157174495771872). This is likely fallout from alignment differences and algorithm differences for various System.Math (and other) functions.

The comparison logic, in general, likely needs an overhaul (to properly account for these differences cross-architecture and cross-platform).

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 fails with "Unknown command: 'train'; Format error at (83,3)-(83,4011): Illegal quoting"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be investigated and fixed.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could perhaps be a follow up issue if @tannergooding isn't the right person to investigate.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Was there a follow up issue for this?


In reply to: 222758690 [](ancestors = 222758690)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've not logged issues for anything that requires followup yet.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eerhardt

Copy link
Copy Markdown
Member

@tannergooding

Copy link
Copy Markdown
MemberAuthor

Updated. Significantly fewer tests disabled now. The ones that are still disabled depend on a 64-bit only native component or currently have results that don't match for digitsOfPrecision: 4.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

@sfilipi, would you be able to give this a quick review?

As per above, there are still a few tests that are disabled due to having less than 4 matching significant digits. From a brief look, some of these are caused by bugs in the parser/formatter code for full framework that have been fixed (or are being fixed) in .NET Core.

@sfilipi

Copy link
Copy Markdown
Member

Taking a look shortly!


In reply to: 428336304 [](ancestors = 428336304)

/// Multiclass Logistic Regression test with a tree featurizer.
/// </summary>
[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 output differs from Baseline

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 output differs from Baseline [](start = 8, length = 110)

Let's add an issue to create baselines for those x86 tests, after checking that the difference is ok.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment threadtest/Microsoft.ML.TimeSeries.Tests/TimeSeriesDirectApi.cs

@sfilipisfilipi left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@eerhardteerhardt left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@ghostghost locked as resolved and limited conversation to collaborators Mar 28, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@tannergooding@eerhardt@sfilipi@danmoseley
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Move towards being able to build for x86 - #1008

Merged
tannergooding merged 1 commit into
dotnet:masterfrom
tannergooding:x86
Oct 10, 2018
Merged

Move towards being able to build for x86#1008
tannergooding merged 1 commit into
dotnet:masterfrom
tannergooding:x86

Conversation

@tannergooding

Copy link
Copy Markdown
Member

This is work towards #97

It allows you to build using build.cmd -buildArch=x86 and, if you manually set the correct testhost, it allows the tests to pass.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

CC. @eerhardt

@tannergooding

Copy link
Copy Markdown
MemberAuthor

Most of the skipped tests are due to a x64 only dependency (TensorFlow or LightGBM). Some of them were caused by differences in the baseline vs actual output.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

In order to be able to run tests from the command line, we will need some kind of "test-host" logic, possibly similar to what CoreFX has. Right now, init-tools.cmd only pulls down the x64 CLI and it uses that when attempting to run the tests.

Comment threadDirectory.Build.props Outdated
}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about this test and the below test require x64? I don't see tensorflow or lightgbm in the tests. Are there other things that only work on x64?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As mentioned here: #1008 (comment), there are a few tests which have different outputs from the baseline.

These need further investigation and potentially fixes.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's put that in the code comments then, so we know which ones need to be investigated, and which ones don't.

}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar question here - what requires x64?

Comment threadDirectory.Build.props
}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 fails with "An attempt was made to load a program with an incorrect format."

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I assume Onnx support (i.e. Microsoft.ML.Scoring) is 64-bit only. @shmoradims@jignparm - can you confirm?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If so it might be more self documenting to have something like [ConditionalFact(typeof(TestUtilities), nameof(TestUtilities.IsOnnxScoringSupported))] (and similar for TF)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Was there a response to this feedback? I think this seems like a good idea. Or perhaps even deriving a few fact attributes like OnnxFact or TensorflowFact, etc.


In reply to: 222758463 [](ancestors = 222758463)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure its worth the added overhead to declare a new fact, which itself calls Environment.Is64BitProcess.

The current conditional fact requires no "new" code and clearly defines that it is only supported on 64-bit processes.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And when we try to add Aarch64 (i.e. arm64)?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Then we will need to re-review any of the currently disabled tests and possibly change this based on whether they support ARM and/or ARM64.

@eerhardteerhardtOct 10, 2018

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are multiple advantages to taking the above approach:

  1. It is self-documenting, like @danmosemsft said.
  2. It is centralized, so if it ever needs to be updated, only need to update a single spot.
  3. We can add any rules we want into the method, where you can't do this in a single attribute.
  4. It sets a good pattern for other tests to follow.

The only disadvantage I see is the small amount of effort it is going to take to make this change.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eerhardt, do you have any problem with logging a tracking issue to improve this?

I'd like to get this merged in order to unblock people and I don't think it's going to be as trivial as just defining some new attributes, since we will need to do something different for .NET Core (where we need to instead check the S.R.InteropServices.Architecture of the process)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that's fine with me.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment threadtest/Microsoft.ML.Predictor.Tests/TestPipelineSweeper.cs Outdated
///A test for binary classifiers
///</summary>
[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 output differs from Baseline

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should fix/adjust the baseline mechanism so tests like this can be executed. We shouldn't disable tests just because the baseline differs.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree, but it requires more investigation to determine what differs and why. I saw a number of other tests that are already disabled due to baseline differences as well (for all targets), that also need investigation.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you, at minimum, log an issue to address the x86 baseline differences?

other tests that are already disabled

Those tests have never been enabled in dotnet/machinelearning. They were ported to this repo and immediately disabled.

IMO, the existing test shortcomings in this repo aren't valid reasons for not following good practices going forward. We need to actively make things better, or else it won't get better.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking at a handful of the differences, they generally seem to be minor differences in the computed result (for example: 1.4157174495771871 vs 1.4157174495771872). This is likely fallout from alignment differences and algorithm differences for various System.Math (and other) functions.

The comparison logic, in general, likely needs an overhaul (to properly account for these differences cross-architecture and cross-platform).

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 fails with "Unknown command: 'train'; Format error at (83,3)-(83,4011): Illegal quoting"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be investigated and fixed.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could perhaps be a follow up issue if @tannergooding isn't the right person to investigate.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Was there a follow up issue for this?


In reply to: 222758690 [](ancestors = 222758690)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've not logged issues for anything that requires followup yet.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eerhardt

Copy link
Copy Markdown
Member

@tannergooding

Copy link
Copy Markdown
MemberAuthor

Updated. Significantly fewer tests disabled now. The ones that are still disabled depend on a 64-bit only native component or currently have results that don't match for digitsOfPrecision: 4.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

@sfilipi, would you be able to give this a quick review?

As per above, there are still a few tests that are disabled due to having less than 4 matching significant digits. From a brief look, some of these are caused by bugs in the parser/formatter code for full framework that have been fixed (or are being fixed) in .NET Core.

@sfilipi

Copy link
Copy Markdown
Member

Taking a look shortly!


In reply to: 428336304 [](ancestors = 428336304)

/// Multiclass Logistic Regression test with a tree featurizer.
/// </summary>
[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 output differs from Baseline

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 output differs from Baseline [](start = 8, length = 110)

Let's add an issue to create baselines for those x86 tests, after checking that the difference is ok.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment threadtest/Microsoft.ML.TimeSeries.Tests/TimeSeriesDirectApi.cs

@sfilipisfilipi left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@eerhardteerhardt left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@ghostghost locked as resolved and limited conversation to collaborators Mar 28, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@tannergooding@eerhardt@sfilipi@danmoseley
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Move towards being able to build for x86 - #1008

Merged
tannergooding merged 1 commit into
dotnet:masterfrom
tannergooding:x86
Oct 10, 2018
Merged

Move towards being able to build for x86#1008
tannergooding merged 1 commit into
dotnet:masterfrom
tannergooding:x86

Conversation

@tannergooding

Copy link
Copy Markdown
Member

This is work towards #97

It allows you to build using build.cmd -buildArch=x86 and, if you manually set the correct testhost, it allows the tests to pass.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

CC. @eerhardt

@tannergooding

Copy link
Copy Markdown
MemberAuthor

Most of the skipped tests are due to a x64 only dependency (TensorFlow or LightGBM). Some of them were caused by differences in the baseline vs actual output.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

In order to be able to run tests from the command line, we will need some kind of "test-host" logic, possibly similar to what CoreFX has. Right now, init-tools.cmd only pulls down the x64 CLI and it uses that when attempting to run the tests.

Comment threadDirectory.Build.props Outdated
}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about this test and the below test require x64? I don't see tensorflow or lightgbm in the tests. Are there other things that only work on x64?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As mentioned here: #1008 (comment), there are a few tests which have different outputs from the baseline.

These need further investigation and potentially fixes.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's put that in the code comments then, so we know which ones need to be investigated, and which ones don't.

}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar question here - what requires x64?

Comment threadDirectory.Build.props
}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 fails with "An attempt was made to load a program with an incorrect format."

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I assume Onnx support (i.e. Microsoft.ML.Scoring) is 64-bit only. @shmoradims@jignparm - can you confirm?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If so it might be more self documenting to have something like [ConditionalFact(typeof(TestUtilities), nameof(TestUtilities.IsOnnxScoringSupported))] (and similar for TF)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Was there a response to this feedback? I think this seems like a good idea. Or perhaps even deriving a few fact attributes like OnnxFact or TensorflowFact, etc.


In reply to: 222758463 [](ancestors = 222758463)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure its worth the added overhead to declare a new fact, which itself calls Environment.Is64BitProcess.

The current conditional fact requires no "new" code and clearly defines that it is only supported on 64-bit processes.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And when we try to add Aarch64 (i.e. arm64)?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Then we will need to re-review any of the currently disabled tests and possibly change this based on whether they support ARM and/or ARM64.

@eerhardteerhardtOct 10, 2018

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are multiple advantages to taking the above approach:

  1. It is self-documenting, like @danmosemsft said.
  2. It is centralized, so if it ever needs to be updated, only need to update a single spot.
  3. We can add any rules we want into the method, where you can't do this in a single attribute.
  4. It sets a good pattern for other tests to follow.

The only disadvantage I see is the small amount of effort it is going to take to make this change.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eerhardt, do you have any problem with logging a tracking issue to improve this?

I'd like to get this merged in order to unblock people and I don't think it's going to be as trivial as just defining some new attributes, since we will need to do something different for .NET Core (where we need to instead check the S.R.InteropServices.Architecture of the process)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that's fine with me.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment threadtest/Microsoft.ML.Predictor.Tests/TestPipelineSweeper.cs Outdated
///A test for binary classifiers
///</summary>
[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 output differs from Baseline

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should fix/adjust the baseline mechanism so tests like this can be executed. We shouldn't disable tests just because the baseline differs.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree, but it requires more investigation to determine what differs and why. I saw a number of other tests that are already disabled due to baseline differences as well (for all targets), that also need investigation.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you, at minimum, log an issue to address the x86 baseline differences?

other tests that are already disabled

Those tests have never been enabled in dotnet/machinelearning. They were ported to this repo and immediately disabled.

IMO, the existing test shortcomings in this repo aren't valid reasons for not following good practices going forward. We need to actively make things better, or else it won't get better.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking at a handful of the differences, they generally seem to be minor differences in the computed result (for example: 1.4157174495771871 vs 1.4157174495771872). This is likely fallout from alignment differences and algorithm differences for various System.Math (and other) functions.

The comparison logic, in general, likely needs an overhaul (to properly account for these differences cross-architecture and cross-platform).

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 fails with "Unknown command: 'train'; Format error at (83,3)-(83,4011): Illegal quoting"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be investigated and fixed.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could perhaps be a follow up issue if @tannergooding isn't the right person to investigate.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Was there a follow up issue for this?


In reply to: 222758690 [](ancestors = 222758690)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've not logged issues for anything that requires followup yet.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eerhardt

Copy link
Copy Markdown
Member

@tannergooding

Copy link
Copy Markdown
MemberAuthor

Updated. Significantly fewer tests disabled now. The ones that are still disabled depend on a 64-bit only native component or currently have results that don't match for digitsOfPrecision: 4.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

@sfilipi, would you be able to give this a quick review?

As per above, there are still a few tests that are disabled due to having less than 4 matching significant digits. From a brief look, some of these are caused by bugs in the parser/formatter code for full framework that have been fixed (or are being fixed) in .NET Core.

@sfilipi

Copy link
Copy Markdown
Member

Taking a look shortly!


In reply to: 428336304 [](ancestors = 428336304)

/// Multiclass Logistic Regression test with a tree featurizer.
/// </summary>
[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 output differs from Baseline

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 output differs from Baseline [](start = 8, length = 110)

Let's add an issue to create baselines for those x86 tests, after checking that the difference is ok.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment threadtest/Microsoft.ML.TimeSeries.Tests/TimeSeriesDirectApi.cs

@sfilipisfilipi left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@eerhardteerhardt left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@ghostghost locked as resolved and limited conversation to collaborators Mar 28, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@tannergooding@eerhardt@sfilipi@danmoseley
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Move towards being able to build for x86 - #1008

Merged
tannergooding merged 1 commit into
dotnet:masterfrom
tannergooding:x86
Oct 10, 2018
Merged

Move towards being able to build for x86#1008
tannergooding merged 1 commit into
dotnet:masterfrom
tannergooding:x86

Conversation

@tannergooding

Copy link
Copy Markdown
Member

This is work towards #97

It allows you to build using build.cmd -buildArch=x86 and, if you manually set the correct testhost, it allows the tests to pass.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

CC. @eerhardt

@tannergooding

Copy link
Copy Markdown
MemberAuthor

Most of the skipped tests are due to a x64 only dependency (TensorFlow or LightGBM). Some of them were caused by differences in the baseline vs actual output.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

In order to be able to run tests from the command line, we will need some kind of "test-host" logic, possibly similar to what CoreFX has. Right now, init-tools.cmd only pulls down the x64 CLI and it uses that when attempting to run the tests.

Comment threadDirectory.Build.props Outdated
}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about this test and the below test require x64? I don't see tensorflow or lightgbm in the tests. Are there other things that only work on x64?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As mentioned here: #1008 (comment), there are a few tests which have different outputs from the baseline.

These need further investigation and potentially fixes.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's put that in the code comments then, so we know which ones need to be investigated, and which ones don't.

}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar question here - what requires x64?

Comment threadDirectory.Build.props
}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 fails with "An attempt was made to load a program with an incorrect format."

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I assume Onnx support (i.e. Microsoft.ML.Scoring) is 64-bit only. @shmoradims@jignparm - can you confirm?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If so it might be more self documenting to have something like [ConditionalFact(typeof(TestUtilities), nameof(TestUtilities.IsOnnxScoringSupported))] (and similar for TF)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Was there a response to this feedback? I think this seems like a good idea. Or perhaps even deriving a few fact attributes like OnnxFact or TensorflowFact, etc.


In reply to: 222758463 [](ancestors = 222758463)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure its worth the added overhead to declare a new fact, which itself calls Environment.Is64BitProcess.

The current conditional fact requires no "new" code and clearly defines that it is only supported on 64-bit processes.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And when we try to add Aarch64 (i.e. arm64)?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Then we will need to re-review any of the currently disabled tests and possibly change this based on whether they support ARM and/or ARM64.

@eerhardteerhardtOct 10, 2018

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are multiple advantages to taking the above approach:

  1. It is self-documenting, like @danmosemsft said.
  2. It is centralized, so if it ever needs to be updated, only need to update a single spot.
  3. We can add any rules we want into the method, where you can't do this in a single attribute.
  4. It sets a good pattern for other tests to follow.

The only disadvantage I see is the small amount of effort it is going to take to make this change.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eerhardt, do you have any problem with logging a tracking issue to improve this?

I'd like to get this merged in order to unblock people and I don't think it's going to be as trivial as just defining some new attributes, since we will need to do something different for .NET Core (where we need to instead check the S.R.InteropServices.Architecture of the process)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that's fine with me.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment threadtest/Microsoft.ML.Predictor.Tests/TestPipelineSweeper.cs Outdated
///A test for binary classifiers
///</summary>
[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 output differs from Baseline

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should fix/adjust the baseline mechanism so tests like this can be executed. We shouldn't disable tests just because the baseline differs.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree, but it requires more investigation to determine what differs and why. I saw a number of other tests that are already disabled due to baseline differences as well (for all targets), that also need investigation.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you, at minimum, log an issue to address the x86 baseline differences?

other tests that are already disabled

Those tests have never been enabled in dotnet/machinelearning. They were ported to this repo and immediately disabled.

IMO, the existing test shortcomings in this repo aren't valid reasons for not following good practices going forward. We need to actively make things better, or else it won't get better.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking at a handful of the differences, they generally seem to be minor differences in the computed result (for example: 1.4157174495771871 vs 1.4157174495771872). This is likely fallout from alignment differences and algorithm differences for various System.Math (and other) functions.

The comparison logic, in general, likely needs an overhaul (to properly account for these differences cross-architecture and cross-platform).

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 fails with "Unknown command: 'train'; Format error at (83,3)-(83,4011): Illegal quoting"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be investigated and fixed.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could perhaps be a follow up issue if @tannergooding isn't the right person to investigate.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Was there a follow up issue for this?


In reply to: 222758690 [](ancestors = 222758690)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've not logged issues for anything that requires followup yet.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eerhardt

Copy link
Copy Markdown
Member

@tannergooding

Copy link
Copy Markdown
MemberAuthor

Updated. Significantly fewer tests disabled now. The ones that are still disabled depend on a 64-bit only native component or currently have results that don't match for digitsOfPrecision: 4.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

@sfilipi, would you be able to give this a quick review?

As per above, there are still a few tests that are disabled due to having less than 4 matching significant digits. From a brief look, some of these are caused by bugs in the parser/formatter code for full framework that have been fixed (or are being fixed) in .NET Core.

@sfilipi

Copy link
Copy Markdown
Member

Taking a look shortly!


In reply to: 428336304 [](ancestors = 428336304)

/// Multiclass Logistic Regression test with a tree featurizer.
/// </summary>
[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 output differs from Baseline

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 output differs from Baseline [](start = 8, length = 110)

Let's add an issue to create baselines for those x86 tests, after checking that the difference is ok.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment threadtest/Microsoft.ML.TimeSeries.Tests/TimeSeriesDirectApi.cs

@sfilipisfilipi left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@eerhardteerhardt left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@ghostghost locked as resolved and limited conversation to collaborators Mar 28, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@tannergooding@eerhardt@sfilipi@danmoseley
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Move towards being able to build for x86 - #1008

Merged
tannergooding merged 1 commit into
dotnet:masterfrom
tannergooding:x86
Oct 10, 2018
Merged

Move towards being able to build for x86#1008
tannergooding merged 1 commit into
dotnet:masterfrom
tannergooding:x86

Conversation

@tannergooding

Copy link
Copy Markdown
Member

This is work towards #97

It allows you to build using build.cmd -buildArch=x86 and, if you manually set the correct testhost, it allows the tests to pass.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

CC. @eerhardt

@tannergooding

Copy link
Copy Markdown
MemberAuthor

Most of the skipped tests are due to a x64 only dependency (TensorFlow or LightGBM). Some of them were caused by differences in the baseline vs actual output.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

In order to be able to run tests from the command line, we will need some kind of "test-host" logic, possibly similar to what CoreFX has. Right now, init-tools.cmd only pulls down the x64 CLI and it uses that when attempting to run the tests.

Comment threadDirectory.Build.props Outdated
}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about this test and the below test require x64? I don't see tensorflow or lightgbm in the tests. Are there other things that only work on x64?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As mentioned here: #1008 (comment), there are a few tests which have different outputs from the baseline.

These need further investigation and potentially fixes.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's put that in the code comments then, so we know which ones need to be investigated, and which ones don't.

}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar question here - what requires x64?

Comment threadDirectory.Build.props
}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 fails with "An attempt was made to load a program with an incorrect format."

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I assume Onnx support (i.e. Microsoft.ML.Scoring) is 64-bit only. @shmoradims@jignparm - can you confirm?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If so it might be more self documenting to have something like [ConditionalFact(typeof(TestUtilities), nameof(TestUtilities.IsOnnxScoringSupported))] (and similar for TF)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Was there a response to this feedback? I think this seems like a good idea. Or perhaps even deriving a few fact attributes like OnnxFact or TensorflowFact, etc.


In reply to: 222758463 [](ancestors = 222758463)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure its worth the added overhead to declare a new fact, which itself calls Environment.Is64BitProcess.

The current conditional fact requires no "new" code and clearly defines that it is only supported on 64-bit processes.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And when we try to add Aarch64 (i.e. arm64)?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Then we will need to re-review any of the currently disabled tests and possibly change this based on whether they support ARM and/or ARM64.

@eerhardteerhardtOct 10, 2018

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are multiple advantages to taking the above approach:

  1. It is self-documenting, like @danmosemsft said.
  2. It is centralized, so if it ever needs to be updated, only need to update a single spot.
  3. We can add any rules we want into the method, where you can't do this in a single attribute.
  4. It sets a good pattern for other tests to follow.

The only disadvantage I see is the small amount of effort it is going to take to make this change.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eerhardt, do you have any problem with logging a tracking issue to improve this?

I'd like to get this merged in order to unblock people and I don't think it's going to be as trivial as just defining some new attributes, since we will need to do something different for .NET Core (where we need to instead check the S.R.InteropServices.Architecture of the process)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that's fine with me.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment threadtest/Microsoft.ML.Predictor.Tests/TestPipelineSweeper.cs Outdated
///A test for binary classifiers
///</summary>
[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 output differs from Baseline

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should fix/adjust the baseline mechanism so tests like this can be executed. We shouldn't disable tests just because the baseline differs.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree, but it requires more investigation to determine what differs and why. I saw a number of other tests that are already disabled due to baseline differences as well (for all targets), that also need investigation.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you, at minimum, log an issue to address the x86 baseline differences?

other tests that are already disabled

Those tests have never been enabled in dotnet/machinelearning. They were ported to this repo and immediately disabled.

IMO, the existing test shortcomings in this repo aren't valid reasons for not following good practices going forward. We need to actively make things better, or else it won't get better.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking at a handful of the differences, they generally seem to be minor differences in the computed result (for example: 1.4157174495771871 vs 1.4157174495771872). This is likely fallout from alignment differences and algorithm differences for various System.Math (and other) functions.

The comparison logic, in general, likely needs an overhaul (to properly account for these differences cross-architecture and cross-platform).

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

}

[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 fails with "Unknown command: 'train'; Format error at (83,3)-(83,4011): Illegal quoting"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be investigated and fixed.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could perhaps be a follow up issue if @tannergooding isn't the right person to investigate.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Was there a follow up issue for this?


In reply to: 222758690 [](ancestors = 222758690)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've not logged issues for anything that requires followup yet.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eerhardt

Copy link
Copy Markdown
Member

@tannergooding

Copy link
Copy Markdown
MemberAuthor

Updated. Significantly fewer tests disabled now. The ones that are still disabled depend on a 64-bit only native component or currently have results that don't match for digitsOfPrecision: 4.

@tannergooding

Copy link
Copy Markdown
MemberAuthor

@sfilipi, would you be able to give this a quick review?

As per above, there are still a few tests that are disabled due to having less than 4 matching significant digits. From a brief look, some of these are caused by bugs in the parser/formatter code for full framework that have been fixed (or are being fixed) in .NET Core.

@sfilipi

Copy link
Copy Markdown
Member

Taking a look shortly!


In reply to: 428336304 [](ancestors = 428336304)

/// Multiclass Logistic Regression test with a tree featurizer.
/// </summary>
[Fact]
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 output differs from Baseline

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // x86 output differs from Baseline [](start = 8, length = 110)

Let's add an issue to create baselines for those x86 tests, after checking that the difference is ok.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment threadtest/Microsoft.ML.TimeSeries.Tests/TimeSeriesDirectApi.cs

@sfilipisfilipi left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@eerhardteerhardt left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@ghostghost locked as resolved and limited conversation to collaborators Mar 28, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@tannergooding@eerhardt@sfilipi@danmoseley