Skip to content

【Hackathon 10th Spring No.15】DM2模型复现 - #277

Open
yu0809 wants to merge 2 commits into
PaddlePaddle:developfrom
yu0809:codex/dm2-model
Open

【Hackathon 10th Spring No.15】DM2模型复现#277
yu0809 wants to merge 2 commits into
PaddlePaddle:developfrom
yu0809:codex/dm2-model

Conversation

@yu0809

@yu0809yu0809 commented May 2, 2026

Copy link
Copy Markdown

What changed

  • Add a Paddle implementation of the DM2 structure denoising model, including the NequIP-style denoiser, noise/rattle utilities, edge down-selection, training forward pass, and iterative sampling path.
  • Add an ASE-backed DM2StructureDataset and DM2 SiO2 example configuration under structure_generation/configs/dm2.
  • Register DM2 model and dataset exports, document the new structure generation entry, and add a focused DM2 smoke test.
  • Fix Irreps sorting in the local e3nn Gate helper so DM2's gate construction works at runtime.

Related

Validation

  • python3 -m py_compile ppmat/models/common/e3nn/nn/_gate.py ppmat/models/dm2/dm2.py ppmat/datasets/dm2_dataset.py test/test_dm2_model.py
  • Parsed structure_generation/configs/dm2/dm2_sio2.yaml with PyYAML
  • Ran a targeted DM2 runtime smoke test covering model construction, finite forward loss, and iterative sampling output shapes
  • git diff --cached --check

@paddle-bot

paddle-botBot commented May 2, 2026

Copy link
Copy Markdown

Thanks for your contribution!

@paddle-botpaddle-botBot added the contributor External developers label May 2, 2026
@yu0809yu0809 changed the title Add DM2 structure denoising model【Hackathon 10th Spring No.15】DM2模型复现May 2, 2026
@yu0809ChatGPT Codex Connector

Copy link
Copy Markdown
Author

Update after commit 629b630:

  • Moved DM2 diffusion/noise scheduling utilities into ppmat/schedulers via DM2DenoisingScheduler.
  • Added DM2 configs for the RFC-covered systems: dm2_sio2_unconditional.yaml, dm2_sio2_conditional.yaml, and dm2_cuzr.yaml.
  • Added RDF Wasserstein / coordination metric hook for amorphous generation evaluation.
  • Updated structure_generation/sample.py so Sample.sample_params is honored by dataloader-based sampling.
  • Extended DM2 tests for scheduler defaults, fixed-sigma noise, sampling output shape, and optional metric smoke.

Validation run locally:

  • python3 -m py_compile ppmat/schedulers/scheduling_dm2.py ppmat/schedulers/__init__.py ppmat/models/dm2/dm2.py ppmat/datasets/dm2_dataset.py ppmat/metrics/dm2_metric.py ppmat/metrics/__init__.py structure_generation/sample.py test/test_dm2_model.py
  • Parsed all DM2 YAML configs with PyYAML.
  • git diff --check
  • Targeted DM2 runtime smoke: model construction, finite forward loss, scheduler defaults, fixed-sigma noise, and iterative sampling output shapes.
  • Metric smoke: RDF Wasserstein and Si-O coordination on a tiny ASE structure.
  • Real-data shape smoke: official DM2 300-atom SiO2 LAMMPS demo file parses and forward loss is finite.

Note: the code/config/metric path is now in place for RFC review. Final Hackathon numeric acceptance still needs the official uploaded data/checkpoint/log artifacts and long-run parity reports for forward diff, 2+ epoch loss alignment, and sampling metrics.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

这个文件的可视化,表格这里多了下划线,辛苦检查下

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

辛苦参考其他readme修改下该文件的格式

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

这里为什么新增了dm2的dataset

Comment threadppmat/models/common/e3nn/nn/_gate.py Outdated
instructions += [tuple(range(i, i + len(irreps_out)))]
i += len(irreps_out)
assert len(irreps_in) == i, (len(irreps_in), i)
irreps_in, p, _ = paddle.sort(x=irreps_in), paddle.argsort(x=irreps_in)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

这里为什么修改

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@yu0809@leeleolay@luotao1
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
【Hackathon 10th Spring No.15】DM2模型复现 by yu0809 · Pull Request #277 · PaddlePaddle/PaddleMaterials · GitHub
Skip to content

