Switch to new ao quant api for 8da4w - #8501

Merged
jackzhxng merged 3 commits into
mainfrom
jz/new-quantize-api
Feb 25, 2025
Merged

Switch to new ao quant api for 8da4w#8501
jackzhxng merged 3 commits into
mainfrom
jz/new-quantize-api

Conversation

@jackzhxng

@jackzhxngjackzhxng commented Feb 14, 2025

Copy link
Copy Markdown
Contributor

Summary

Closes#8422

Test plan

[PLEASE REMOVE] How did you test this PR? Please write down any manual commands you used and note down tests that you have written if applicable.

@pytorch-bot

pytorch-botBot commented Feb 14, 2025

Copy link
Copy Markdown

🔗 Helpful Links

🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/8501

Note: Links to docs will display an error until the docs builds have been completed.

✅ No Failures

As of commit 285d20b with merge base 6cb5c1a (image):
💚 Looks good so far! There are no failures yet. 💚

This comment was automatically generated by Dr. CI and updates every 15 minutes.

@facebook-github-botfacebook-github-bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Feb 14, 2025

@jerryzh168jerryzh168 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

thanks, please make sure the lowering still works as well

@mcr229

Copy link
Copy Markdown
Contributor

so i believe the qo quant api introduces quant_affine nodes, which are decomposed. We got around this by using to_edge_transform_and_lower path to preserve them from decomposition, but I think that would also require us to modify the llama_export path to use to_edge_transform_and_lower as well.

@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

@mcr229 taking a stab at that here #8624

@jackzhxngjackzhxng added the release notes: examples Changes to any of our example LLMs integrations, such as Llama3 and Llava label Feb 24, 2025
@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

^Above has been closed and xnnpack is now using to_edge_transform_and_lower, giving CI another crack at this

@mcr229

Copy link
Copy Markdown
Contributor

looks like this is running into issues with loading the quantized checkpoints because aten._copy is unimplemented? seems sus, let me know if you need help from me for any part of enabling this.

@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

Yeah this is weird, our one test for quantized embeddings is erroring, presumably because the embedding quantization happens after the linear quantization which is now using the API

@jerryzh168

jerryzh168 commented Feb 25, 2025

Copy link
Copy Markdown
Contributor

please check out https://pytorch.org/ao/stable/serialization.html to see how serialization works in torchao, copy_ a torchao quantized tensor to a normal tensor is indeed not supported, we typically use load_state_dict(...., assign=True)

also embedding quantization is not yet fully supported in torchao I think, but we may add this in H1

@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

@jerryzh168 this error is being thrown during the load_state_dict here we are already doing which loads the quantized embedding weights - https://github.com/pytorch/executorch/blob/main/examples/models/llama/source_transformation/quantize.py#L666, any idea where this copy_ op is coming from?

@jackzhxng

jackzhxng commented Feb 25, 2025

Copy link
Copy Markdown
ContributorAuthor

Update - should be resolved. This error was happening since the quantize embedding code was loading the model's state dict which contains ao-quantized tensors from the linear transform before which now uses quantize_. Need the assign=True to do the deserialization process properly. Thanks @andrewor14@jerryzh168@mcr229

@jackzhxng
jackzhxng merged commit f3fc096 into mainFeb 25, 2025
@jackzhxng
jackzhxng deleted the jz/new-quantize-api branch February 25, 2025 21:41
@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

Actually I should have imported and run internal tests before merging, if diff train gets blocked I'll forward fix

swolchok added a commit that referenced this pull request Feb 26, 2025
@swolchokswolchok mentioned this pull request Feb 26, 2025
swolchok added a commit that referenced this pull request Feb 26, 2025
* Revert "Switch to new ao quant api for 8da4w (#8501)"
This reverts commit f3fc096.
* Revert "Use to_edge_lower_and_transform for XNNPack (#8624)"
This reverts commit b5344c1.
#8624 caused concerning test failure internally -- out of bounds array access. #8501 depends on it per author
jackzhxng added a commit that referenced this pull request Feb 27, 2025
).quantize(model)
from torchao.quantization import int8_dynamic_activation_int4_weight, quantize_

quantize_(model, int8_dynamic_activation_int4_weight(group_size=group_size))

@jerryzh168jerryzh168Feb 28, 2025

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

is torch_dtype not applied here? should it be applied to model?

@jackzhxngjackzhxngMar 3, 2025

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yeah I think it would good to ensure the dtype here by applying it to the model in general, but the model is already in fp32 for when the test passes before this PR and when it fails after this PR

mcr229 pushed a commit to mcr229/executorch that referenced this pull request Mar 5, 2025
iseeyuan pushed a commit that referenced this pull request Mar 14, 2025
* Revert "Switch to new ao quant api for 8da4w (#8501)"
This reverts commit f3fc096.
* Revert "Use to_edge_lower_and_transform for XNNPack (#8624)"
This reverts commit b5344c1.
jackzhxng added a commit that referenced this pull request Mar 24, 2025
facebook-github-bot pushed a commit that referenced this pull request Mar 25, 2025
Differential Revision: D70329890
Pull Request resolved: #8772
kirklandsign pushed a commit that referenced this pull request Apr 11, 2025
Differential Revision: D70329890
Pull Request resolved: #8772
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ciflow/trunkCLA SignedThis label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.release notes: examplesChanges to any of our example LLMs integrations, such as Llama3 and Llava

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Migrate export_llama to new ao quantize API

4 participants

@jackzhxng@mcr229@jerryzh168@facebook-github-bot
, '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

