wip - Add Sweepable Pipeline - #5019

Closed
LittleLittleCloud wants to merge 4 commits into
dotnet:masterfrom
LittleLittleCloud:u/xiaoyun/AutoPipeline
Closed

wip - Add Sweepable Pipeline#5019
LittleLittleCloud wants to merge 4 commits into
dotnet:masterfrom
LittleLittleCloud:u/xiaoyun/AutoPipeline

Conversation

@LittleLittleCloud

@LittleLittleCloudLittleLittleCloud commented Apr 12, 2020

Copy link
Copy Markdown
Member

Allow users to sweep over pre-defined paramaters with similar API of creating/training a pipeline using sweepers defined in Microsoft.ML.Sweeper.

In the current state, only RandomSweeper and GridSearchSweeper is provided, and other sweepers like SMAC will be added soon.

Right now, only one sweepable trainer is allowed in each pipeline, however, we can support multi-trainer easily with a few lines change.

One of a sample pipeline here, it uses RandomSweeper over a user-defined paramater set and sweeps over 20 times

publicvoidRecommendationE2ETest_RandomSweeper()

And part of it's Output

Alpha=0.7001 Lambda=0.11 LearningRate=0.001
RMSE: 3.08841817087814
Alpha=0.7001 Lambda=0.01 LearningRate=0.0709999949
RMSE: 0.88847094121806
Alpha=0.3001 Lambda=0.91 LearningRate=0.021
RMSE: 1.33374709132294
...

Why I create this PR

Auto sweeping parameter is quite a useful feature in Automate ML, AutoML.Net supports it internally but those API is not exposed and sweeping value is fixed, moreover, it only supports a few trainers. It will be great if ML.Net has some external API to allow users to sweep over trainer's parameters on the pipeline level.

What will be next

  • allow sweeping Enum and Int type
  • allow user sets up discrete numeric options using OptionBase class.
  • adding more sweepers (SMAC....)
  • ( if I have time ) create a similar API experience with what AutoML.Net has (saying, creating customer experiment based on pipeline, providing CV training and evaluation, and generate CodeGen afterwards)

@LittleLittleCloud
LittleLittleCloud requested review from a team as code ownersApril 12, 2020 23:54
@LittleLittleCloudLittleLittleCloud changed the title Add Sweepable Pipelinewip - Add Sweepable PipelineApr 12, 2020
@mentorfloat

Copy link
Copy Markdown

@LittleLittleCloud A method to perform automated hyperparameter tuning outside of using AutoML will be helpful. Was there a reason why you closed the PR?

@LittleLittleCloud

Copy link
Copy Markdown
MemberAuthor

@LittleLittleCloud A method to perform automated hyperparameter tuning outside of using AutoML will be helpful. Was there a reason why you closed the PR?

@mentorfloat
It's just time wasn't mature at that time but we are actively discussing it now, will follow up sooner

@justinormont

Copy link
Copy Markdown
Contributor

@mentorfloat: You should be able to use just the hyperparameter optimization of the AutoML code if you either (1) prefeaturizing your dataset, or (2) by specifying an estimator chain as a prefeaturizer in the API call (sample).

This will still do the model selection, but you can reduce the search space to only one trainer. E.g. only LightGBM.

The main control missing from this method is specifying the exact range of the hyperparameters to search over.


Another method for sweeping hyperparamers is using the command-line sweepers in MAML. The code is still in the repo, but I haven't tried if it works.

The attached sweeping command (Sweep_SmartSweep.rsp) would be run as: dotnet ./bin/AnyCPU.Release/Microsoft.ML.Console/netcoreapp2.1/MML.dll @Sweep_SmartSweep.rsp. To make it work, you'd have to put in a proxy program called maml.exe on Win or maml on macOS/Linux which calls dotnet MML.dll with its given parameters, to proxy along the pipeline for the individual models in the sweep.

The MAML sweep command is powerful, but exposing with a clean C# interface would be best.

@justinormontjustinormont mentioned this pull request Nov 8, 2021
@ghostghost locked as resolved and limited conversation to collaborators Mar 18, 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.

3 participants

@LittleLittleCloud@mentorfloat@justinormont
, '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