【Hackathon 10th Spring No.15】DM2模型复现 - #277

Open
yu0809 wants to merge 2 commits into
PaddlePaddle:developfrom
yu0809:codex/dm2-model
Open

【Hackathon 10th Spring No.15】DM2模型复现#277
yu0809 wants to merge 2 commits into
PaddlePaddle:developfrom
yu0809:codex/dm2-model

Conversation

@yu0809

@yu0809yu0809 commented May 2, 2026

Copy link
Copy Markdown

What changed

  • Add a Paddle implementation of the DM2 structure denoising model, including the NequIP-style denoiser, noise/rattle utilities, edge down-selection, training forward pass, and iterative sampling path.
  • Add an ASE-backed DM2StructureDataset and DM2 SiO2 example configuration under structure_generation/configs/dm2.
  • Register DM2 model and dataset exports, document the new structure generation entry, and add a focused DM2 smoke test.
  • Fix Irreps sorting in the local e3nn Gate helper so DM2's gate construction works at runtime.

Related

Validation

  • python3 -m py_compile ppmat/models/common/e3nn/nn/_gate.py ppmat/models/dm2/dm2.py ppmat/datasets/dm2_dataset.py test/test_dm2_model.py
  • Parsed structure_generation/configs/dm2/dm2_sio2.yaml with PyYAML
  • Ran a targeted DM2 runtime smoke test covering model construction, finite forward loss, and iterative sampling output shapes
  • git diff --cached --check

@paddle-bot

paddle-botBot commented May 2, 2026

Copy link
Copy Markdown

Thanks for your contribution!

@paddle-botpaddle-botBot added the contributor External developers label May 2, 2026
@yu0809yu0809 changed the title Add DM2 structure denoising model【Hackathon 10th Spring No.15】DM2模型复现May 2, 2026
@yu0809ChatGPT Codex Connector

Copy link
Copy Markdown
Author

Update after commit 629b630:

  • Moved DM2 diffusion/noise scheduling utilities into ppmat/schedulers via DM2DenoisingScheduler.
  • Added DM2 configs for the RFC-covered systems: dm2_sio2_unconditional.yaml, dm2_sio2_conditional.yaml, and dm2_cuzr.yaml.
  • Added RDF Wasserstein / coordination metric hook for amorphous generation evaluation.
  • Updated structure_generation/sample.py so Sample.sample_params is honored by dataloader-based sampling.
  • Extended DM2 tests for scheduler defaults, fixed-sigma noise, sampling output shape, and optional metric smoke.

Validation run locally:

  • python3 -m py_compile ppmat/schedulers/scheduling_dm2.py ppmat/schedulers/__init__.py ppmat/models/dm2/dm2.py ppmat/datasets/dm2_dataset.py ppmat/metrics/dm2_metric.py ppmat/metrics/__init__.py structure_generation/sample.py test/test_dm2_model.py
  • Parsed all DM2 YAML configs with PyYAML.
  • git diff --check
  • Targeted DM2 runtime smoke: model construction, finite forward loss, scheduler defaults, fixed-sigma noise, and iterative sampling output shapes.
  • Metric smoke: RDF Wasserstein and Si-O coordination on a tiny ASE structure.
  • Real-data shape smoke: official DM2 300-atom SiO2 LAMMPS demo file parses and forward loss is finite.

Note: the code/config/metric path is now in place for RFC review. Final Hackathon numeric acceptance still needs the official uploaded data/checkpoint/log artifacts and long-run parity reports for forward diff, 2+ epoch loss alignment, and sampling metrics.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

这个文件的可视化,表格这里多了下划线,辛苦检查下

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

辛苦参考其他readme修改下该文件的格式

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

这里为什么新增了dm2的dataset

Comment threadppmat/models/common/e3nn/nn/_gate.py Outdated
instructions += [tuple(range(i, i + len(irreps_out)))]
i += len(irreps_out)
assert len(irreps_in) == i, (len(irreps_in), i)
irreps_in, p, _ = paddle.sort(x=irreps_in), paddle.argsort(x=irreps_in)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