Switch to new ao quant api for 8da4w - #8501

Merged
jackzhxng merged 3 commits into
mainfrom
jz/new-quantize-api
Feb 25, 2025
Merged

Switch to new ao quant api for 8da4w#8501
jackzhxng merged 3 commits into
mainfrom
jz/new-quantize-api

Conversation

@jackzhxng

@jackzhxngjackzhxng commented Feb 14, 2025

Copy link
Copy Markdown
Contributor

Summary

Closes#8422

Test plan

[PLEASE REMOVE] How did you test this PR? Please write down any manual commands you used and note down tests that you have written if applicable.

@pytorch-bot

pytorch-botBot commented Feb 14, 2025

Copy link
Copy Markdown

🔗 Helpful Links

🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/8501

Note: Links to docs will display an error until the docs builds have been completed.

✅ No Failures

As of commit 285d20b with merge base 6cb5c1a (image):
💚 Looks good so far! There are no failures yet. 💚

This comment was automatically generated by Dr. CI and updates every 15 minutes.

@facebook-github-botfacebook-github-bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Feb 14, 2025

@jerryzh168jerryzh168 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

thanks, please make sure the lowering still works as well

@mcr229

Copy link
Copy Markdown
Contributor

so i believe the qo quant api introduces quant_affine nodes, which are decomposed. We got around this by using to_edge_transform_and_lower path to preserve them from decomposition, but I think that would also require us to modify the llama_export path to use to_edge_transform_and_lower as well.

@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

@mcr229 taking a stab at that here #8624

@jackzhxngjackzhxng added the release notes: examples Changes to any of our example LLMs integrations, such as Llama3 and Llava label Feb 24, 2025
@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

^Above has been closed and xnnpack is now using to_edge_transform_and_lower, giving CI another crack at this

@mcr229

Copy link
Copy Markdown
Contributor

looks like this is running into issues with loading the quantized checkpoints because aten._copy is unimplemented? seems sus, let me know if you need help from me for any part of enabling this.

@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

Yeah this is weird, our one test for quantized embeddings is erroring, presumably because the embedding quantization happens after the linear quantization which is now using the API

@jerryzh168

jerryzh168 commented Feb 25, 2025

Copy link
Copy Markdown
Contributor

please check out https://pytorch.org/ao/stable/serialization.html to see how serialization works in torchao, copy_ a torchao quantized tensor to a normal tensor is indeed not supported, we typically use load_state_dict(...., assign=True)

also embedding quantization is not yet fully supported in torchao I think, but we may add this in H1

@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

@jerryzh168 this error is being thrown during the load_state_dict here we are already doing which loads the quantized embedding weights - https://github.com/pytorch/executorch/blob/main/examples/models/llama/source_transformation/quantize.py#L666, any idea where this copy_ op is coming from?

@jackzhxng

jackzhxng commented Feb 25, 2025

Copy link
Copy Markdown
ContributorAuthor

Update - should be resolved. This error was happening since the quantize embedding code was loading the model's state dict which contains ao-quantized tensors from the linear transform before which now uses quantize_. Need the assign=True to do the deserialization process properly. Thanks @andrewor14@jerryzh168@mcr229

@jackzhxng
jackzhxng merged commit f3fc096 into mainFeb 25, 2025
@jackzhxng
jackzhxng deleted the jz/new-quantize-api branch February 25, 2025 21:41
@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

Actually I should have imported and run internal tests before merging, if diff train gets blocked I'll forward fix

swolchok added a commit that referenced this pull request Feb 26, 2025
@swolchokswolchok mentioned this pull request Feb 26, 2025
swolchok added a commit that referenced this pull request Feb 26, 2025
* Revert "Switch to new ao quant api for 8da4w (#8501)"
This reverts commit f3fc096.
* Revert "Use to_edge_lower_and_transform for XNNPack (#8624)"
This reverts commit b5344c1.
#8624 caused concerning test failure internally -- out of bounds array access. #8501 depends on it per author
jackzhxng added a commit that referenced this pull request Feb 27, 2025
).quantize(model)
from torchao.quantization import int8_dynamic_activation_int4_weight, quantize_

quantize_(model, int8_dynamic_activation_int4_weight(group_size=group_size))

@jerryzh168jerryzh168Feb 28, 2025

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

is torch_dtype not applied here? should it be applied to model?

@jackzhxngjackzhxngMar 3, 2025

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yeah I think it would good to ensure the dtype here by applying it to the model in general, but the model is already in fp32 for when the test passes before this PR and when it fails after this PR

mcr229 pushed a commit to mcr229/executorch that referenced this pull request Mar 5, 2025
iseeyuan pushed a commit that referenced this pull request Mar 14, 2025
* Revert "Switch to new ao quant api for 8da4w (#8501)"
This reverts commit f3fc096.
* Revert "Use to_edge_lower_and_transform for XNNPack (#8624)"
This reverts commit b5344c1.
jackzhxng added a commit that referenced this pull request Mar 24, 2025
facebook-github-bot pushed a commit that referenced this pull request Mar 25, 2025
Differential Revision: D70329890
Pull Request resolved: #8772
kirklandsign pushed a commit that referenced this pull request Apr 11, 2025
Differential Revision: D70329890
Pull Request resolved: #8772
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ciflow/trunkCLA SignedThis label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.release notes: examplesChanges to any of our example LLMs integrations, such as Llama3 and Llava

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Migrate export_llama to new ao quantize API

4 participants

@jackzhxng@mcr229@jerryzh168@facebook-github-bot
, '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