wip - Add Sweepable Pipeline - #5019

Closed
LittleLittleCloud wants to merge 4 commits into
dotnet:masterfrom
LittleLittleCloud:u/xiaoyun/AutoPipeline
Closed

wip - Add Sweepable Pipeline#5019
LittleLittleCloud wants to merge 4 commits into
dotnet:masterfrom
LittleLittleCloud:u/xiaoyun/AutoPipeline

Conversation

@LittleLittleCloud

@LittleLittleCloudLittleLittleCloud commented Apr 12, 2020

Copy link
Copy Markdown
Member

Allow users to sweep over pre-defined paramaters with similar API of creating/training a pipeline using sweepers defined in Microsoft.ML.Sweeper.

In the current state, only RandomSweeper and GridSearchSweeper is provided, and other sweepers like SMAC will be added soon.

Right now, only one sweepable trainer is allowed in each pipeline, however, we can support multi-trainer easily with a few lines change.

One of a sample pipeline here, it uses RandomSweeper over a user-defined paramater set and sweeps over 20 times

publicvoidRecommendationE2ETest_RandomSweeper()

And part of it's Output

Alpha=0.7001 Lambda=0.11 LearningRate=0.001
RMSE: 3.08841817087814
Alpha=0.7001 Lambda=0.01 LearningRate=0.0709999949
RMSE: 0.88847094121806
Alpha=0.3001 Lambda=0.91 LearningRate=0.021
RMSE: 1.33374709132294
...

Why I create this PR

Auto sweeping parameter is quite a useful feature in Automate ML, AutoML.Net supports it internally but those API is not exposed and sweeping value is fixed, moreover, it only supports a few trainers. It will be great if ML.Net has some external API to allow users to sweep over trainer's parameters on the pipeline level.

What will be next

  • allow sweeping Enum and Int type
  • allow user sets up discrete numeric options using OptionBase class.
  • adding more sweepers (SMAC....)
  • ( if I have time ) create a similar API experience with what AutoML.Net has (saying, creating customer experiment based on pipeline, providing CV training and evaluation, and generate CodeGen afterwards)

@LittleLittleCloud
LittleLittleCloud requested review from a team as code ownersApril 12, 2020 23:54
@LittleLittleCloudLittleLittleCloud changed the title Add Sweepable Pipelinewip - Add Sweepable PipelineApr 12, 2020
@mentorfloat

Copy link
Copy Markdown

@LittleLittleCloud A method to perform automated hyperparameter tuning outside of using AutoML will be helpful. Was there a reason why you closed the PR?

@LittleLittleCloud

Copy link
Copy Markdown
MemberAuthor

@LittleLittleCloud A method to perform automated hyperparameter tuning outside of using AutoML will be helpful. Was there a reason why you closed the PR?

@mentorfloat
It's just time wasn't mature at that time but we are actively discussing it now, will follow up sooner

@justinormont

Copy link
Copy Markdown
Contributor

@mentorfloat: You should be able to use just the hyperparameter optimization of the AutoML code if you either (1) prefeaturizing your dataset, or (2) by specifying an estimator chain as a prefeaturizer in the API call (sample).

This will still do the model selection, but you can reduce the search space to only one trainer. E.g. only LightGBM.

The main control missing from this method is specifying the exact range of the hyperparameters to search over.


Another method for sweeping hyperparamers is using the command-line sweepers in MAML. The code is still in the repo, but I haven't tried if it works.

The attached sweeping command (Sweep_SmartSweep.rsp) would be run as: dotnet ./bin/AnyCPU.Release/Microsoft.ML.Console/netcoreapp2.1/MML.dll @Sweep_SmartSweep.rsp. To make it work, you'd have to put in a proxy program called maml.exe on Win or maml on macOS/Linux which calls dotnet MML.dll with its given parameters, to proxy along the pipeline for the individual models in the sweep.

The MAML sweep command is powerful, but exposing with a clean C# interface would be best.

@justinormontjustinormont mentioned this pull request Nov 8, 2021
@ghostghost locked as resolved and limited conversation to collaborators Mar 18, 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.

3 participants

@LittleLittleCloud@mentorfloat@justinormont
, '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