这里为什么修改

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@yu0809@leeleolay@luotao1
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' 【Hackathon 10th Spring No.15】DM2模型复现 by yu0809 · Pull Request #277 · PaddlePaddle/PaddleMaterials · GitHub
Skip to content

【Hackathon 10th Spring No.15】DM2模型复现 - #277

Open
yu0809 wants to merge 2 commits into
PaddlePaddle:developfrom
yu0809:codex/dm2-model
Open

【Hackathon 10th Spring No.15】DM2模型复现#277
yu0809 wants to merge 2 commits into
PaddlePaddle:developfrom
yu0809:codex/dm2-model

Conversation

@yu0809

@yu0809yu0809 commented May 2, 2026

Copy link
Copy Markdown

What changed

  • Add a Paddle implementation of the DM2 structure denoising model, including the NequIP-style denoiser, noise/rattle utilities, edge down-selection, training forward pass, and iterative sampling path.
  • Add an ASE-backed DM2StructureDataset and DM2 SiO2 example configuration under structure_generation/configs/dm2.
  • Register DM2 model and dataset exports, document the new structure generation entry, and add a focused DM2 smoke test.
  • Fix Irreps sorting in the local e3nn Gate helper so DM2's gate construction works at runtime.

Related

Validation

  • python3 -m py_compile ppmat/models/common/e3nn/nn/_gate.py ppmat/models/dm2/dm2.py ppmat/datasets/dm2_dataset.py test/test_dm2_model.py
  • Parsed structure_generation/configs/dm2/dm2_sio2.yaml with PyYAML
  • Ran a targeted DM2 runtime smoke test covering model construction, finite forward loss, and iterative sampling output shapes
  • git diff --cached --check

@paddle-bot

paddle-botBot commented May 2, 2026

Copy link
Copy Markdown

Thanks for your contribution!

@paddle-botpaddle-botBot added the contributor External developers label May 2, 2026
@yu0809yu0809 changed the title Add DM2 structure denoising model【Hackathon 10th Spring No.15】DM2模型复现May 2, 2026
@yu0809ChatGPT Codex Connector

Copy link
Copy Markdown
Author

Update after commit 629b630:

  • Moved DM2 diffusion/noise scheduling utilities into ppmat/schedulers via DM2DenoisingScheduler.
  • Added DM2 configs for the RFC-covered systems: dm2_sio2_unconditional.yaml, dm2_sio2_conditional.yaml, and dm2_cuzr.yaml.
  • Added RDF Wasserstein / coordination metric hook for amorphous generation evaluation.
  • Updated structure_generation/sample.py so Sample.sample_params is honored by dataloader-based sampling.
  • Extended DM2 tests for scheduler defaults, fixed-sigma noise, sampling output shape, and optional metric smoke.

Validation run locally:

  • python3 -m py_compile ppmat/schedulers/scheduling_dm2.py ppmat/schedulers/__init__.py ppmat/models/dm2/dm2.py ppmat/datasets/dm2_dataset.py ppmat/metrics/dm2_metric.py ppmat/metrics/__init__.py structure_generation/sample.py test/test_dm2_model.py
  • Parsed all DM2 YAML configs with PyYAML.
  • git diff --check
  • Targeted DM2 runtime smoke: model construction, finite forward loss, scheduler defaults, fixed-sigma noise, and iterative sampling output shapes.
  • Metric smoke: RDF Wasserstein and Si-O coordination on a tiny ASE structure.
  • Real-data shape smoke: official DM2 300-atom SiO2 LAMMPS demo file parses and forward loss is finite.

Note: the code/config/metric path is now in place for RFC review. Final Hackathon numeric acceptance still needs the official uploaded data/checkpoint/log artifacts and long-run parity reports for forward diff, 2+ epoch loss alignment, and sampling metrics.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

这个文件的可视化,表格这里多了下划线,辛苦检查下

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

辛苦参考其他readme修改下该文件的格式

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

这里为什么新增了dm2的dataset

Comment threadppmat/models/common/e3nn/nn/_gate.py Outdated
instructions += [tuple(range(i, i + len(irreps_out)))]
i += len(irreps_out)
assert len(irreps_in) == i, (len(irreps_in), i)
irreps_in, p, _ = paddle.sort(x=irreps_in), paddle.argsort(x=irreps_in)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