Switch to new ao quant api for 8da4w - #8501

Merged
jackzhxng merged 3 commits into
mainfrom
jz/new-quantize-api
Feb 25, 2025
Merged

Switch to new ao quant api for 8da4w#8501
jackzhxng merged 3 commits into
mainfrom
jz/new-quantize-api

Conversation

@jackzhxng

@jackzhxngjackzhxng commented Feb 14, 2025

Copy link
Copy Markdown
Contributor

Summary

Closes#8422

Test plan

[PLEASE REMOVE] How did you test this PR? Please write down any manual commands you used and note down tests that you have written if applicable.

@pytorch-bot

pytorch-botBot commented Feb 14, 2025

Copy link
Copy Markdown

🔗 Helpful Links

🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/8501

Note: Links to docs will display an error until the docs builds have been completed.

✅ No Failures

As of commit 285d20b with merge base 6cb5c1a (image):
💚 Looks good so far! There are no failures yet. 💚

This comment was automatically generated by Dr. CI and updates every 15 minutes.

@facebook-github-botfacebook-github-bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Feb 14, 2025

@jerryzh168jerryzh168 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

thanks, please make sure the lowering still works as well

@mcr229

Copy link
Copy Markdown
Contributor

so i believe the qo quant api introduces quant_affine nodes, which are decomposed. We got around this by using to_edge_transform_and_lower path to preserve them from decomposition, but I think that would also require us to modify the llama_export path to use to_edge_transform_and_lower as well.

@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

@mcr229 taking a stab at that here #8624

@jackzhxngjackzhxng added the release notes: examples Changes to any of our example LLMs integrations, such as Llama3 and Llava label Feb 24, 2025
@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

^Above has been closed and xnnpack is now using to_edge_transform_and_lower, giving CI another crack at this

@mcr229

Copy link
Copy Markdown
Contributor

looks like this is running into issues with loading the quantized checkpoints because aten._copy is unimplemented? seems sus, let me know if you need help from me for any part of enabling this.

@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

Yeah this is weird, our one test for quantized embeddings is erroring, presumably because the embedding quantization happens after the linear quantization which is now using the API

@jerryzh168

jerryzh168 commented Feb 25, 2025

Copy link
Copy Markdown
Contributor

please check out https://pytorch.org/ao/stable/serialization.html to see how serialization works in torchao, copy_ a torchao quantized tensor to a normal tensor is indeed not supported, we typically use load_state_dict(...., assign=True)

also embedding quantization is not yet fully supported in torchao I think, but we may add this in H1

@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

@jerryzh168 this error is being thrown during the load_state_dict here we are already doing which loads the quantized embedding weights - https://github.com/pytorch/executorch/blob/main/examples/models/llama/source_transformation/quantize.py#L666, any idea where this copy_ op is coming from?

@jackzhxng

jackzhxng commented Feb 25, 2025

Copy link
Copy Markdown
ContributorAuthor

Update - should be resolved. This error was happening since the quantize embedding code was loading the model's state dict which contains ao-quantized tensors from the linear transform before which now uses quantize_. Need the assign=True to do the deserialization process properly. Thanks @andrewor14@jerryzh168@mcr229

@jackzhxng
jackzhxng merged commit f3fc096 into mainFeb 25, 2025
@jackzhxng
jackzhxng deleted the jz/new-quantize-api branch February 25, 2025 21:41
@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

Actually I should have imported and run internal tests before merging, if diff train gets blocked I'll forward fix

swolchok added a commit that referenced this pull request Feb 26, 2025
@swolchokswolchok mentioned this pull request Feb 26, 2025
swolchok added a commit that referenced this pull request Feb 26, 2025
* Revert "Switch to new ao quant api for 8da4w (#8501)"
This reverts commit f3fc096.
* Revert "Use to_edge_lower_and_transform for XNNPack (#8624)"
This reverts commit b5344c1.
#8624 caused concerning test failure internally -- out of bounds array access. #8501 depends on it per author
jackzhxng added a commit that referenced this pull request Feb 27, 2025
).quantize(model)
from torchao.quantization import int8_dynamic_activation_int4_weight, quantize_

quantize_(model, int8_dynamic_activation_int4_weight(group_size=group_size))

@jerryzh168jerryzh168Feb 28, 2025

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

is torch_dtype not applied here? should it be applied to model?

@jackzhxngjackzhxngMar 3, 2025

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yeah I think it would good to ensure the dtype here by applying it to the model in general, but the model is already in fp32 for when the test passes before this PR and when it fails after this PR

mcr229 pushed a commit to mcr229/executorch that referenced this pull request Mar 5, 2025
iseeyuan pushed a commit that referenced this pull request Mar 14, 2025
* Revert "Switch to new ao quant api for 8da4w (#8501)"
This reverts commit f3fc096.
* Revert "Use to_edge_lower_and_transform for XNNPack (#8624)"
This reverts commit b5344c1.
jackzhxng added a commit that referenced this pull request Mar 24, 2025
facebook-github-bot pushed a commit that referenced this pull request Mar 25, 2025
Differential Revision: D70329890
Pull Request resolved: #8772
kirklandsign pushed a commit that referenced this pull request Apr 11, 2025
Differential Revision: D70329890
Pull Request resolved: #8772
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ciflow/trunkCLA SignedThis label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.release notes: examplesChanges to any of our example LLMs integrations, such as Llama3 and Llava

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Migrate export_llama to new ao quantize API

4 participants

@jackzhxng@mcr229@jerryzh168@facebook-github-bot
, '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