wip - Add Sweepable Pipeline - #5019

Closed
LittleLittleCloud wants to merge 4 commits into
dotnet:masterfrom
LittleLittleCloud:u/xiaoyun/AutoPipeline
Closed

wip - Add Sweepable Pipeline#5019
LittleLittleCloud wants to merge 4 commits into
dotnet:masterfrom
LittleLittleCloud:u/xiaoyun/AutoPipeline

Conversation

@LittleLittleCloud

@LittleLittleCloudLittleLittleCloud commented Apr 12, 2020

Copy link
Copy Markdown
Member

Allow users to sweep over pre-defined paramaters with similar API of creating/training a pipeline using sweepers defined in Microsoft.ML.Sweeper.

In the current state, only RandomSweeper and GridSearchSweeper is provided, and other sweepers like SMAC will be added soon.

Right now, only one sweepable trainer is allowed in each pipeline, however, we can support multi-trainer easily with a few lines change.

One of a sample pipeline here, it uses RandomSweeper over a user-defined paramater set and sweeps over 20 times

publicvoidRecommendationE2ETest_RandomSweeper()

And part of it's Output

Alpha=0.7001 Lambda=0.11 LearningRate=0.001
RMSE: 3.08841817087814
Alpha=0.7001 Lambda=0.01 LearningRate=0.0709999949
RMSE: 0.88847094121806
Alpha=0.3001 Lambda=0.91 LearningRate=0.021
RMSE: 1.33374709132294
...

Why I create this PR

Auto sweeping parameter is quite a useful feature in Automate ML, AutoML.Net supports it internally but those API is not exposed and sweeping value is fixed, moreover, it only supports a few trainers. It will be great if ML.Net has some external API to allow users to sweep over trainer's parameters on the pipeline level.

What will be next

  • allow sweeping Enum and Int type
  • allow user sets up discrete numeric options using OptionBase class.
  • adding more sweepers (SMAC....)
  • ( if I have time ) create a similar API experience with what AutoML.Net has (saying, creating customer experiment based on pipeline, providing CV training and evaluation, and generate CodeGen afterwards)

@LittleLittleCloud
LittleLittleCloud requested review from a team as code ownersApril 12, 2020 23:54
@LittleLittleCloudLittleLittleCloud changed the title Add Sweepable Pipelinewip - Add Sweepable PipelineApr 12, 2020
@mentorfloat

Copy link
Copy Markdown

@LittleLittleCloud A method to perform automated hyperparameter tuning outside of using AutoML will be helpful. Was there a reason why you closed the PR?

@LittleLittleCloud

Copy link
Copy Markdown
MemberAuthor

@LittleLittleCloud A method to perform automated hyperparameter tuning outside of using AutoML will be helpful. Was there a reason why you closed the PR?

@mentorfloat
It's just time wasn't mature at that time but we are actively discussing it now, will follow up sooner

@justinormont

Copy link
Copy Markdown
Contributor

@mentorfloat: You should be able to use just the hyperparameter optimization of the AutoML code if you either (1) prefeaturizing your dataset, or (2) by specifying an estimator chain as a prefeaturizer in the API call (sample).

This will still do the model selection, but you can reduce the search space to only one trainer. E.g. only LightGBM.

The main control missing from this method is specifying the exact range of the hyperparameters to search over.


Another method for sweeping hyperparamers is using the command-line sweepers in MAML. The code is still in the repo, but I haven't tried if it works.

The attached sweeping command (Sweep_SmartSweep.rsp) would be run as: dotnet ./bin/AnyCPU.Release/Microsoft.ML.Console/netcoreapp2.1/MML.dll @Sweep_SmartSweep.rsp. To make it work, you'd have to put in a proxy program called maml.exe on Win or maml on macOS/Linux which calls dotnet MML.dll with its given parameters, to proxy along the pipeline for the individual models in the sweep.

The MAML sweep command is powerful, but exposing with a clean C# interface would be best.

@justinormontjustinormont mentioned this pull request Nov 8, 2021
@ghostghost locked as resolved and limited conversation to collaborators Mar 18, 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.

3 participants

@LittleLittleCloud@mentorfloat@justinormont
, '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