这里为什么修改

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

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

【Hackathon 10th Spring No.15】DM2模型复现 - #277

Open
yu0809 wants to merge 2 commits into
PaddlePaddle:developfrom
yu0809:codex/dm2-model
Open

【Hackathon 10th Spring No.15】DM2模型复现#277
yu0809 wants to merge 2 commits into
PaddlePaddle:developfrom
yu0809:codex/dm2-model

Conversation

@yu0809

@yu0809yu0809 commented May 2, 2026

Copy link
Copy Markdown

What changed

  • Add a Paddle implementation of the DM2 structure denoising model, including the NequIP-style denoiser, noise/rattle utilities, edge down-selection, training forward pass, and iterative sampling path.
  • Add an ASE-backed DM2StructureDataset and DM2 SiO2 example configuration under structure_generation/configs/dm2.
  • Register DM2 model and dataset exports, document the new structure generation entry, and add a focused DM2 smoke test.
  • Fix Irreps sorting in the local e3nn Gate helper so DM2's gate construction works at runtime.

Related

Validation

  • python3 -m py_compile ppmat/models/common/e3nn/nn/_gate.py ppmat/models/dm2/dm2.py ppmat/datasets/dm2_dataset.py test/test_dm2_model.py
  • Parsed structure_generation/configs/dm2/dm2_sio2.yaml with PyYAML
  • Ran a targeted DM2 runtime smoke test covering model construction, finite forward loss, and iterative sampling output shapes
  • git diff --cached --check

@paddle-bot

paddle-botBot commented May 2, 2026

Copy link
Copy Markdown

Thanks for your contribution!

@paddle-botpaddle-botBot added the contributor External developers label May 2, 2026
@yu0809yu0809 changed the title Add DM2 structure denoising model【Hackathon 10th Spring No.15】DM2模型复现May 2, 2026
@yu0809ChatGPT Codex Connector

Copy link
Copy Markdown
Author

Update after commit 629b630:

  • Moved DM2 diffusion/noise scheduling utilities into ppmat/schedulers via DM2DenoisingScheduler.
  • Added DM2 configs for the RFC-covered systems: dm2_sio2_unconditional.yaml, dm2_sio2_conditional.yaml, and dm2_cuzr.yaml.
  • Added RDF Wasserstein / coordination metric hook for amorphous generation evaluation.
  • Updated structure_generation/sample.py so Sample.sample_params is honored by dataloader-based sampling.
  • Extended DM2 tests for scheduler defaults, fixed-sigma noise, sampling output shape, and optional metric smoke.

Validation run locally:

  • python3 -m py_compile ppmat/schedulers/scheduling_dm2.py ppmat/schedulers/__init__.py ppmat/models/dm2/dm2.py ppmat/datasets/dm2_dataset.py ppmat/metrics/dm2_metric.py ppmat/metrics/__init__.py structure_generation/sample.py test/test_dm2_model.py
  • Parsed all DM2 YAML configs with PyYAML.
  • git diff --check
  • Targeted DM2 runtime smoke: model construction, finite forward loss, scheduler defaults, fixed-sigma noise, and iterative sampling output shapes.
  • Metric smoke: RDF Wasserstein and Si-O coordination on a tiny ASE structure.
  • Real-data shape smoke: official DM2 300-atom SiO2 LAMMPS demo file parses and forward loss is finite.

Note: the code/config/metric path is now in place for RFC review. Final Hackathon numeric acceptance still needs the official uploaded data/checkpoint/log artifacts and long-run parity reports for forward diff, 2+ epoch loss alignment, and sampling metrics.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

这个文件的可视化,表格这里多了下划线,辛苦检查下

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

辛苦参考其他readme修改下该文件的格式

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

这里为什么新增了dm2的dataset

Comment threadppmat/models/common/e3nn/nn/_gate.py Outdated
instructions += [tuple(range(i, i + len(irreps_out)))]
i += len(irreps_out)
assert len(irreps_in) == i, (len(irreps_in), i)
irreps_in, p, _ = paddle.sort(x=irreps_in), paddle.argsort(x=irreps_in)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

这里为什么修改

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@yu0809@leeleolay@luotao1
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' 【Hackathon 10th Spring No.15】DM2模型复现 by yu0809 · Pull Request #277 · PaddlePaddle/PaddleMaterials · GitHub
Skip to content