Switch to new ao quant api for 8da4w - #8501

Merged
jackzhxng merged 3 commits into
mainfrom
jz/new-quantize-api
Feb 25, 2025
Merged

Switch to new ao quant api for 8da4w#8501
jackzhxng merged 3 commits into
mainfrom
jz/new-quantize-api

Conversation

@jackzhxng

@jackzhxngjackzhxng commented Feb 14, 2025

Copy link
Copy Markdown
Contributor

Summary

Closes#8422

Test plan

[PLEASE REMOVE] How did you test this PR? Please write down any manual commands you used and note down tests that you have written if applicable.

@pytorch-bot

pytorch-botBot commented Feb 14, 2025

Copy link
Copy Markdown

🔗 Helpful Links

🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/8501

Note: Links to docs will display an error until the docs builds have been completed.

✅ No Failures

As of commit 285d20b with merge base 6cb5c1a (image):
💚 Looks good so far! There are no failures yet. 💚

This comment was automatically generated by Dr. CI and updates every 15 minutes.

@facebook-github-botfacebook-github-bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Feb 14, 2025

@jerryzh168jerryzh168 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

thanks, please make sure the lowering still works as well

@mcr229

Copy link
Copy Markdown
Contributor

so i believe the qo quant api introduces quant_affine nodes, which are decomposed. We got around this by using to_edge_transform_and_lower path to preserve them from decomposition, but I think that would also require us to modify the llama_export path to use to_edge_transform_and_lower as well.

@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

@mcr229 taking a stab at that here #8624

@jackzhxngjackzhxng added the release notes: examples Changes to any of our example LLMs integrations, such as Llama3 and Llava label Feb 24, 2025
@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

^Above has been closed and xnnpack is now using to_edge_transform_and_lower, giving CI another crack at this

@mcr229

Copy link
Copy Markdown
Contributor

looks like this is running into issues with loading the quantized checkpoints because aten._copy is unimplemented? seems sus, let me know if you need help from me for any part of enabling this.

@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

Yeah this is weird, our one test for quantized embeddings is erroring, presumably because the embedding quantization happens after the linear quantization which is now using the API

@jerryzh168

jerryzh168 commented Feb 25, 2025

Copy link
Copy Markdown
Contributor

please check out https://pytorch.org/ao/stable/serialization.html to see how serialization works in torchao, copy_ a torchao quantized tensor to a normal tensor is indeed not supported, we typically use load_state_dict(...., assign=True)

also embedding quantization is not yet fully supported in torchao I think, but we may add this in H1

@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

@jerryzh168 this error is being thrown during the load_state_dict here we are already doing which loads the quantized embedding weights - https://github.com/pytorch/executorch/blob/main/examples/models/llama/source_transformation/quantize.py#L666, any idea where this copy_ op is coming from?

@jackzhxng

jackzhxng commented Feb 25, 2025

Copy link
Copy Markdown
ContributorAuthor

Update - should be resolved. This error was happening since the quantize embedding code was loading the model's state dict which contains ao-quantized tensors from the linear transform before which now uses quantize_. Need the assign=True to do the deserialization process properly. Thanks @andrewor14@jerryzh168@mcr229

@jackzhxng
jackzhxng merged commit f3fc096 into mainFeb 25, 2025
@jackzhxng
jackzhxng deleted the jz/new-quantize-api branch February 25, 2025 21:41
@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

Actually I should have imported and run internal tests before merging, if diff train gets blocked I'll forward fix

swolchok added a commit that referenced this pull request Feb 26, 2025
@swolchokswolchok mentioned this pull request Feb 26, 2025
swolchok added a commit that referenced this pull request Feb 26, 2025
* Revert "Switch to new ao quant api for 8da4w (#8501)"
This reverts commit f3fc096.
* Revert "Use to_edge_lower_and_transform for XNNPack (#8624)"
This reverts commit b5344c1.
#8624 caused concerning test failure internally -- out of bounds array access. #8501 depends on it per author
jackzhxng added a commit that referenced this pull request Feb 27, 2025
).quantize(model)
from torchao.quantization import int8_dynamic_activation_int4_weight, quantize_

quantize_(model, int8_dynamic_activation_int4_weight(group_size=group_size))

@jerryzh168jerryzh168Feb 28, 2025

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

is torch_dtype not applied here? should it be applied to model?

@jackzhxngjackzhxngMar 3, 2025

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yeah I think it would good to ensure the dtype here by applying it to the model in general, but the model is already in fp32 for when the test passes before this PR and when it fails after this PR

mcr229 pushed a commit to mcr229/executorch that referenced this pull request Mar 5, 2025
iseeyuan pushed a commit that referenced this pull request Mar 14, 2025
* Revert "Switch to new ao quant api for 8da4w (#8501)"
This reverts commit f3fc096.
* Revert "Use to_edge_lower_and_transform for XNNPack (#8624)"
This reverts commit b5344c1.
jackzhxng added a commit that referenced this pull request Mar 24, 2025
facebook-github-bot pushed a commit that referenced this pull request Mar 25, 2025
Differential Revision: D70329890
Pull Request resolved: #8772
kirklandsign pushed a commit that referenced this pull request Apr 11, 2025
Differential Revision: D70329890
Pull Request resolved: #8772
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ciflow/trunkCLA SignedThis label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.release notes: examplesChanges to any of our example LLMs integrations, such as Llama3 and Llava

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Migrate export_llama to new ao quantize API

4 participants

@jackzhxng@mcr229@jerryzh168@facebook-github-bot
, '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

Switch to new ao quant api for 8da4w - #8501