wip - Add Sweepable Pipeline - #5019

Closed
LittleLittleCloud wants to merge 4 commits into
dotnet:masterfrom
LittleLittleCloud:u/xiaoyun/AutoPipeline
Closed

wip - Add Sweepable Pipeline#5019
LittleLittleCloud wants to merge 4 commits into
dotnet:masterfrom
LittleLittleCloud:u/xiaoyun/AutoPipeline

Conversation

@LittleLittleCloud

@LittleLittleCloudLittleLittleCloud commented Apr 12, 2020

Copy link
Copy Markdown
Member

Allow users to sweep over pre-defined paramaters with similar API of creating/training a pipeline using sweepers defined in Microsoft.ML.Sweeper.

In the current state, only RandomSweeper and GridSearchSweeper is provided, and other sweepers like SMAC will be added soon.

Right now, only one sweepable trainer is allowed in each pipeline, however, we can support multi-trainer easily with a few lines change.

One of a sample pipeline here, it uses RandomSweeper over a user-defined paramater set and sweeps over 20 times

publicvoidRecommendationE2ETest_RandomSweeper()

And part of it's Output

Alpha=0.7001 Lambda=0.11 LearningRate=0.001
RMSE: 3.08841817087814
Alpha=0.7001 Lambda=0.01 LearningRate=0.0709999949
RMSE: 0.88847094121806
Alpha=0.3001 Lambda=0.91 LearningRate=0.021
RMSE: 1.33374709132294
...

Why I create this PR

Auto sweeping parameter is quite a useful feature in Automate ML, AutoML.Net supports it internally but those API is not exposed and sweeping value is fixed, moreover, it only supports a few trainers. It will be great if ML.Net has some external API to allow users to sweep over trainer's parameters on the pipeline level.

What will be next

  • allow sweeping Enum and Int type
  • allow user sets up discrete numeric options using OptionBase class.
  • adding more sweepers (SMAC....)
  • ( if I have time ) create a similar API experience with what AutoML.Net has (saying, creating customer experiment based on pipeline, providing CV training and evaluation, and generate CodeGen afterwards)

@LittleLittleCloud
LittleLittleCloud requested review from a team as code ownersApril 12, 2020 23:54
@LittleLittleCloudLittleLittleCloud changed the title Add Sweepable Pipelinewip - Add Sweepable PipelineApr 12, 2020
@mentorfloat

Copy link
Copy Markdown

@LittleLittleCloud A method to perform automated hyperparameter tuning outside of using AutoML will be helpful. Was there a reason why you closed the PR?

@LittleLittleCloud

Copy link
Copy Markdown
MemberAuthor

@LittleLittleCloud A method to perform automated hyperparameter tuning outside of using AutoML will be helpful. Was there a reason why you closed the PR?

@mentorfloat
It's just time wasn't mature at that time but we are actively discussing it now, will follow up sooner

@justinormont

Copy link
Copy Markdown
Contributor

@mentorfloat: You should be able to use just the hyperparameter optimization of the AutoML code if you either (1) prefeaturizing your dataset, or (2) by specifying an estimator chain as a prefeaturizer in the API call (sample).

This will still do the model selection, but you can reduce the search space to only one trainer. E.g. only LightGBM.

The main control missing from this method is specifying the exact range of the hyperparameters to search over.


Another method for sweeping hyperparamers is using the command-line sweepers in MAML. The code is still in the repo, but I haven't tried if it works.

The attached sweeping command (Sweep_SmartSweep.rsp) would be run as: dotnet ./bin/AnyCPU.Release/Microsoft.ML.Console/netcoreapp2.1/MML.dll @Sweep_SmartSweep.rsp. To make it work, you'd have to put in a proxy program called maml.exe on Win or maml on macOS/Linux which calls dotnet MML.dll with its given parameters, to proxy along the pipeline for the individual models in the sweep.

The MAML sweep command is powerful, but exposing with a clean C# interface would be best.

@justinormontjustinormont mentioned this pull request Nov 8, 2021
@ghostghost locked as resolved and limited conversation to collaborators Mar 18, 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.

3 participants

@LittleLittleCloud@mentorfloat@justinormont
, '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