【Hackathon 10th Spring No.15】DM2模型复现 - #277

Open
yu0809 wants to merge 2 commits into
PaddlePaddle:developfrom
yu0809:codex/dm2-model
Open

【Hackathon 10th Spring No.15】DM2模型复现#277
yu0809 wants to merge 2 commits into
PaddlePaddle:developfrom
yu0809:codex/dm2-model

Conversation

@yu0809

@yu0809yu0809 commented May 2, 2026

Copy link
Copy Markdown

What changed

  • Add a Paddle implementation of the DM2 structure denoising model, including the NequIP-style denoiser, noise/rattle utilities, edge down-selection, training forward pass, and iterative sampling path.
  • Add an ASE-backed DM2StructureDataset and DM2 SiO2 example configuration under structure_generation/configs/dm2.
  • Register DM2 model and dataset exports, document the new structure generation entry, and add a focused DM2 smoke test.
  • Fix Irreps sorting in the local e3nn Gate helper so DM2's gate construction works at runtime.

Related

Validation

  • python3 -m py_compile ppmat/models/common/e3nn/nn/_gate.py ppmat/models/dm2/dm2.py ppmat/datasets/dm2_dataset.py test/test_dm2_model.py
  • Parsed structure_generation/configs/dm2/dm2_sio2.yaml with PyYAML
  • Ran a targeted DM2 runtime smoke test covering model construction, finite forward loss, and iterative sampling output shapes
  • git diff --cached --check

@paddle-bot

paddle-botBot commented May 2, 2026

Copy link
Copy Markdown

Thanks for your contribution!

@paddle-botpaddle-botBot added the contributor External developers label May 2, 2026
@yu0809yu0809 changed the title Add DM2 structure denoising model【Hackathon 10th Spring No.15】DM2模型复现May 2, 2026
@yu0809ChatGPT Codex Connector

Copy link
Copy Markdown
Author

Update after commit 629b630:

  • Moved DM2 diffusion/noise scheduling utilities into ppmat/schedulers via DM2DenoisingScheduler.
  • Added DM2 configs for the RFC-covered systems: dm2_sio2_unconditional.yaml, dm2_sio2_conditional.yaml, and dm2_cuzr.yaml.
  • Added RDF Wasserstein / coordination metric hook for amorphous generation evaluation.
  • Updated structure_generation/sample.py so Sample.sample_params is honored by dataloader-based sampling.
  • Extended DM2 tests for scheduler defaults, fixed-sigma noise, sampling output shape, and optional metric smoke.

Validation run locally:

  • python3 -m py_compile ppmat/schedulers/scheduling_dm2.py ppmat/schedulers/__init__.py ppmat/models/dm2/dm2.py ppmat/datasets/dm2_dataset.py ppmat/metrics/dm2_metric.py ppmat/metrics/__init__.py structure_generation/sample.py test/test_dm2_model.py
  • Parsed all DM2 YAML configs with PyYAML.
  • git diff --check
  • Targeted DM2 runtime smoke: model construction, finite forward loss, scheduler defaults, fixed-sigma noise, and iterative sampling output shapes.
  • Metric smoke: RDF Wasserstein and Si-O coordination on a tiny ASE structure.
  • Real-data shape smoke: official DM2 300-atom SiO2 LAMMPS demo file parses and forward loss is finite.

Note: the code/config/metric path is now in place for RFC review. Final Hackathon numeric acceptance still needs the official uploaded data/checkpoint/log artifacts and long-run parity reports for forward diff, 2+ epoch loss alignment, and sampling metrics.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

这个文件的可视化,表格这里多了下划线,辛苦检查下

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

辛苦参考其他readme修改下该文件的格式

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

这里为什么新增了dm2的dataset

Comment threadppmat/models/common/e3nn/nn/_gate.py Outdated
instructions += [tuple(range(i, i + len(irreps_out)))]
i += len(irreps_out)
assert len(irreps_in) == i, (len(irreps_in), i)
irreps_in, p, _ = paddle.sort(x=irreps_in), paddle.argsort(x=irreps_in)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

