') + ')', '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('^' + ".*" + ', '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" + ', '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('^' + ".*" + ', '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); } })(); })(); GitHub - openmlsys/openmlsys: 《Machine Learning Systems: Design and Implementation》 (V2 is launching soon) · GitHub
Skip to content

Repository files navigation

OpenMLSys Logo

CIBook OnlineLicenseGitHub Stars

中文 | English


机器学习系统:设计和实现

本开源项目讲解现代机器学习系统的设计原理和实现经验,涵盖从编程接口、计算图、编译器到分布式训练的完整技术栈。

在线阅读:openmlsys.github.io

目录

适用读者

  • 学生:掌握机器学习基础理论后,希望深入了解现代机器学习系统设计与实现的同学。
  • 科研人员:需要开发自定义算子(Custom Operators)或利用分布式执行实现大模型的研究者。
  • 开发人员:负责机器学习基础设施建设,需要对系统性能调优和深度定制的工程师。

内容介绍

本书(第二版)共分9章:

章节内容
第1章 导论机器学习系统架构和技术栈概述
第2章 编程接口与计算图张量抽象、自动微分、图表示与执行
第3章 AI加速器与编程GPU 架构与 CUDA/Triton/CUTLASS 编程模型
第4章 AI编译器与运行时系统IR 设计、图优化、算子生成与运行时执行
第5章 数据处理系统数据加载、数据管道和分布式数据处理
第6章 训练系统单节点与分布式训练、并行策略与训练优化
第7章 模型服务推理优化、在线服务与模型管理
第8章 强化学习系统强化学习管道、环境交互与 RL 系统设计
第9章 大规模GPU集群管理GPU 调度、资源管理与大规模训练基础设施

更新日志

日期事件
2022-01项目初始化,开始中文内容编写
2022-05完成扩展篇各章节(联邦学习、强化学习、可解释 AI)
2023-05适配 MindSpore 2.0
2026-03中英文双语构建架构重构;启动英文版

构建指南

环境依赖

  • curl
  • git
  • Python 3

安装步骤

# 克隆仓库
git clone https://github.com/openmlsys/openmlsys-zh.git
cd openmlsys-zh
# 安装rust toolchain 
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# 安装mdbook
cargo install mdbook

编译HTML

sh build_mdbook_v2.sh
# 英文版生成结果位于 .mdbook-v2/book# 中文版生成结果位于 .mdbook-v2-zh/book

更多细节请参考 构建指南

贡献指南

我们欢迎任何形式的贡献,详细流程请参阅 贡献指南

提交前请阅读:

社区

微信群二维码
扫码加入微信交流群

引用

如果本书对您的研究或工作有所帮助,请使用以下格式引用:

文本格式:

OpenMLSys Team. 机器学习系统:设计和实现. 2022. https://openmlsys.github.io/

BibTeX:

@book{openmlsys2022,
title = {机器学习系统:设计和实现},
author = {OpenMLSys Team},
year = {2022},
url = {https://openmlsys.github.io/},
note = {开源教材,\url{https://github.com/openmlsys/openmlsys-zh}}
}

许可证

本项目采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际许可协议 授权。

About

《Machine Learning Systems: Design and Implementation》 (V2 is launching soon)

Topics

Resources

Stars

4.8k stars

Watchers

47 watching

Forks

Releases

Packages

Used by

Contributors

Languages