wip - Add Sweepable Pipeline - #5019

Closed
LittleLittleCloud wants to merge 4 commits into
dotnet:masterfrom
LittleLittleCloud:u/xiaoyun/AutoPipeline
Closed

wip - Add Sweepable Pipeline#5019
LittleLittleCloud wants to merge 4 commits into
dotnet:masterfrom
LittleLittleCloud:u/xiaoyun/AutoPipeline

Conversation

@LittleLittleCloud

@LittleLittleCloudLittleLittleCloud commented Apr 12, 2020

Copy link
Copy Markdown
Member

Allow users to sweep over pre-defined paramaters with similar API of creating/training a pipeline using sweepers defined in Microsoft.ML.Sweeper.

In the current state, only RandomSweeper and GridSearchSweeper is provided, and other sweepers like SMAC will be added soon.

Right now, only one sweepable trainer is allowed in each pipeline, however, we can support multi-trainer easily with a few lines change.

One of a sample pipeline here, it uses RandomSweeper over a user-defined paramater set and sweeps over 20 times

publicvoidRecommendationE2ETest_RandomSweeper()

And part of it's Output

Alpha=0.7001 Lambda=0.11 LearningRate=0.001
RMSE: 3.08841817087814
Alpha=0.7001 Lambda=0.01 LearningRate=0.0709999949
RMSE: 0.88847094121806
Alpha=0.3001 Lambda=0.91 LearningRate=0.021
RMSE: 1.33374709132294
...

Why I create this PR

Auto sweeping parameter is quite a useful feature in Automate ML, AutoML.Net supports it internally but those API is not exposed and sweeping value is fixed, moreover, it only supports a few trainers. It will be great if ML.Net has some external API to allow users to sweep over trainer's parameters on the pipeline level.

What will be next

  • allow sweeping Enum and Int type
  • allow user sets up discrete numeric options using OptionBase class.
  • adding more sweepers (SMAC....)
  • ( if I have time ) create a similar API experience with what AutoML.Net has (saying, creating customer experiment based on pipeline, providing CV training and evaluation, and generate CodeGen afterwards)

@LittleLittleCloud
LittleLittleCloud requested review from a team as code ownersApril 12, 2020 23:54
@LittleLittleCloudLittleLittleCloud changed the title Add Sweepable Pipelinewip - Add Sweepable PipelineApr 12, 2020
@mentorfloat

Copy link
Copy Markdown

@LittleLittleCloud A method to perform automated hyperparameter tuning outside of using AutoML will be helpful. Was there a reason why you closed the PR?

@LittleLittleCloud

Copy link
Copy Markdown
MemberAuthor

@LittleLittleCloud A method to perform automated hyperparameter tuning outside of using AutoML will be helpful. Was there a reason why you closed the PR?

@mentorfloat
It's just time wasn't mature at that time but we are actively discussing it now, will follow up sooner

@justinormont

Copy link
Copy Markdown
Contributor

@mentorfloat: You should be able to use just the hyperparameter optimization of the AutoML code if you either (1) prefeaturizing your dataset, or (2) by specifying an estimator chain as a prefeaturizer in the API call (sample).

This will still do the model selection, but you can reduce the search space to only one trainer. E.g. only LightGBM.

The main control missing from this method is specifying the exact range of the hyperparameters to search over.


Another method for sweeping hyperparamers is using the command-line sweepers in MAML. The code is still in the repo, but I haven't tried if it works.

The attached sweeping command (Sweep_SmartSweep.rsp) would be run as: dotnet ./bin/AnyCPU.Release/Microsoft.ML.Console/netcoreapp2.1/MML.dll @Sweep_SmartSweep.rsp. To make it work, you'd have to put in a proxy program called maml.exe on Win or maml on macOS/Linux which calls dotnet MML.dll with its given parameters, to proxy along the pipeline for the individual models in the sweep.

The MAML sweep command is powerful, but exposing with a clean C# interface would be best.

@justinormontjustinormont mentioned this pull request Nov 8, 2021
@ghostghost locked as resolved and limited conversation to collaborators Mar 18, 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.

3 participants

@LittleLittleCloud@mentorfloat@justinormont
, '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