这里为什么修改

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@yu0809@leeleolay@luotao1
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' 【Hackathon 10th Spring No.15】DM2模型复现 by yu0809 · Pull Request #277 · PaddlePaddle/PaddleMaterials · GitHub
Skip to content

【Hackathon 10th Spring No.15】DM2模型复现 - #277

Open
yu0809 wants to merge 2 commits into
PaddlePaddle:developfrom
yu0809:codex/dm2-model
Open

【Hackathon 10th Spring No.15】DM2模型复现#277
yu0809 wants to merge 2 commits into
PaddlePaddle:developfrom
yu0809:codex/dm2-model

Conversation

@yu0809

@yu0809yu0809 commented May 2, 2026

Copy link
Copy Markdown

What changed

  • Add a Paddle implementation of the DM2 structure denoising model, including the NequIP-style denoiser, noise/rattle utilities, edge down-selection, training forward pass, and iterative sampling path.
  • Add an ASE-backed DM2StructureDataset and DM2 SiO2 example configuration under structure_generation/configs/dm2.
  • Register DM2 model and dataset exports, document the new structure generation entry, and add a focused DM2 smoke test.
  • Fix Irreps sorting in the local e3nn Gate helper so DM2's gate construction works at runtime.

Related

Validation

  • python3 -m py_compile ppmat/models/common/e3nn/nn/_gate.py ppmat/models/dm2/dm2.py ppmat/datasets/dm2_dataset.py test/test_dm2_model.py
  • Parsed structure_generation/configs/dm2/dm2_sio2.yaml with PyYAML
  • Ran a targeted DM2 runtime smoke test covering model construction, finite forward loss, and iterative sampling output shapes
  • git diff --cached --check

@paddle-bot

paddle-botBot commented May 2, 2026

Copy link
Copy Markdown

Thanks for your contribution!

@paddle-botpaddle-botBot added the contributor External developers label May 2, 2026
@yu0809yu0809 changed the title Add DM2 structure denoising model【Hackathon 10th Spring No.15】DM2模型复现May 2, 2026
@yu0809ChatGPT Codex Connector

Copy link
Copy Markdown
Author

Update after commit 629b630:

  • Moved DM2 diffusion/noise scheduling utilities into ppmat/schedulers via DM2DenoisingScheduler.
  • Added DM2 configs for the RFC-covered systems: dm2_sio2_unconditional.yaml, dm2_sio2_conditional.yaml, and dm2_cuzr.yaml.
  • Added RDF Wasserstein / coordination metric hook for amorphous generation evaluation.
  • Updated structure_generation/sample.py so Sample.sample_params is honored by dataloader-based sampling.
  • Extended DM2 tests for scheduler defaults, fixed-sigma noise, sampling output shape, and optional metric smoke.

Validation run locally:

  • python3 -m py_compile ppmat/schedulers/scheduling_dm2.py ppmat/schedulers/__init__.py ppmat/models/dm2/dm2.py ppmat/datasets/dm2_dataset.py ppmat/metrics/dm2_metric.py ppmat/metrics/__init__.py structure_generation/sample.py test/test_dm2_model.py
  • Parsed all DM2 YAML configs with PyYAML.
  • git diff --check
  • Targeted DM2 runtime smoke: model construction, finite forward loss, scheduler defaults, fixed-sigma noise, and iterative sampling output shapes.
  • Metric smoke: RDF Wasserstein and Si-O coordination on a tiny ASE structure.
  • Real-data shape smoke: official DM2 300-atom SiO2 LAMMPS demo file parses and forward loss is finite.

Note: the code/config/metric path is now in place for RFC review. Final Hackathon numeric acceptance still needs the official uploaded data/checkpoint/log artifacts and long-run parity reports for forward diff, 2+ epoch loss alignment, and sampling metrics.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

这个文件的可视化,表格这里多了下划线,辛苦检查下

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

辛苦参考其他readme修改下该文件的格式

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

这里为什么新增了dm2的dataset

Comment threadppmat/models/common/e3nn/nn/_gate.py Outdated
instructions += [tuple(range(i, i + len(irreps_out)))]
i += len(irreps_out)
assert len(irreps_in) == i, (len(irreps_in), i)
irreps_in, p, _ = paddle.sort(x=irreps_in), paddle.argsort(x=irreps_in)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