Merged
jackzhxng merged 3 commits into
mainfrom
jz/new-quantize-api
Feb 25, 2025
Merged

Switch to new ao quant api for 8da4w#8501
jackzhxng merged 3 commits into
mainfrom
jz/new-quantize-api

Conversation

@jackzhxng

@jackzhxngjackzhxng commented Feb 14, 2025

Copy link
Copy Markdown
Contributor

Summary

Closes#8422

Test plan

[PLEASE REMOVE] How did you test this PR? Please write down any manual commands you used and note down tests that you have written if applicable.

@pytorch-bot

pytorch-botBot commented Feb 14, 2025

Copy link
Copy Markdown

🔗 Helpful Links

🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/8501

Note: Links to docs will display an error until the docs builds have been completed.

✅ No Failures

As of commit 285d20b with merge base 6cb5c1a (image):
💚 Looks good so far! There are no failures yet. 💚

This comment was automatically generated by Dr. CI and updates every 15 minutes.

@facebook-github-botfacebook-github-bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Feb 14, 2025

@jerryzh168jerryzh168 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

thanks, please make sure the lowering still works as well

@mcr229

Copy link
Copy Markdown
Contributor

so i believe the qo quant api introduces quant_affine nodes, which are decomposed. We got around this by using to_edge_transform_and_lower path to preserve them from decomposition, but I think that would also require us to modify the llama_export path to use to_edge_transform_and_lower as well.

@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

@mcr229 taking a stab at that here #8624

@jackzhxngjackzhxng added the release notes: examples Changes to any of our example LLMs integrations, such as Llama3 and Llava label Feb 24, 2025
@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

^Above has been closed and xnnpack is now using to_edge_transform_and_lower, giving CI another crack at this

@mcr229

Copy link
Copy Markdown
Contributor

looks like this is running into issues with loading the quantized checkpoints because aten._copy is unimplemented? seems sus, let me know if you need help from me for any part of enabling this.

@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

Yeah this is weird, our one test for quantized embeddings is erroring, presumably because the embedding quantization happens after the linear quantization which is now using the API

@jerryzh168

jerryzh168 commented Feb 25, 2025

Copy link
Copy Markdown
Contributor

please check out https://pytorch.org/ao/stable/serialization.html to see how serialization works in torchao, copy_ a torchao quantized tensor to a normal tensor is indeed not supported, we typically use load_state_dict(...., assign=True)

also embedding quantization is not yet fully supported in torchao I think, but we may add this in H1

@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

@jerryzh168 this error is being thrown during the load_state_dict here we are already doing which loads the quantized embedding weights - https://github.com/pytorch/executorch/blob/main/examples/models/llama/source_transformation/quantize.py#L666, any idea where this copy_ op is coming from?

@jackzhxng

jackzhxng commented Feb 25, 2025

Copy link
Copy Markdown
ContributorAuthor

Update - should be resolved. This error was happening since the quantize embedding code was loading the model's state dict which contains ao-quantized tensors from the linear transform before which now uses quantize_. Need the assign=True to do the deserialization process properly. Thanks @andrewor14@jerryzh168@mcr229

@jackzhxng
jackzhxng merged commit f3fc096 into mainFeb 25, 2025
@jackzhxng
jackzhxng deleted the jz/new-quantize-api branch February 25, 2025 21:41
@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

Actually I should have imported and run internal tests before merging, if diff train gets blocked I'll forward fix

swolchok added a commit that referenced this pull request Feb 26, 2025
@swolchokswolchok mentioned this pull request Feb 26, 2025
swolchok added a commit that referenced this pull request Feb 26, 2025
* Revert "Switch to new ao quant api for 8da4w (#8501)"
This reverts commit f3fc096.
* Revert "Use to_edge_lower_and_transform for XNNPack (#8624)"
This reverts commit b5344c1.
#8624 caused concerning test failure internally -- out of bounds array access. #8501 depends on it per author
jackzhxng added a commit that referenced this pull request Feb 27, 2025
).quantize(model)
from torchao.quantization import int8_dynamic_activation_int4_weight, quantize_

quantize_(model, int8_dynamic_activation_int4_weight(group_size=group_size))

@jerryzh168jerryzh168Feb 28, 2025

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

is torch_dtype not applied here? should it be applied to model?

@jackzhxngjackzhxngMar 3, 2025

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yeah I think it would good to ensure the dtype here by applying it to the model in general, but the model is already in fp32 for when the test passes before this PR and when it fails after this PR

mcr229 pushed a commit to mcr229/executorch that referenced this pull request Mar 5, 2025
iseeyuan pushed a commit that referenced this pull request Mar 14, 2025
* Revert "Switch to new ao quant api for 8da4w (#8501)"
This reverts commit f3fc096.
* Revert "Use to_edge_lower_and_transform for XNNPack (#8624)"
This reverts commit b5344c1.
jackzhxng added a commit that referenced this pull request Mar 24, 2025
facebook-github-bot pushed a commit that referenced this pull request Mar 25, 2025
Differential Revision: D70329890
Pull Request resolved: #8772
kirklandsign pushed a commit that referenced this pull request Apr 11, 2025
Differential Revision: D70329890
Pull Request resolved: #8772
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ciflow/trunkCLA SignedThis label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.release notes: examplesChanges to any of our example LLMs integrations, such as Llama3 and Llava

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Migrate export_llama to new ao quantize API

4 participants

@jackzhxng@mcr229@jerryzh168@facebook-github-bot
, '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

Switch to new ao quant api for 8da4w - #8501