wip - Add Sweepable Pipeline - #5019

Closed
LittleLittleCloud wants to merge 4 commits into
dotnet:masterfrom
LittleLittleCloud:u/xiaoyun/AutoPipeline
Closed

wip - Add Sweepable Pipeline#5019
LittleLittleCloud wants to merge 4 commits into
dotnet:masterfrom
LittleLittleCloud:u/xiaoyun/AutoPipeline

Conversation

@LittleLittleCloud

@LittleLittleCloudLittleLittleCloud commented Apr 12, 2020

Copy link
Copy Markdown
Member

Allow users to sweep over pre-defined paramaters with similar API of creating/training a pipeline using sweepers defined in Microsoft.ML.Sweeper.

In the current state, only RandomSweeper and GridSearchSweeper is provided, and other sweepers like SMAC will be added soon.

Right now, only one sweepable trainer is allowed in each pipeline, however, we can support multi-trainer easily with a few lines change.

One of a sample pipeline here, it uses RandomSweeper over a user-defined paramater set and sweeps over 20 times

publicvoidRecommendationE2ETest_RandomSweeper()

And part of it's Output

Alpha=0.7001 Lambda=0.11 LearningRate=0.001
RMSE: 3.08841817087814
Alpha=0.7001 Lambda=0.01 LearningRate=0.0709999949
RMSE: 0.88847094121806
Alpha=0.3001 Lambda=0.91 LearningRate=0.021
RMSE: 1.33374709132294
...

Why I create this PR

Auto sweeping parameter is quite a useful feature in Automate ML, AutoML.Net supports it internally but those API is not exposed and sweeping value is fixed, moreover, it only supports a few trainers. It will be great if ML.Net has some external API to allow users to sweep over trainer's parameters on the pipeline level.

What will be next

  • allow sweeping Enum and Int type
  • allow user sets up discrete numeric options using OptionBase class.
  • adding more sweepers (SMAC....)
  • ( if I have time ) create a similar API experience with what AutoML.Net has (saying, creating customer experiment based on pipeline, providing CV training and evaluation, and generate CodeGen afterwards)

@LittleLittleCloud
LittleLittleCloud requested review from a team as code ownersApril 12, 2020 23:54
@LittleLittleCloudLittleLittleCloud changed the title Add Sweepable Pipelinewip - Add Sweepable PipelineApr 12, 2020
@mentorfloat

Copy link
Copy Markdown

@LittleLittleCloud A method to perform automated hyperparameter tuning outside of using AutoML will be helpful. Was there a reason why you closed the PR?

@LittleLittleCloud

Copy link
Copy Markdown
MemberAuthor

@LittleLittleCloud A method to perform automated hyperparameter tuning outside of using AutoML will be helpful. Was there a reason why you closed the PR?

@mentorfloat
It's just time wasn't mature at that time but we are actively discussing it now, will follow up sooner

@justinormont

Copy link
Copy Markdown
Contributor

@mentorfloat: You should be able to use just the hyperparameter optimization of the AutoML code if you either (1) prefeaturizing your dataset, or (2) by specifying an estimator chain as a prefeaturizer in the API call (sample).

This will still do the model selection, but you can reduce the search space to only one trainer. E.g. only LightGBM.

The main control missing from this method is specifying the exact range of the hyperparameters to search over.


Another method for sweeping hyperparamers is using the command-line sweepers in MAML. The code is still in the repo, but I haven't tried if it works.

The attached sweeping command (Sweep_SmartSweep.rsp) would be run as: dotnet ./bin/AnyCPU.Release/Microsoft.ML.Console/netcoreapp2.1/MML.dll @Sweep_SmartSweep.rsp. To make it work, you'd have to put in a proxy program called maml.exe on Win or maml on macOS/Linux which calls dotnet MML.dll with its given parameters, to proxy along the pipeline for the individual models in the sweep.

The MAML sweep command is powerful, but exposing with a clean C# interface would be best.

@justinormontjustinormont mentioned this pull request Nov 8, 2021
@ghostghost locked as resolved and limited conversation to collaborators Mar 18, 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.

3 participants

@LittleLittleCloud@mentorfloat@justinormont
, '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