这里为什么修改

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@yu0809@leeleolay@luotao1
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' 【Hackathon 10th Spring No.15】DM2模型复现 by yu0809 · Pull Request #277 · PaddlePaddle/PaddleMaterials · GitHub
Skip to content

【Hackathon 10th Spring No.15】DM2模型复现 - #277

Open
yu0809 wants to merge 2 commits into
PaddlePaddle:developfrom
yu0809:codex/dm2-model
Open

【Hackathon 10th Spring No.15】DM2模型复现#277
yu0809 wants to merge 2 commits into
PaddlePaddle:developfrom
yu0809:codex/dm2-model

Conversation

@yu0809

@yu0809yu0809 commented May 2, 2026

Copy link
Copy Markdown

What changed

  • Add a Paddle implementation of the DM2 structure denoising model, including the NequIP-style denoiser, noise/rattle utilities, edge down-selection, training forward pass, and iterative sampling path.
  • Add an ASE-backed DM2StructureDataset and DM2 SiO2 example configuration under structure_generation/configs/dm2.
  • Register DM2 model and dataset exports, document the new structure generation entry, and add a focused DM2 smoke test.
  • Fix Irreps sorting in the local e3nn Gate helper so DM2's gate construction works at runtime.

Related

Validation

  • python3 -m py_compile ppmat/models/common/e3nn/nn/_gate.py ppmat/models/dm2/dm2.py ppmat/datasets/dm2_dataset.py test/test_dm2_model.py
  • Parsed structure_generation/configs/dm2/dm2_sio2.yaml with PyYAML
  • Ran a targeted DM2 runtime smoke test covering model construction, finite forward loss, and iterative sampling output shapes
  • git diff --cached --check

@paddle-bot

paddle-botBot commented May 2, 2026

Copy link
Copy Markdown

Thanks for your contribution!

@paddle-botpaddle-botBot added the contributor External developers label May 2, 2026
@yu0809yu0809 changed the title Add DM2 structure denoising model【Hackathon 10th Spring No.15】DM2模型复现May 2, 2026
@yu0809ChatGPT Codex Connector

Copy link
Copy Markdown
Author

Update after commit 629b630:

  • Moved DM2 diffusion/noise scheduling utilities into ppmat/schedulers via DM2DenoisingScheduler.
  • Added DM2 configs for the RFC-covered systems: dm2_sio2_unconditional.yaml, dm2_sio2_conditional.yaml, and dm2_cuzr.yaml.
  • Added RDF Wasserstein / coordination metric hook for amorphous generation evaluation.
  • Updated structure_generation/sample.py so Sample.sample_params is honored by dataloader-based sampling.
  • Extended DM2 tests for scheduler defaults, fixed-sigma noise, sampling output shape, and optional metric smoke.

Validation run locally:

  • python3 -m py_compile ppmat/schedulers/scheduling_dm2.py ppmat/schedulers/__init__.py ppmat/models/dm2/dm2.py ppmat/datasets/dm2_dataset.py ppmat/metrics/dm2_metric.py ppmat/metrics/__init__.py structure_generation/sample.py test/test_dm2_model.py
  • Parsed all DM2 YAML configs with PyYAML.
  • git diff --check
  • Targeted DM2 runtime smoke: model construction, finite forward loss, scheduler defaults, fixed-sigma noise, and iterative sampling output shapes.
  • Metric smoke: RDF Wasserstein and Si-O coordination on a tiny ASE structure.
  • Real-data shape smoke: official DM2 300-atom SiO2 LAMMPS demo file parses and forward loss is finite.

Note: the code/config/metric path is now in place for RFC review. Final Hackathon numeric acceptance still needs the official uploaded data/checkpoint/log artifacts and long-run parity reports for forward diff, 2+ epoch loss alignment, and sampling metrics.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

这个文件的可视化,表格这里多了下划线,辛苦检查下

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

辛苦参考其他readme修改下该文件的格式

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

这里为什么新增了dm2的dataset

Comment threadppmat/models/common/e3nn/nn/_gate.py Outdated
instructions += [tuple(range(i, i + len(irreps_out)))]
i += len(irreps_out)
assert len(irreps_in) == i, (len(irreps_in), i)
irreps_in, p, _ = paddle.sort(x=irreps_in), paddle.argsort(x=irreps_in)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