Merged
jackzhxng merged 3 commits into
mainfrom
jz/new-quantize-api
Feb 25, 2025
Merged

Switch to new ao quant api for 8da4w#8501
jackzhxng merged 3 commits into
mainfrom
jz/new-quantize-api

Conversation

@jackzhxng

@jackzhxngjackzhxng commented Feb 14, 2025

Copy link
Copy Markdown
Contributor

Summary

Closes#8422

Test plan

[PLEASE REMOVE] How did you test this PR? Please write down any manual commands you used and note down tests that you have written if applicable.

@pytorch-bot

pytorch-botBot commented Feb 14, 2025

Copy link
Copy Markdown

🔗 Helpful Links

🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/8501

Note: Links to docs will display an error until the docs builds have been completed.

✅ No Failures

As of commit 285d20b with merge base 6cb5c1a (image):
💚 Looks good so far! There are no failures yet. 💚

This comment was automatically generated by Dr. CI and updates every 15 minutes.

@facebook-github-botfacebook-github-bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Feb 14, 2025

@jerryzh168jerryzh168 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

thanks, please make sure the lowering still works as well

@mcr229

Copy link
Copy Markdown
Contributor

so i believe the qo quant api introduces quant_affine nodes, which are decomposed. We got around this by using to_edge_transform_and_lower path to preserve them from decomposition, but I think that would also require us to modify the llama_export path to use to_edge_transform_and_lower as well.

@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

@mcr229 taking a stab at that here #8624

@jackzhxngjackzhxng added the release notes: examples Changes to any of our example LLMs integrations, such as Llama3 and Llava label Feb 24, 2025
@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

^Above has been closed and xnnpack is now using to_edge_transform_and_lower, giving CI another crack at this

@mcr229

Copy link
Copy Markdown
Contributor

looks like this is running into issues with loading the quantized checkpoints because aten._copy is unimplemented? seems sus, let me know if you need help from me for any part of enabling this.

@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

Yeah this is weird, our one test for quantized embeddings is erroring, presumably because the embedding quantization happens after the linear quantization which is now using the API

@jerryzh168

jerryzh168 commented Feb 25, 2025

Copy link
Copy Markdown
Contributor

please check out https://pytorch.org/ao/stable/serialization.html to see how serialization works in torchao, copy_ a torchao quantized tensor to a normal tensor is indeed not supported, we typically use load_state_dict(...., assign=True)

also embedding quantization is not yet fully supported in torchao I think, but we may add this in H1

@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

@jerryzh168 this error is being thrown during the load_state_dict here we are already doing which loads the quantized embedding weights - https://github.com/pytorch/executorch/blob/main/examples/models/llama/source_transformation/quantize.py#L666, any idea where this copy_ op is coming from?

@jackzhxng

jackzhxng commented Feb 25, 2025

Copy link
Copy Markdown
ContributorAuthor

Update - should be resolved. This error was happening since the quantize embedding code was loading the model's state dict which contains ao-quantized tensors from the linear transform before which now uses quantize_. Need the assign=True to do the deserialization process properly. Thanks @andrewor14@jerryzh168@mcr229

@jackzhxng
jackzhxng merged commit f3fc096 into mainFeb 25, 2025
@jackzhxng
jackzhxng deleted the jz/new-quantize-api branch February 25, 2025 21:41
@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

Actually I should have imported and run internal tests before merging, if diff train gets blocked I'll forward fix

swolchok added a commit that referenced this pull request Feb 26, 2025
@swolchokswolchok mentioned this pull request Feb 26, 2025
swolchok added a commit that referenced this pull request Feb 26, 2025
* Revert "Switch to new ao quant api for 8da4w (#8501)"
This reverts commit f3fc096.
* Revert "Use to_edge_lower_and_transform for XNNPack (#8624)"
This reverts commit b5344c1.
#8624 caused concerning test failure internally -- out of bounds array access. #8501 depends on it per author
jackzhxng added a commit that referenced this pull request Feb 27, 2025
).quantize(model)
from torchao.quantization import int8_dynamic_activation_int4_weight, quantize_

quantize_(model, int8_dynamic_activation_int4_weight(group_size=group_size))

@jerryzh168jerryzh168Feb 28, 2025

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

is torch_dtype not applied here? should it be applied to model?

@jackzhxngjackzhxngMar 3, 2025

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yeah I think it would good to ensure the dtype here by applying it to the model in general, but the model is already in fp32 for when the test passes before this PR and when it fails after this PR

mcr229 pushed a commit to mcr229/executorch that referenced this pull request Mar 5, 2025
iseeyuan pushed a commit that referenced this pull request Mar 14, 2025
* Revert "Switch to new ao quant api for 8da4w (#8501)"
This reverts commit f3fc096.
* Revert "Use to_edge_lower_and_transform for XNNPack (#8624)"
This reverts commit b5344c1.
jackzhxng added a commit that referenced this pull request Mar 24, 2025
facebook-github-bot pushed a commit that referenced this pull request Mar 25, 2025
Differential Revision: D70329890
Pull Request resolved: #8772
kirklandsign pushed a commit that referenced this pull request Apr 11, 2025
Differential Revision: D70329890
Pull Request resolved: #8772
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ciflow/trunkCLA SignedThis label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.release notes: examplesChanges to any of our example LLMs integrations, such as Llama3 and Llava

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Migrate export_llama to new ao quantize API

4 participants

@jackzhxng@mcr229@jerryzh168@facebook-github-bot
, '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

Switch to new ao quant api for 8da4w - #8501