wip - Add Sweepable Pipeline - #5019

Closed
LittleLittleCloud wants to merge 4 commits into
dotnet:masterfrom
LittleLittleCloud:u/xiaoyun/AutoPipeline
Closed

wip - Add Sweepable Pipeline#5019
LittleLittleCloud wants to merge 4 commits into
dotnet:masterfrom
LittleLittleCloud:u/xiaoyun/AutoPipeline

Conversation

@LittleLittleCloud

@LittleLittleCloudLittleLittleCloud commented Apr 12, 2020

Copy link
Copy Markdown
Member

Allow users to sweep over pre-defined paramaters with similar API of creating/training a pipeline using sweepers defined in Microsoft.ML.Sweeper.

In the current state, only RandomSweeper and GridSearchSweeper is provided, and other sweepers like SMAC will be added soon.

Right now, only one sweepable trainer is allowed in each pipeline, however, we can support multi-trainer easily with a few lines change.

One of a sample pipeline here, it uses RandomSweeper over a user-defined paramater set and sweeps over 20 times

publicvoidRecommendationE2ETest_RandomSweeper()

And part of it's Output

Alpha=0.7001 Lambda=0.11 LearningRate=0.001
RMSE: 3.08841817087814
Alpha=0.7001 Lambda=0.01 LearningRate=0.0709999949
RMSE: 0.88847094121806
Alpha=0.3001 Lambda=0.91 LearningRate=0.021
RMSE: 1.33374709132294
...

Why I create this PR

Auto sweeping parameter is quite a useful feature in Automate ML, AutoML.Net supports it internally but those API is not exposed and sweeping value is fixed, moreover, it only supports a few trainers. It will be great if ML.Net has some external API to allow users to sweep over trainer's parameters on the pipeline level.

What will be next

  • allow sweeping Enum and Int type
  • allow user sets up discrete numeric options using OptionBase class.
  • adding more sweepers (SMAC....)
  • ( if I have time ) create a similar API experience with what AutoML.Net has (saying, creating customer experiment based on pipeline, providing CV training and evaluation, and generate CodeGen afterwards)

@LittleLittleCloud
LittleLittleCloud requested review from a team as code ownersApril 12, 2020 23:54
@LittleLittleCloudLittleLittleCloud changed the title Add Sweepable Pipelinewip - Add Sweepable PipelineApr 12, 2020
@mentorfloat

Copy link
Copy Markdown

@LittleLittleCloud A method to perform automated hyperparameter tuning outside of using AutoML will be helpful. Was there a reason why you closed the PR?

@LittleLittleCloud

Copy link
Copy Markdown
MemberAuthor

@LittleLittleCloud A method to perform automated hyperparameter tuning outside of using AutoML will be helpful. Was there a reason why you closed the PR?

@mentorfloat
It's just time wasn't mature at that time but we are actively discussing it now, will follow up sooner

@justinormont

Copy link
Copy Markdown
Contributor

@mentorfloat: You should be able to use just the hyperparameter optimization of the AutoML code if you either (1) prefeaturizing your dataset, or (2) by specifying an estimator chain as a prefeaturizer in the API call (sample).

This will still do the model selection, but you can reduce the search space to only one trainer. E.g. only LightGBM.

The main control missing from this method is specifying the exact range of the hyperparameters to search over.


Another method for sweeping hyperparamers is using the command-line sweepers in MAML. The code is still in the repo, but I haven't tried if it works.

The attached sweeping command (Sweep_SmartSweep.rsp) would be run as: dotnet ./bin/AnyCPU.Release/Microsoft.ML.Console/netcoreapp2.1/MML.dll @Sweep_SmartSweep.rsp. To make it work, you'd have to put in a proxy program called maml.exe on Win or maml on macOS/Linux which calls dotnet MML.dll with its given parameters, to proxy along the pipeline for the individual models in the sweep.

The MAML sweep command is powerful, but exposing with a clean C# interface would be best.

@justinormontjustinormont mentioned this pull request Nov 8, 2021
@ghostghost locked as resolved and limited conversation to collaborators Mar 18, 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.

3 participants

@LittleLittleCloud@mentorfloat@justinormont
, '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