这里为什么修改

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

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

【Hackathon 10th Spring No.15】DM2模型复现 - #277

Open
yu0809 wants to merge 2 commits into
PaddlePaddle:developfrom
yu0809:codex/dm2-model
Open

【Hackathon 10th Spring No.15】DM2模型复现#277
yu0809 wants to merge 2 commits into
PaddlePaddle:developfrom
yu0809:codex/dm2-model

Conversation

@yu0809

@yu0809yu0809 commented May 2, 2026

Copy link
Copy Markdown

What changed

  • Add a Paddle implementation of the DM2 structure denoising model, including the NequIP-style denoiser, noise/rattle utilities, edge down-selection, training forward pass, and iterative sampling path.
  • Add an ASE-backed DM2StructureDataset and DM2 SiO2 example configuration under structure_generation/configs/dm2.
  • Register DM2 model and dataset exports, document the new structure generation entry, and add a focused DM2 smoke test.
  • Fix Irreps sorting in the local e3nn Gate helper so DM2's gate construction works at runtime.

Related

Validation

  • python3 -m py_compile ppmat/models/common/e3nn/nn/_gate.py ppmat/models/dm2/dm2.py ppmat/datasets/dm2_dataset.py test/test_dm2_model.py
  • Parsed structure_generation/configs/dm2/dm2_sio2.yaml with PyYAML
  • Ran a targeted DM2 runtime smoke test covering model construction, finite forward loss, and iterative sampling output shapes
  • git diff --cached --check

@paddle-bot

paddle-botBot commented May 2, 2026

Copy link
Copy Markdown

Thanks for your contribution!

@paddle-botpaddle-botBot added the contributor External developers label May 2, 2026
@yu0809yu0809 changed the title Add DM2 structure denoising model【Hackathon 10th Spring No.15】DM2模型复现May 2, 2026
@yu0809ChatGPT Codex Connector

Copy link
Copy Markdown
Author

Update after commit 629b630:

  • Moved DM2 diffusion/noise scheduling utilities into ppmat/schedulers via DM2DenoisingScheduler.
  • Added DM2 configs for the RFC-covered systems: dm2_sio2_unconditional.yaml, dm2_sio2_conditional.yaml, and dm2_cuzr.yaml.
  • Added RDF Wasserstein / coordination metric hook for amorphous generation evaluation.
  • Updated structure_generation/sample.py so Sample.sample_params is honored by dataloader-based sampling.
  • Extended DM2 tests for scheduler defaults, fixed-sigma noise, sampling output shape, and optional metric smoke.

Validation run locally:

  • python3 -m py_compile ppmat/schedulers/scheduling_dm2.py ppmat/schedulers/__init__.py ppmat/models/dm2/dm2.py ppmat/datasets/dm2_dataset.py ppmat/metrics/dm2_metric.py ppmat/metrics/__init__.py structure_generation/sample.py test/test_dm2_model.py
  • Parsed all DM2 YAML configs with PyYAML.
  • git diff --check
  • Targeted DM2 runtime smoke: model construction, finite forward loss, scheduler defaults, fixed-sigma noise, and iterative sampling output shapes.
  • Metric smoke: RDF Wasserstein and Si-O coordination on a tiny ASE structure.
  • Real-data shape smoke: official DM2 300-atom SiO2 LAMMPS demo file parses and forward loss is finite.

Note: the code/config/metric path is now in place for RFC review. Final Hackathon numeric acceptance still needs the official uploaded data/checkpoint/log artifacts and long-run parity reports for forward diff, 2+ epoch loss alignment, and sampling metrics.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

这个文件的可视化,表格这里多了下划线,辛苦检查下

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

辛苦参考其他readme修改下该文件的格式

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

这里为什么新增了dm2的dataset

Comment threadppmat/models/common/e3nn/nn/_gate.py Outdated
instructions += [tuple(range(i, i + len(irreps_out)))]
i += len(irreps_out)
assert len(irreps_in) == i, (len(irreps_in), i)
irreps_in, p, _ = paddle.sort(x=irreps_in), paddle.argsort(x=irreps_in)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

这里为什么修改

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@yu0809@leeleolay@luotao1