Merged
jackzhxng merged 3 commits into
mainfrom
jz/new-quantize-api
Feb 25, 2025
Merged

Switch to new ao quant api for 8da4w#8501
jackzhxng merged 3 commits into
mainfrom
jz/new-quantize-api

Conversation

@jackzhxng

@jackzhxngjackzhxng commented Feb 14, 2025

Copy link
Copy Markdown
Contributor

Summary

Closes#8422

Test plan

[PLEASE REMOVE] How did you test this PR? Please write down any manual commands you used and note down tests that you have written if applicable.

@pytorch-bot

pytorch-botBot commented Feb 14, 2025

Copy link
Copy Markdown

🔗 Helpful Links

🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/8501

Note: Links to docs will display an error until the docs builds have been completed.

✅ No Failures

As of commit 285d20b with merge base 6cb5c1a (image):
💚 Looks good so far! There are no failures yet. 💚

This comment was automatically generated by Dr. CI and updates every 15 minutes.

@facebook-github-botfacebook-github-bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Feb 14, 2025

@jerryzh168jerryzh168 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

thanks, please make sure the lowering still works as well

@mcr229

Copy link
Copy Markdown
Contributor

so i believe the qo quant api introduces quant_affine nodes, which are decomposed. We got around this by using to_edge_transform_and_lower path to preserve them from decomposition, but I think that would also require us to modify the llama_export path to use to_edge_transform_and_lower as well.

@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

@mcr229 taking a stab at that here #8624

@jackzhxngjackzhxng added the release notes: examples Changes to any of our example LLMs integrations, such as Llama3 and Llava label Feb 24, 2025
@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

^Above has been closed and xnnpack is now using to_edge_transform_and_lower, giving CI another crack at this

@mcr229

Copy link
Copy Markdown
Contributor

looks like this is running into issues with loading the quantized checkpoints because aten._copy is unimplemented? seems sus, let me know if you need help from me for any part of enabling this.

@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

Yeah this is weird, our one test for quantized embeddings is erroring, presumably because the embedding quantization happens after the linear quantization which is now using the API

@jerryzh168

jerryzh168 commented Feb 25, 2025

Copy link
Copy Markdown
Contributor

please check out https://pytorch.org/ao/stable/serialization.html to see how serialization works in torchao, copy_ a torchao quantized tensor to a normal tensor is indeed not supported, we typically use load_state_dict(...., assign=True)

also embedding quantization is not yet fully supported in torchao I think, but we may add this in H1

@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

@jerryzh168 this error is being thrown during the load_state_dict here we are already doing which loads the quantized embedding weights - https://github.com/pytorch/executorch/blob/main/examples/models/llama/source_transformation/quantize.py#L666, any idea where this copy_ op is coming from?

@jackzhxng

jackzhxng commented Feb 25, 2025

Copy link
Copy Markdown
ContributorAuthor

Update - should be resolved. This error was happening since the quantize embedding code was loading the model's state dict which contains ao-quantized tensors from the linear transform before which now uses quantize_. Need the assign=True to do the deserialization process properly. Thanks @andrewor14@jerryzh168@mcr229

@jackzhxng
jackzhxng merged commit f3fc096 into mainFeb 25, 2025
@jackzhxng
jackzhxng deleted the jz/new-quantize-api branch February 25, 2025 21:41
@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

Actually I should have imported and run internal tests before merging, if diff train gets blocked I'll forward fix

swolchok added a commit that referenced this pull request Feb 26, 2025
@swolchokswolchok mentioned this pull request Feb 26, 2025
swolchok added a commit that referenced this pull request Feb 26, 2025
* Revert "Switch to new ao quant api for 8da4w (#8501)"
This reverts commit f3fc096.
* Revert "Use to_edge_lower_and_transform for XNNPack (#8624)"
This reverts commit b5344c1.
#8624 caused concerning test failure internally -- out of bounds array access. #8501 depends on it per author
jackzhxng added a commit that referenced this pull request Feb 27, 2025
).quantize(model)
from torchao.quantization import int8_dynamic_activation_int4_weight, quantize_

quantize_(model, int8_dynamic_activation_int4_weight(group_size=group_size))

@jerryzh168jerryzh168Feb 28, 2025

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

is torch_dtype not applied here? should it be applied to model?

@jackzhxngjackzhxngMar 3, 2025

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yeah I think it would good to ensure the dtype here by applying it to the model in general, but the model is already in fp32 for when the test passes before this PR and when it fails after this PR

mcr229 pushed a commit to mcr229/executorch that referenced this pull request Mar 5, 2025
iseeyuan pushed a commit that referenced this pull request Mar 14, 2025
* Revert "Switch to new ao quant api for 8da4w (#8501)"
This reverts commit f3fc096.
* Revert "Use to_edge_lower_and_transform for XNNPack (#8624)"
This reverts commit b5344c1.
jackzhxng added a commit that referenced this pull request Mar 24, 2025
facebook-github-bot pushed a commit that referenced this pull request Mar 25, 2025
Differential Revision: D70329890
Pull Request resolved: #8772
kirklandsign pushed a commit that referenced this pull request Apr 11, 2025
Differential Revision: D70329890
Pull Request resolved: #8772
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ciflow/trunkCLA SignedThis label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.release notes: examplesChanges to any of our example LLMs integrations, such as Llama3 and Llava

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Migrate export_llama to new ao quantize API

4 participants

@jackzhxng@mcr229@jerryzh168@facebook-github-bot
, '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

Switch to new ao quant api for 8da4w - #8501