wip - Add Sweepable Pipeline - #5019

Closed
LittleLittleCloud wants to merge 4 commits into
dotnet:masterfrom
LittleLittleCloud:u/xiaoyun/AutoPipeline
Closed

wip - Add Sweepable Pipeline#5019
LittleLittleCloud wants to merge 4 commits into
dotnet:masterfrom
LittleLittleCloud:u/xiaoyun/AutoPipeline

Conversation

@LittleLittleCloud

@LittleLittleCloudLittleLittleCloud commented Apr 12, 2020

Copy link
Copy Markdown
Member

Allow users to sweep over pre-defined paramaters with similar API of creating/training a pipeline using sweepers defined in Microsoft.ML.Sweeper.

In the current state, only RandomSweeper and GridSearchSweeper is provided, and other sweepers like SMAC will be added soon.

Right now, only one sweepable trainer is allowed in each pipeline, however, we can support multi-trainer easily with a few lines change.

One of a sample pipeline here, it uses RandomSweeper over a user-defined paramater set and sweeps over 20 times

publicvoidRecommendationE2ETest_RandomSweeper()

And part of it's Output

Alpha=0.7001 Lambda=0.11 LearningRate=0.001
RMSE: 3.08841817087814
Alpha=0.7001 Lambda=0.01 LearningRate=0.0709999949
RMSE: 0.88847094121806
Alpha=0.3001 Lambda=0.91 LearningRate=0.021
RMSE: 1.33374709132294
...

Why I create this PR

Auto sweeping parameter is quite a useful feature in Automate ML, AutoML.Net supports it internally but those API is not exposed and sweeping value is fixed, moreover, it only supports a few trainers. It will be great if ML.Net has some external API to allow users to sweep over trainer's parameters on the pipeline level.

What will be next

  • allow sweeping Enum and Int type
  • allow user sets up discrete numeric options using OptionBase class.
  • adding more sweepers (SMAC....)
  • ( if I have time ) create a similar API experience with what AutoML.Net has (saying, creating customer experiment based on pipeline, providing CV training and evaluation, and generate CodeGen afterwards)

@LittleLittleCloud
LittleLittleCloud requested review from a team as code ownersApril 12, 2020 23:54
@LittleLittleCloudLittleLittleCloud changed the title Add Sweepable Pipelinewip - Add Sweepable PipelineApr 12, 2020
@mentorfloat

Copy link
Copy Markdown

@LittleLittleCloud A method to perform automated hyperparameter tuning outside of using AutoML will be helpful. Was there a reason why you closed the PR?

@LittleLittleCloud

Copy link
Copy Markdown
MemberAuthor

@LittleLittleCloud A method to perform automated hyperparameter tuning outside of using AutoML will be helpful. Was there a reason why you closed the PR?

@mentorfloat
It's just time wasn't mature at that time but we are actively discussing it now, will follow up sooner

@justinormont

Copy link
Copy Markdown
Contributor

@mentorfloat: You should be able to use just the hyperparameter optimization of the AutoML code if you either (1) prefeaturizing your dataset, or (2) by specifying an estimator chain as a prefeaturizer in the API call (sample).

This will still do the model selection, but you can reduce the search space to only one trainer. E.g. only LightGBM.

The main control missing from this method is specifying the exact range of the hyperparameters to search over.


Another method for sweeping hyperparamers is using the command-line sweepers in MAML. The code is still in the repo, but I haven't tried if it works.

The attached sweeping command (Sweep_SmartSweep.rsp) would be run as: dotnet ./bin/AnyCPU.Release/Microsoft.ML.Console/netcoreapp2.1/MML.dll @Sweep_SmartSweep.rsp. To make it work, you'd have to put in a proxy program called maml.exe on Win or maml on macOS/Linux which calls dotnet MML.dll with its given parameters, to proxy along the pipeline for the individual models in the sweep.

The MAML sweep command is powerful, but exposing with a clean C# interface would be best.

@justinormontjustinormont mentioned this pull request Nov 8, 2021
@ghostghost locked as resolved and limited conversation to collaborators Mar 18, 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.

3 participants

@LittleLittleCloud@mentorfloat@justinormont