Merged
jackzhxng merged 3 commits into
mainfrom
jz/new-quantize-api
Feb 25, 2025
Merged

Switch to new ao quant api for 8da4w#8501
jackzhxng merged 3 commits into
mainfrom
jz/new-quantize-api

Conversation

@jackzhxng

@jackzhxngjackzhxng commented Feb 14, 2025

Copy link
Copy Markdown
Contributor

Summary

Closes#8422

Test plan

[PLEASE REMOVE] How did you test this PR? Please write down any manual commands you used and note down tests that you have written if applicable.

@pytorch-bot

pytorch-botBot commented Feb 14, 2025

Copy link
Copy Markdown

🔗 Helpful Links

🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/8501

Note: Links to docs will display an error until the docs builds have been completed.

✅ No Failures

As of commit 285d20b with merge base 6cb5c1a (image):
💚 Looks good so far! There are no failures yet. 💚

This comment was automatically generated by Dr. CI and updates every 15 minutes.

@facebook-github-botfacebook-github-bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Feb 14, 2025

@jerryzh168jerryzh168 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

thanks, please make sure the lowering still works as well

@mcr229

Copy link
Copy Markdown
Contributor

so i believe the qo quant api introduces quant_affine nodes, which are decomposed. We got around this by using to_edge_transform_and_lower path to preserve them from decomposition, but I think that would also require us to modify the llama_export path to use to_edge_transform_and_lower as well.

@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

@mcr229 taking a stab at that here #8624

@jackzhxngjackzhxng added the release notes: examples Changes to any of our example LLMs integrations, such as Llama3 and Llava label Feb 24, 2025
@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

^Above has been closed and xnnpack is now using to_edge_transform_and_lower, giving CI another crack at this

@mcr229

Copy link
Copy Markdown
Contributor

looks like this is running into issues with loading the quantized checkpoints because aten._copy is unimplemented? seems sus, let me know if you need help from me for any part of enabling this.

@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

Yeah this is weird, our one test for quantized embeddings is erroring, presumably because the embedding quantization happens after the linear quantization which is now using the API

@jerryzh168

jerryzh168 commented Feb 25, 2025

Copy link
Copy Markdown
Contributor

please check out https://pytorch.org/ao/stable/serialization.html to see how serialization works in torchao, copy_ a torchao quantized tensor to a normal tensor is indeed not supported, we typically use load_state_dict(...., assign=True)

also embedding quantization is not yet fully supported in torchao I think, but we may add this in H1

@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

@jerryzh168 this error is being thrown during the load_state_dict here we are already doing which loads the quantized embedding weights - https://github.com/pytorch/executorch/blob/main/examples/models/llama/source_transformation/quantize.py#L666, any idea where this copy_ op is coming from?

@jackzhxng

jackzhxng commented Feb 25, 2025

Copy link
Copy Markdown
ContributorAuthor

Update - should be resolved. This error was happening since the quantize embedding code was loading the model's state dict which contains ao-quantized tensors from the linear transform before which now uses quantize_. Need the assign=True to do the deserialization process properly. Thanks @andrewor14@jerryzh168@mcr229

@jackzhxng
jackzhxng merged commit f3fc096 into mainFeb 25, 2025
@jackzhxng
jackzhxng deleted the jz/new-quantize-api branch February 25, 2025 21:41
@jackzhxng

Copy link
Copy Markdown
ContributorAuthor

Actually I should have imported and run internal tests before merging, if diff train gets blocked I'll forward fix

swolchok added a commit that referenced this pull request Feb 26, 2025
@swolchokswolchok mentioned this pull request Feb 26, 2025
swolchok added a commit that referenced this pull request Feb 26, 2025
* Revert "Switch to new ao quant api for 8da4w (#8501)"
This reverts commit f3fc096.
* Revert "Use to_edge_lower_and_transform for XNNPack (#8624)"
This reverts commit b5344c1.
#8624 caused concerning test failure internally -- out of bounds array access. #8501 depends on it per author
jackzhxng added a commit that referenced this pull request Feb 27, 2025
).quantize(model)
from torchao.quantization import int8_dynamic_activation_int4_weight, quantize_

quantize_(model, int8_dynamic_activation_int4_weight(group_size=group_size))

@jerryzh168jerryzh168Feb 28, 2025

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

is torch_dtype not applied here? should it be applied to model?

@jackzhxngjackzhxngMar 3, 2025

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yeah I think it would good to ensure the dtype here by applying it to the model in general, but the model is already in fp32 for when the test passes before this PR and when it fails after this PR

mcr229 pushed a commit to mcr229/executorch that referenced this pull request Mar 5, 2025
iseeyuan pushed a commit that referenced this pull request Mar 14, 2025
* Revert "Switch to new ao quant api for 8da4w (#8501)"
This reverts commit f3fc096.
* Revert "Use to_edge_lower_and_transform for XNNPack (#8624)"
This reverts commit b5344c1.
jackzhxng added a commit that referenced this pull request Mar 24, 2025
facebook-github-bot pushed a commit that referenced this pull request Mar 25, 2025
Differential Revision: D70329890
Pull Request resolved: #8772
kirklandsign pushed a commit that referenced this pull request Apr 11, 2025
Differential Revision: D70329890
Pull Request resolved: #8772
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ciflow/trunkCLA SignedThis label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.release notes: examplesChanges to any of our example LLMs integrations, such as Llama3 and Llava

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Migrate export_llama to new ao quantize API

4 participants

@jackzhxng@mcr229@jerryzh168@facebook-github-bot