[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-pykeio--ort":3,"tool-pykeio--ort":64},[4,17,27,35,43,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":16},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,3,"2026-04-05T11:01:52",[13,14,15],"开发框架","图像","Agent","ready",{"id":18,"name":19,"github_repo":20,"description_zh":21,"stars":22,"difficulty_score":23,"last_commit_at":24,"category_tags":25,"status":16},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",140436,2,"2026-04-05T23:32:43",[13,15,26],"语言模型",{"id":28,"name":29,"github_repo":30,"description_zh":31,"stars":32,"difficulty_score":23,"last_commit_at":33,"category_tags":34,"status":16},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107662,"2026-04-03T11:11:01",[13,14,15],{"id":36,"name":37,"github_repo":38,"description_zh":39,"stars":40,"difficulty_score":23,"last_commit_at":41,"category_tags":42,"status":16},3704,"NextChat","ChatGPTNextWeb\u002FNextChat","NextChat 是一款轻量且极速的 AI 助手，旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性，以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发，NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。\n\n这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言，它也提供了便捷的自托管方案，支持一键部署到 Vercel 或 Zeabur 等平台。\n\nNextChat 的核心亮点在于其广泛的模型兼容性，原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型，让用户在一个界面即可自由切换不同 AI 能力。此外，它还率先支持 MCP（Model Context Protocol）协议，增强了上下文处理能力。针对企业用户，NextChat 提供专业版解决方案，具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能，满足公司对数据隐私和个性化管理的高标准要求。",87618,"2026-04-05T07:20:52",[13,26],{"id":44,"name":45,"github_repo":46,"description_zh":47,"stars":48,"difficulty_score":23,"last_commit_at":49,"category_tags":50,"status":16},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",84991,"2026-04-05T10:45:23",[14,51,52,53,15,54,26,13,55],"数据工具","视频","插件","其他","音频",{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":10,"last_commit_at":62,"category_tags":63,"status":16},3128,"ragflow","infiniflow\u002Fragflow","RAGFlow 是一款领先的开源检索增强生成（RAG）引擎，旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体（Agent）能力相结合，不仅支持从各类文档中高效提取知识，还能让模型基于这些知识进行逻辑推理和任务执行。\n\n在大模型应用中，幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构（如表格、图表及混合排版），显著提升了信息检索的准确度，从而有效减少模型“胡编乱造”的现象，确保回答既有据可依又具备时效性。其内置的智能体机制更进一步，使系统不仅能回答问题，还能自主规划步骤解决复杂问题。\n\n这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统，还是致力于探索大模型在垂直领域落地的创新者，都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口，既降低了非算法背景用户的上手门槛，也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目，它正成为连接通用大模型与行业专有知识之间的重要桥梁。",77062,"2026-04-04T04:44:48",[15,14,13,26,54],{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":70,"readme_en":71,"readme_zh":72,"quickstart_zh":73,"use_case_zh":74,"hero_image_url":75,"owner_login":76,"owner_name":77,"owner_avatar_url":78,"owner_bio":79,"owner_company":80,"owner_location":80,"owner_email":81,"owner_twitter":80,"owner_website":82,"owner_url":83,"languages":84,"stars":100,"forks":101,"last_commit_at":102,"license":103,"difficulty_score":23,"env_os":104,"env_gpu":105,"env_ram":106,"env_deps":107,"category_tags":113,"github_topics":114,"view_count":23,"oss_zip_url":80,"oss_zip_packed_at":80,"status":16,"created_at":123,"updated_at":124,"faqs":125,"releases":154},4021,"pykeio\u002Fort","ort","Fast ML inference & training for ONNX models in Rust","ort 是一个专为 Rust 开发者打造的高性能机器学习推理与训练库，旨在让 ONNX 格式的模型在各种硬件上高效运行。它基于微软强大的 ONNX Runtime 构建，同时兼容纯 Rust 实现的运行时后端，解决了跨平台部署中常见的性能瓶颈与环境配置难题。\n\n无论是需要将 PyTorch、TensorFlow 或 scikit-learn 等框架训练的模型部署到用户终端设备，还是在数据中心进行大规模加速计算，ort 都能提供流畅的支持。其核心优势在于极致的速度与轻量化设计：不仅支持几乎所有主流硬件加速器（如 GPU、NPU 等），还能在资源受限的边缘设备上轻松运行，确保模型在实际应用中既快又稳。\n\nort 特别适合熟悉 Rust 语言的软件工程师、算法研究人员以及需要构建本地化 AI 应用的产品团队。对于希望在不依赖重型 Python 环境的前提下，将先进 AI 能力集成到桌面应用、WebAssembly 或嵌入式系统中的开发者而言，ort 提供了类型安全且易于集成的解决方案。目前，包括 Hugging Face 的文本嵌入推理服务和 Google 的文件类型检测项目在内的多个知名开","ort 是一个专为 Rust 开发者打造的高性能机器学习推理与训练库，旨在让 ONNX 格式的模型在各种硬件上高效运行。它基于微软强大的 ONNX Runtime 构建，同时兼容纯 Rust 实现的运行时后端，解决了跨平台部署中常见的性能瓶颈与环境配置难题。\n\n无论是需要将 PyTorch、TensorFlow 或 scikit-learn 等框架训练的模型部署到用户终端设备，还是在数据中心进行大规模加速计算，ort 都能提供流畅的支持。其核心优势在于极致的速度与轻量化设计：不仅支持几乎所有主流硬件加速器（如 GPU、NPU 等），还能在资源受限的边缘设备上轻松运行，确保模型在实际应用中既快又稳。\n\nort 特别适合熟悉 Rust 语言的软件工程师、算法研究人员以及需要构建本地化 AI 应用的产品团队。对于希望在不依赖重型 Python 环境的前提下，将先进 AI 能力集成到桌面应用、WebAssembly 或嵌入式系统中的开发者而言，ort 提供了类型安全且易于集成的解决方案。目前，包括 Hugging Face 的文本嵌入推理服务和 Google 的文件类型检测项目在内的多个知名开源项目，均已采用 ort 来提升其推理效率。","\u003Cdiv align=center>\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fpykeio_ort_readme_f21243781416.png\" width=\"350px\">\n\u003Chr \u002F>\n\u003Ca href=\"https:\u002F\u002Fapp.codecov.io\u002Fgh\u002Fpykeio\u002Fort\" target=\"_blank\">\u003Cimg alt=\"Coverage Results\" src=\"https:\u002F\u002Fimg.shields.io\u002Fcodecov\u002Fc\u002Fgh\u002Fpykeio\u002Fort?style=for-the-badge\">\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcrates.io\u002Fcrates\u002Fort\" target=\"_blank\">\u003Cimg alt=\"Crates.io\" src=\"https:\u002F\u002Fimg.shields.io\u002Fcrates\u002Fd\u002Fort?style=for-the-badge\">\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Fpyke-osai\" target=\"_blank\">\u003Cimg alt=\"Open Collective backers and sponsors\" src=\"https:\u002F\u002Fimg.shields.io\u002Fopencollective\u002Fall\u002Fpyke-osai?style=for-the-badge&label=sponsors\">\u003C\u002Fa>\n\u003Cbr \u002F>\n\u003Ca href=\"https:\u002F\u002Fcrates.io\u002Fcrates\u002Fort\" target=\"_blank\">\u003Cimg alt=\"Crates.io\" src=\"https:\u002F\u002Fimg.shields.io\u002Fcrates\u002Fv\u002Fort?style=for-the-badge&label=ort&logo=rust\">\u003C\u002Fa> \u003Cimg alt=\"ONNX Runtime\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fonnxruntime-v1.24.4-blue?style=for-the-badge&logo=cplusplus\">\n\u003Cbr \u002F>\n\n| 💖 Sponsored by | |\n|:------------:|---|\n| \u003Ca href=\"https:\u002F\u002Frime.ai\u002F?utm_source=pykeio&utm_campaign=ort&utm_medium=readme\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcdn.pyke.io\u002F0\u002Fpyke:ort-rs\u002Fdocs@0.0.0\u002Fsponsor-identity\u002Frime.svg?_0\" alt=\"Rime.ai\"\u002F>\u003C\u002Fa> | Authentic AI voice models for enterprise. |\n\n\u003C\u002Fdiv>\n\n`ort` is a Rust interface for performing hardware-accelerated inference & training on machine learning models in the [Open Neural Network Exchange](https:\u002F\u002Fonnx.ai\u002F) (ONNX) format.\n\nBased on the now-inactive [`onnxruntime-rs`](https:\u002F\u002Fgithub.com\u002Fnbigaouette\u002Fonnxruntime-rs) crate, `ort` is primarily a wrapper for Microsoft's [ONNX Runtime](https:\u002F\u002Fonnxruntime.ai\u002F) library, but offers support for [other pure-Rust runtimes](https:\u002F\u002Fort.pyke.io\u002Fbackends).\n\n`ort` with ONNX Runtime is super quick - and it supports almost [any hardware accelerator](https:\u002F\u002Fort.pyke.io\u002Fperf\u002Fexecution-providers) you can think of. Even still, it's light enough to run on your users' devices.\n\nWhen you need to deploy a PyTorch\u002FTensorFlow\u002FKeras\u002Fscikit-learn\u002FPaddlePaddle model either on-device or in the datacenter, `ort` has you covered.\n\n## 📖 Documentation\n- [Guide](https:\u002F\u002Fort.pyke.io\u002F)\n- [API reference](https:\u002F\u002Fdocs.rs\u002Fort\u002F2.0.0-rc.12\u002Fort\u002F)\n- [Examples](https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Ftree\u002Fmain\u002Fexamples)\n- [Migrating from v1.x to v2.0](https:\u002F\u002Fort.pyke.io\u002Fmigrating\u002Fv2)\n\n## 🤔 Support\n- [Discord: `#🦀｜ort-general`](https:\u002F\u002Fdiscord.gg\u002FuQtsNu2xMa)\n- [GitHub Discussions](https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fdiscussions)\n\n## 🌠 Backers\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Fpyke-osai\">\n\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Fpyke-osai\u002Fbackers.svg\" \u002F>\n\u003C\u002Fa>\n\n## 💖 FOSS projects using `ort`\n\u003Csub>[Open a PR](https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fpulls) to add your project here 🌟\u003C\u002Fsub>\n\n\u003C!--\n    This section only showcases projects with OSI-approved licenses: https:\u002F\u002Fopensource.org\u002Flicenses\n    Businesses that sponsor pyke will appear at the top of the README instead!\n-->\n\n- **[Text Embeddings Inference (TEI)](https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Ftext-embeddings-inference)** uses `ort` to deliver high-performance ONNX Runtime inference for text embedding models.\n- **[Magika](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fmagika)** uses `ort` for neural network-based file type detection.\n- **[retto](https:\u002F\u002Fgithub.com\u002FNekoImageLand\u002Fretto)** uses `ort` for reliable, fast ONNX inference of PaddleOCR models on Desktop and WASM platforms.\n- **[edge-transformers](https:\u002F\u002Fgithub.com\u002Fnpc-engine\u002Fedge-transformers)** uses `ort` for accelerated transformer model inference at the edge.\n- **[`sbv2-api`](https:\u002F\u002Fgithub.com\u002Fneodyland\u002Fsbv2-api)** is a fast implementation of Style-BERT-VITS2 text-to-speech using `ort`.\n- **[BoquilaHUB](https:\u002F\u002Fgithub.com\u002Fboquila\u002Fboquilahub\u002F)** uses `ort` for local AI deployment in biodiversity conservation efforts.\n- **[CamTrap Detector](https:\u002F\u002Fgithub.com\u002Fbencevans\u002Fcamtrap-detector)** uses `ort` to detect animals, humans and vehicles in trail camera imagery.\n- **[Ortex](https:\u002F\u002Fgithub.com\u002Frelaypro-open\u002Fortex)** uses `ort` for safe ONNX Runtime bindings in Elixir.\n- **[oar-ocr](https:\u002F\u002Fgithub.com\u002FGreatV\u002Foar-ocr)** A comprehensive OCR library, built in Rust with `ort` for efficient inference.\n- **[`FastEmbed-rs`](https:\u002F\u002Fgithub.com\u002FAnush008\u002Ffastembed-rs)** uses `ort` for generating vector embeddings, reranking locally.\n- **[Ahnlich](https:\u002F\u002Fgithub.com\u002Fdeven96\u002Fahnlich)** uses `ort` to power their AI proxy for semantic search applications.\n- **[Murmure](https:\u002F\u002Fgithub.com\u002FKieirra\u002Fmurmure)** uses `ort` as its core engine, leveraging NVIDIA Parakeet to deliver fully local, free, private and cross‑platform Speech‑to‑Text enhanced with LLM post‑processing.\n- **[Valentinus](https:\u002F\u002Fgithub.com\u002Fkn0sys\u002Fvalentinus)** uses `ort` to provide embedding model inference inside LMDB.\n- **[SilentKeys](https:\u002F\u002Fgithub.com\u002Fgptguy\u002Fsilentkeys)** uses `ort` for fast, on-device real-time dictation with NVIDIA Parakeet and Silero VAD.\n","\u003Cdiv align=center>\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fpykeio_ort_readme_f21243781416.png\" width=\"350px\">\n\u003Chr \u002F>\n\u003Ca href=\"https:\u002F\u002Fapp.codecov.io\u002Fgh\u002Fpykeio\u002Fort\" target=\"_blank\">\u003Cimg alt=\"覆盖率结果\" src=\"https:\u002F\u002Fimg.shields.io\u002Fcodecov\u002Fc\u002Fgh\u002Fpykeio\u002Fort?style=for-the-badge\">\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fcrates.io\u002Fcrates\u002Fort\" target=\"_blank\">\u003Cimg alt=\"Crates.io\" src=\"https:\u002F\u002Fimg.shields.io\u002Fcrates\u002Fd\u002Fort?style=for-the-badge\">\u003C\u002Fa> \u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Fpyke-osai\" target=\"_blank\">\u003Cimg alt=\"Open Collective 后援者与赞助商\" src=\"https:\u002F\u002Fimg.shields.io\u002Fopencollective\u002Fall\u002Fpyke-osai?style=for-the-badge&label=sponsors\">\u003C\u002Fa>\n\u003Cbr \u002F>\n\u003Ca href=\"https:\u002F\u002Fcrates.io\u002Fcrates\u002Fort\" target=\"_blank\">\u003Cimg alt=\"Crates.io\" src=\"https:\u002F\u002Fimg.shields.io\u002Fcrates\u002Fv\u002Fort?style=for-the-badge&label=ort&logo=rust\">\u003C\u002Fa> \u003Cimg alt=\"ONNX Runtime\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fonnxruntime-v1.24.4-blue?style=for-the-badge&logo=cplusplus\">\n\u003Cbr \u002F>\n\n| 💖 赞助商 | |\n|:------------:|---|\n| \u003Ca href=\"https:\u002F\u002Frime.ai\u002F?utm_source=pykeio&utm_campaign=ort&utm_medium=readme\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcdn.pyke.io\u002F0\u002Fpyke:ort-rs\u002Fdocs@0.0.0\u002Fsponsor-identity\u002Frime.svg?_0\" alt=\"Rime.ai\"\u002F>\u003C\u002Fa> | 为企业提供真实的人工智能语音模型。 |\n\n\u003C\u002Fdiv>\n\n`ort` 是一个 Rust 接口，用于在 [开放神经网络交换](https:\u002F\u002Fonnx.ai\u002F) (ONNX) 格式的机器学习模型上执行硬件加速的推理和训练。\n\n基于现已停止维护的 [`onnxruntime-rs`](https:\u002F\u002Fgithub.com\u002Fnbigaouette\u002Fonnxruntime-rs) crate，`ort` 主要是 Microsoft 的 [ONNX Runtime](https:\u002F\u002Fonnxruntime.ai\u002F) 库的封装，但也支持 [其他纯 Rust 运行时](https:\u002F\u002Fort.pyke.io\u002Fbackends)。\n\n结合 ONNX Runtime 使用时，`ort` 非常快速，并且几乎支持你所能想到的任何硬件加速器 ([查看性能加速器列表](https:\u002F\u002Fort.pyke.io\u002Fperf\u002Fexecution-providers))。即便如此，它依然轻量，足以在用户的设备上运行。\n\n当你需要将 PyTorch、TensorFlow、Keras、scikit-learn 或 PaddlePaddle 模型部署到设备端或数据中心时，`ort` 都能为你提供解决方案。\n\n## 📖 文档\n- [指南](https:\u002F\u002Fort.pyke.io\u002F)\n- [API 参考](https:\u002F\u002Fdocs.rs\u002Fort\u002F2.0.0-rc.12\u002Fort\u002F)\n- [示例](https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Ftree\u002Fmain\u002Fexamples)\n- [从 v1.x 迁移到 v2.0](https:\u002F\u002Fort.pyke.io\u002Fmigrating\u002Fv2)\n\n## 🤔 支持\n- [Discord: `#🦀｜ort-general`](https:\u002F\u002Fdiscord.gg\u002FuQtsNu2xMa)\n- [GitHub 讨论区](https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fdiscussions)\n\n## 🌠 后援者\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Fpyke-osai\">\n\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Fpyke-osai\u002Fbackers.svg\" \u002F>\n\u003C\u002Fa>\n\n## 💖 使用 `ort` 的开源项目\n\u003Csub>[提交 PR](https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fpulls) 将你的项目添加到这里吧 🌟\u003C\u002Fsub>\n\n\u003C!--\n    本节仅展示获得 OSI 批准许可的项目：https:\u002F\u002Fopensource.org\u002Flicenses\n    赞助 pyke 的企业将会出现在 README 的顶部！\n-->\n\n- **[文本嵌入推理 (TEI)](https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Ftext-embeddings-inference)** 使用 `ort` 来高效地运行文本嵌入模型的 ONNX Runtime 推理。\n- **[Magika](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fmagika)** 使用 `ort` 进行基于神经网络的文件类型检测。\n- **[retto](https:\u002F\u002Fgithub.com\u002FNekoImageLand\u002Fretto)** 使用 `ort` 在桌面和 WASM 平台上可靠、快速地运行 PaddleOCR 模型的 ONNX 推理。\n- **[edge-transformers](https:\u002F\u002Fgithub.com\u002Fnpc-engine\u002Fedge-transformers)** 使用 `ort` 加速边缘端的 Transformer 模型推理。\n- **[`sbv2-api`](https:\u002F\u002Fgithub.com\u002Fneodyland\u002Fsbv2-api)** 是一个使用 `ort` 实现的 Style-BERT-VITS2 文本转语音快速实现。\n- **[BoquilaHUB](https:\u002F\u002Fgithub.com\u002Fboquila\u002Fboquilahub\u002F)** 使用 `ort` 在生物多样性保护工作中进行本地 AI 部署。\n- **[CamTrap Detector](https:\u002F\u002Fgithub.com\u002Fbencevans\u002Fcamtrap-detector)** 使用 `ort` 检测步道相机图像中的动物、人类和车辆。\n- **[Ortex](https:\u002F\u002Fgithub.com\u002Frelaypro-open\u002Fortex)** 使用 `ort` 在 Elixir 中安全地绑定 ONNX Runtime。\n- **[oar-ocr](https:\u002F\u002Fgithub.com\u002FGreatV\u002Foar-ocr)** 是一个全面的 OCR 库，基于 Rust 构建，并使用 `ort` 进行高效推理。\n- **[`FastEmbed-rs`](https:\u002F\u002Fgithub.com\u002FAnush008\u002Ffastembed-rs)** 使用 `ort` 在本地生成向量嵌入并重新排序。\n- **[Ahnlich](https:\u002F\u002Fgithub.com\u002Fdeven96\u002Fahnlich)** 使用 `ort` 为其语义搜索应用提供 AI 代理支持。\n- **[Murmure](https:\u002F\u002Fgithub.com\u002FKieirra\u002Fmurmure)** 将 `ort` 作为其核心引擎，利用 NVIDIA Parakeet 提供完全本地、免费、私密且跨平台的语音转文本服务，并结合 LLM 后处理技术。\n- **[Valentinus](https:\u002F\u002Fgithub.com\u002Fkn0sys\u002Fvalentinus)** 使用 `ort` 在 LMDB 内部提供嵌入模型推理。\n- **[SilentKeys](https:\u002F\u002Fgithub.com\u002Fgptguy\u002Fsilentkeys)** 使用 `ort` 结合 NVIDIA Parakeet 和 Silero VAD，在设备端实现快速的实时听写功能。","# ort 快速上手指南\n\n`ort` 是一个高性能的 Rust 库，用于在 [ONNX](https:\u002F\u002Fonnx.ai\u002F) 格式的机器学习模型上执行硬件加速推理与训练。它基于 Microsoft 的 ONNX Runtime，支持广泛的硬件加速器（如 CPU、GPU、NPU），既适合数据中心部署，也轻量到可在用户终端设备运行。\n\n## 环境准备\n\n### 系统要求\n- **操作系统**: Windows, macOS, Linux\n- **Rust 版本**: 建议使用最新稳定版 (可通过 `rustup` 安装)\n- **编译器**: 需要 C++ 编译器（如 `gcc`, `clang` 或 MSVC），因为底层依赖 ONNX Runtime 的 C API。\n\n### 前置依赖\n通常情况下，`ort` 会自动处理大部分依赖。但在某些 Linux 发行版上，可能需要手动安装基础开发库：\n\n```bash\n# Ubuntu\u002FDebian\nsudo apt-get update && sudo apt-get install -y build-essential pkg-config libssl-dev\n\n# CentOS\u002FRHEL\u002FFedora\nsudo dnf groupinstall \"Development Tools\"\nsudo dnf install openssl-devel pkg-config\n```\n\n> **注意**：`ort` 默认会动态链接或静态捆绑 ONNX Runtime 二进制文件，无需手动下载 ONNX Runtime 安装包。\n\n## 安装步骤\n\n在你的 Rust 项目目录中，使用 `cargo` 添加依赖：\n\n```bash\ncargo add ort\n```\n\n或者手动在 `Cargo.toml` 中添加：\n\n```toml\n[dependencies]\nort = \"2.0\"\n```\n\n> **国内加速建议**：如果下载 crates.io 依赖较慢，可配置国内镜像源。\n> 在 `~\u002F.cargo\u002Fconfig.toml` 中添加：\n> ```toml\n> [source.crates-io]\n> replace-with = 'ustc'\n> \n> [source.ustc]\n> registry = \"sparse+https:\u002F\u002Fmirrors.ustc.edu.cn\u002Fcrates.io-index\u002F\"\n> ```\n\n## 基本使用\n\n以下是一个最简单的示例，展示如何加载一个 ONNX 模型并执行推理。假设你有一个名为 `model.onnx` 的文件。\n\n### 1. 准备模型\n确保你拥有一个 `.onnx` 格式的模型文件。你可以从 Hugging Face 或其他模型库导出 PyTorch\u002FTensorFlow 模型为 ONNX 格式。\n\n### 2. 代码示例\n\n创建 `src\u002Fmain.rs`：\n\n```rust\nuse ort::{GraphOptimizationLevel, Session};\nuse ndarray::Array;\n\nfn main() -> ort::Result\u003C()> {\n    \u002F\u002F 初始化日志（可选，便于调试）\n    env_logger::init();\n\n    \u002F\u002F 构建会话\n    let session = Session::builder()?\n        .with_optimization_level(GraphOptimizationLevel::Level3)?\n        .with_intra_threads(4)?\n        .commit_from_file(\"model.onnx\")?;\n\n    \u002F\u002F 准备输入数据 (示例：创建一个简单的浮点数组)\n    \u002F\u002F 注意：实际形状需根据你的模型输入要求调整\n    let input_data = Array::from_shape_vec((1, 3), vec![1.0f32, 2.0, 3.0]).unwrap();\n    \n    \u002F\u002F 获取输入节点名称 (通常第一个输入)\n    let input_name = session.inputs[0].name.as_str();\n\n    \u002F\u002F 执行推理\n    let outputs = session.run(vec![(input_name, input_data.view())])?;\n\n    \u002F\u002F 处理输出\n    let output_tensor = &outputs[0];\n    println!(\"推理完成，输出形状: {:?}\", output_tensor.shape());\n    \n    \u002F\u002F 这里可以将 output_tensor 转换为 ndarray 进行进一步处理\n    \u002F\u002F let result: Array\u003Cf32, _> = output_tensor.try_extract::\u003Cf32>().unwrap().view().to_owned();\n\n    Ok(())\n}\n```\n\n### 3. 运行项目\n\n```bash\ncargo run\n```\n\n### 关键点说明\n- **Session 构建**: 使用 `Session::builder()` 可以配置优化级别、线程数等。\n- **commit_from_file**: 直接从文件系统加载 `.onnx` 模型。\n- **数据格式**: `ort` 深度集成 `ndarray`  crate，输入输出均使用 `ndarray::Array` 进行处理。\n- **硬件加速**: 若要启用 GPU (CUDA) 或其他执行提供者，需在构建 Session 时链式调用相应方法（例如 `.with_cuda(..)`），具体请参考官方文档的 Execution Providers 章节。\n\n现在你已经成功使用 `ort` 运行了第一个 ONNX 模型！","一家开发智能安防摄像头的初创团队，需要在资源受限的边缘设备上实时运行基于 PyTorch 训练的人脸识别模型。\n\n### 没有 ort 时\n- **部署困难**：团队被迫在 C++ 项目中嵌入庞大的 Python 环境来加载模型，导致固件体积激增，难以适配低端硬件。\n- **推理延迟高**：缺乏针对特定 NPU 或 GPU 的精细控制，视频流处理帧率仅能达到 15 FPS，无法满足实时报警需求。\n- **内存泄漏风险**：现有的非官方 Rust 绑定维护停滞，长时间运行后容易出现内存溢出，导致设备频繁死机重启。\n- **跨平台适配慢**：每更换一种芯片架构（如从 x86 转到 ARM），都需要耗费数周时间重新编译和调试底层依赖库。\n\n### 使用 ort 后\n- **轻量级集成**：直接通过纯 Rust 接口加载 ONNX 格式模型，无需 Python 运行时，固件体积减少 60%，轻松植入嵌入式系统。\n- **硬件加速最大化**：ort 自动调用 ONNX Runtime 的执行提供程序，充分释放设备 NPU 算力，将推理速度提升至 45 FPS，实现毫秒级响应。\n- **运行稳定可靠**：依托活跃的社区维护和严格的内存安全机制，设备可连续稳定运行数月无崩溃，大幅降低运维成本。\n- **一次编写多端运行**：利用 ort 对多种后端的支持，同一套代码即可无缝编译部署到服务器、桌面端及各类边缘计算盒子上。\n\nort 凭借 Rust 的内存安全特性与 ONNX Runtime 的强大加速能力，让高性能 AI 模型在边缘设备的落地变得简单、快速且稳定。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fpykeio_ort_f2124378.png","pykeio","pyke","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fpykeio_1e353520.png","",null,"contact@pyke.io","https:\u002F\u002Fpyke.io","https:\u002F\u002Fgithub.com\u002Fpykeio",[85,89,93,97],{"name":86,"color":87,"percentage":88},"Rust","#dea584",98.2,{"name":90,"color":91,"percentage":92},"Python","#3572A5",0.7,{"name":94,"color":95,"percentage":96},"TypeScript","#3178c6",0.6,{"name":98,"color":99,"percentage":96},"JavaScript","#f1e05a",2143,228,"2026-04-05T12:10:07","Apache-2.0","Linux, macOS, Windows","非必需。支持多种硬件加速器（包括 NVIDIA GPU、DirectML 等），具体型号和显存取决于所选的执行提供者（Execution Providers）及运行的模型大小。若使用 CUDA，需匹配 ONNX Runtime v1.24.4 支持的版本。","未说明（取决于模型大小，文档提及轻量级可运行于用户设备）",{"notes":108,"python":109,"dependencies":110},"ort 是一个用于 Rust 语言的库，而非 Python 包。它主要作为微软 ONNX Runtime 的封装，同时也支持其他纯 Rust 后端。适用于在边缘设备或数据中心部署来自 PyTorch、TensorFlow、Keras、scikit-learn 或 PaddlePaddle 的模型。具体的硬件加速需求需在构建时通过特性标志（features）选择相应的执行提供者。","不适用 (这是一个 Rust 库)",[111,112],"Rust (编程语言)","ONNX Runtime (v1.24.4)",[15,13,14],[115,116,117,118,119,120,121,122],"ai","inference","machine-learning","onnxruntime","rust","onnx","ai-training","fine-tuning","2026-03-27T02:49:30.150509","2026-04-06T08:39:13.092879",[126,131,136,141,146,150],{"id":127,"question_zh":128,"answer_zh":129,"source_url":130},18305,"为什么 Rust (ort) 的运行输出结果与 Python (onnxruntime) 不一致？","这通常是由于图像数据加载时的坐标顺序错误导致的。在 Rust 中使用 `image` crate 加载图片时，`get_pixel` 方法的参数顺序是 `(y, x)` 而不是 `(x, y)`。\n\n错误示例：\n```rust\nlet pixel = img.get_pixel(x as u32, y as u32); \u002F\u002F 错误\n```\n\n正确做法：\n```rust\nlet pixel = img.get_pixel(y as u32, x as u32); \u002F\u002F 注意这里是 y, x\n```\n\n请检查你的输入张量构建逻辑，确保像素读取顺序与模型预期一致。如果输入数据完全相同（例如全为 0.5 的固定数据），Rust、C++ 和 Python 的输出应当一致。","https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fissues\u002F13",{"id":132,"question_zh":133,"answer_zh":134,"source_url":135},18306,"如何在 Linux 上解决 ROCm 支持相关的共享库加载错误？","如果在运行时报错 `libonnxruntime_providers_shared.so: cannot open shared object file: No such file or directory`，通常是因为动态链接库不在默认搜索路径中。\n\n解决方法是将 ONNX Runtime 的库路径添加到 `LD_LIBRARY_PATH` 环境变量中：\n```bash\nexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORT_LIB_LOCATION\n```\n\n如果你是在 Docker 中构建，确保在构建 ONNX Runtime 时使用了 `--use_rocm` 和 `--rocm_home` 参数，并在运行时正确设置环境变量。","https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fissues\u002F16",{"id":137,"question_zh":138,"answer_zh":139,"source_url":140},18307,"编译 WASM 目标时报错 \"External initializers are not enabled\" 或推理失败怎么办？","在构建 WASM 模块时，请确保使用正确的目标三元组：`wasm32-unknown-unknown`，不要使用 `wasm32-unknown-emscripten`。\n\n此外，某些构建问题可以通过切换到 Rust nightly 工具链解决：\n```bash\nrustup default nightly\n# 或者针对特定项目\nrustup override set nightly\n```\n\n如果问题依旧，尝试清理缓存并重新构建：\n```bash\ncargo clean\ncargo build --target wasm32-unknown-unknown\n```","https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fissues\u002F75",{"id":142,"question_zh":143,"answer_zh":144,"source_url":145},18308,"在 Windows 上进行静态链接时遇到 \"cannot open input file 'onnxruntime.lib'\" 错误如何解决？","这个错误通常是因为 `ORT_LIB_LOCATION` 环境变量设置的路径不正确，导致构建系统找不到库文件目录。\n\n请检查并修正环境变量，使其指向包含 `.lib` 文件的实际构建目录（通常是 Release 或 Debug 文件夹），而不是文件本身。例如：\n\n```cmd\nset \"ORT_LIB_LOCATION=C:\\path\\to\\onnxruntime\\build\\Windows\\Release\"\ncargo build --release --target x86_64-pc-windows-msvc\n```\n\n注意：即使目录下没有名为 `onnxruntime.lib` 的单一文件（静态构建可能由多个 `.lib` 文件组成），只要路径指向正确的目录，`ort` crate 也能正常链接。","https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fissues\u002F117",{"id":147,"question_zh":148,"answer_zh":149,"source_url":135},18309,"如何配置 ort crate 以使用本地编译的 ONNX Runtime 而不是下载预编译版本？","你可以通过设置环境变量 `ORT_LIB_LOCATION` 来指定本地编译的 ONNX Runtime 库的位置。\n\n1. 首先自行编译 ONNX Runtime（例如使用 `build.sh` 或 `build.bat`）。\n2. 设置环境变量指向构建输出目录：\n   - Linux\u002FmacOS: `export ORT_LIB_LOCATION=\u002Fpath\u002Fto\u002Fonnxruntime\u002Fbuild\u002FLinux\u002FRelease`\n   - Windows: `set ORT_LIB_LOCATION=C:\\path\\to\\onnxruntime\\build\\Windows\\Release`\n3. 运行 `cargo build`。\n\n这样 `ort` crate 将链接到你本地提供的库文件，而不是自动下载。这对于需要特定硬件加速（如 ROCm、TensorRT）或自定义构建选项的场景非常有用。",{"id":151,"question_zh":152,"answer_zh":153,"source_url":130},18310,"遇到浮点精度问题（fp32\u002Ff16）导致推理结果不准确该怎么办？","如果发现模型在 fp32 或 f16 模式下精度异常，且怀疑是输入转换或读取顺序问题，可以尝试直接调用 C API 进行对比测试。\n\n常见原因包括：\n1. 输入数据的内存布局（Layout）或步长（Strides）不符合模型预期。\n2. 数据归一化范围错误（例如未将 [0, 255] 转换为 [0.0, 1.0]）。\n3. 通道顺序错误（RGB vs BGR）。\n\n建议先用固定数值的张量（如全 0.5）进行测试，如果此时 Rust、C++ 和 Python 输出一致，则说明问题出在数据预处理阶段，而非 `ort` crate 本身。",[155,160,165,170,175,180,185,190,195,200,205,210,215,220,225,230,235,240,245,250],{"id":156,"version":157,"summary_zh":158,"released_at":159},108872,"v2.0.0-rc.12","\u003Cdiv align=center>\n\n# 2.0.0-rc.12\n\n### 💖 如果你觉得 `ort` 很有用，请考虑在 [Open Collective](https:\u002F\u002Fopencollective.com\u002Fpyke-osai) 上赞助我们 💖\n\n🤔 需要帮助升级吗？请在 [GitHub Discussions](https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fdiscussions) 或 [pyke.io 的 Discord 服务器](https:\u002F\u002Fdiscord.gg\u002FuQtsNu2xMa) 中提问！\n\n---\n\n本次发布由 **Rime.ai** 支持完成！\n\n\u003Ca href=\"https:\u002F\u002Frime.ai\u002F\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcdn.pyke.io\u002F0\u002Fpyke:ort-rs\u002Fdocs@0.0.0\u002Fsponsor-identity\u002Frime.svg?_0\" alt=\"Rime.ai\"\u002F>\u003C\u002Fa>\n\u003Csub>为企业提供真实的 AI 语音模型。\u003C\u002Fsub>\n\n---\n\n\u003C\u002Fdiv>\n\n## 📍 多版本支持\n> 🚨 **如果你之前以 `default-features = false` 的方式使用 `ort`**，请启用 `api-24` 功能来使用最新特性。\n\n本次发布的最大亮点是 **多版本支持**：`ort` 现在可以使用 ONNX Runtime 从 v1.17 到 v1.24 的任意次版本。新特性通过 `api-*` 特性标志进行控制，例如 `api-20` 或 `api-24`。这些标志会设置 `ort` 所需的 ONNX Runtime 最低版本。\n\n更多信息 👉 https:\u002F\u002Fort.pyke.io\u002Fsetup\u002Fmultiversion\n\n## 🪄 自动设备选择\n从 ONNX Runtime 1.22 开始，`ort` 现会在有 NPU 可用时自动使用 NPU，以实现最高效率和最佳能耗！如果你手动设置了执行提供者，则会覆盖此自动选择行为。\n\n这要归功于超酷的新 API [`SessionBuilder::with_auto_device`](https:\u002F\u002Fdocs.rs\u002Fort\u002Flatest\u002Fort\u002Fsession\u002Fbuilder\u002Fstruct.SessionBuilder.html#method.with_auto_device)！此外，还有 [`SessionBuilder::with_devices`](https:\u002F\u002Fdocs.rs\u002Fort\u002Flatest\u002Fort\u002Fsession\u002Fbuilder\u002Fstruct.SessionBuilder.html#method.with_devices)，可提供更精细的控制。\n\n## 👁️ CUDA 13\n`ort` 现在同时提供了针对 CUDA 12 和 CUDA 13 的构建！它应该能够自动检测你正在使用的 CUDA 版本，但如果判断错误，你可以通过将 `ORT_CUDA_VERSION` 环境变量设置为 `12` 或 `13` 来覆盖默认行为。\n\n## 🩹 `SessionBuilder` 错误恢复\n现在，当你在构建会话时遇到错误，可以通过调用错误类型的 `.recover()` 方法来恢复 `SessionBuilder` 对象。\n\n## 🛡️ 构建证明\n预编译的二进制文件现在已通过 GitHub Actions 进行证明，因此你可以验证它们确实是来自 pyke.io 的未经篡改的 ONNX Runtime 构建。\n\n要验证，请下载你选择的二进制包[链接](https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fblob\u002Fmain\u002Fort-sys\u002Fbuild\u002Fdownload\u002Fdist.txt)，然后使用 `gh` CLI 进行验证：\n```\n➜  gh attestation verify --owner pykeio .\u002Fx86_64-pc-windows-msvc+cu13.tar.lzma2\n已加载文件:\u002F\u002F.\u002Fx86_64-pc-windows-msvc+cu13.tar.lzma2 的摘要 sha256:e96616510082108be228ad6ea026246a31650b7d446b330c6b9671fcb9ae6267\n已从 GitHub API 加载 1 份证明\n\n将强制执行以下策略标准：\n- OIDC 发行者必须匹配：................... https:\u002F\u002Ftoken.actions.githubusercontent.com\n- 源代码仓库所有者 URI 必须匹配：... https:\u002F\u002Fgithub.com\u002Fpykeio\n- 谓词类型必须匹配：................ https:\u002F\u002Fslsa.dev\u002Fprovenance\u002Fv1\n- 主体别名","2026-03-05T05:41:17",{"id":161,"version":162,"summary_zh":163,"released_at":164},108873,"v2.0.0-rc.11","\u003Cimg width=\"1652\" height=\"625\" alt=\"rc11\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F80fc71e6-f65e-4374-be68-bcab2675326f\" \u002F>\n\n---\n\n\u003Cdiv align=center>\n\n### 💖 如果你觉得 `ort` 很有用，请考虑在 [Open Collective](https:\u002F\u002Fopencollective.com\u002Fpyke-osai) 上赞助我们 💖\n\n🤔 需要帮助升级吗？可以在 [GitHub Discussions](https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fdiscussions) 或 [pyke.io 的 Discord 服务器](https:\u002F\u002Fdiscord.gg\u002FuQtsNu2xMa) 中提问！\n\n\u003C\u002Fdiv>\n\n---\n\n很抱歉花了这么长时间才走到这一步，但 `ort` 的下一个重大版本终于将是 2.0.0 🎉。我知道我曾在之前的某个 alpha 版本中也说过类似的话（如果你还记得那些版本的话），不过这次我是认真的！另外，我也真的不希望紧接着又推出一个重大版本，所以如果你对任何 API 有任何疑虑，请 *现在就说出来，否则就永远保持沉默吧！*\n\n在此向这些年来为这个项目做出贡献的各位表示由衷的感谢：Marius、Urban Pistek、Phu Tran、Haagen、Yunho Cho、Laco Skokan、Noah、Matouš Kučera、mush42、Thomas、Bartek、Kevin Lacker 和 Okabintaro。正是有了你们的支持，过去几版 RC 才得以顺利发布。\n\n如果你是使用 `ort` 的 *企业*，请考虑 [赞助我](https:\u002F\u002Fgithub.com\u002Fsponsors\u002Fpykeio)。过去四个月里，pyke.io 的出站带宽增长了四倍，而其中 90% 都来自少数几家大企业。目前我还幸运地不需要支付出站流量费用，但我并不认为这种状况能够一直持续下去。多年来，pyke 和 `ort` 一直完全依靠我个人的积蓄来维持运营，而且（相信你也深有体会 😂）如今 *所有东西* 都越来越贵了，这样的模式显然难以为继。\n\n看到一些融资数千万美元的公司，竟然把业务的很大一部分建立在 `ort` 之上，一边寻求支持，一边却什么回报也不给，这……是不是有点不公平呢？\n\n---\n\n## `ort-web`\n`ort-web` 让你能够在网页上使用功能齐全的 ONNX Runtime！这一次，它不再需要任何 hacky 的解决方案，而是真正稳定可用的（不会再像上次那样被移除、再加回来、然后再移除啦！）。\n\n有关如何将你的应用移植到 `ort-web` 的信息，请参阅 [crate 文档](https:\u002F\u002Fdocs.rs\u002Fort-web)；虽然需要做一些工作。如果你想看一个非常基础的示例应用，可以参考 [`ort-web-sample`](https:\u002F\u002Fgithub.com\u002Fdecahedron1\u002Fort-web-sample)。\n\n和 `ort` 的其他部分一样，`ort-web` 的文档也会在 2.0.0 发布之前不断完善。如果你有任何问题，随时可以通过 GitHub Discussions 或 Discord 联系我们！\n\n## 新特性\n- [**`5d85209`**](https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F5d85209c11fd315cdbe04067435c5bed96937b10) 为 `ort-web` 添加 WebNN 和 WASM 执行提供者。\n- [**`#430`**](https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fpull\u002F430)（💖 [@jhonboy121](https:\u002F\u002Fgithub.com\u002Fjhonboy121)）支持静态链接到 iOS 框架。\n- [**`#433`**](https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fpull\u002F433)（💖 [@rMazeiks](https:\u002F\u002Fgithub.com\u002FrMazeiks)）实现 ","2026-01-07T21:40:02",{"id":166,"version":167,"summary_zh":168,"released_at":169},108874,"v2.0.0-rc.10","![rc10 图形](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F8986a416-704b-4d64-a69f-9ea91d6480da)\n\n---\n\n\u003Cdiv align=center>\n\n### 💖 如果你觉得 `ort` 很有用，请考虑在 [Open Collective](https:\u002F\u002Fopencollective.com\u002Fpyke-osai) 上赞助我们 💖\n\n🤔 需要帮助升级吗？请在 [GitHub Discussions](https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fdiscussions) 或 [pyke.io 的 Discord 服务器](https:\u002F\u002Fdiscord.gg\u002FuQtsNu2xMa) 中提问！\n\n\u003C\u002Fdiv>\n\n---\n\n## 🔗 张量数组视图\n现在可以直接从 `ArrayView` 创建 `TensorRef`。此前，张量只能通过 `Tensor::from_array` 来创建（在许多情况下，如果传入的是借用的数据，还会进行一次拷贝）。新的 [`TensorRef::from_array_view`](https:\u002F\u002Fdocs.rs\u002Fort\u002F2.0.0-rc.10\u002Fort\u002Fvalue\u002Ftype.TensorRef.html#method.from_array_view) 方法（以及配套的 [`TensorRefMut::from_array_view_mut`](https:\u002F\u002Fdocs.rs\u002Fort\u002F2.0.0-rc.10\u002Fort\u002Fvalue\u002Ftype.TensorRefMut.html#method.from_array_view_mut)）允许直接从 `ArrayView` 零拷贝地创建张量。\n\n`Tensor::from_array` 现在只接受拥有权的数据，因此你应该要么重构代码以使用 `TensorRef`，要么将数组的所有权转移给 `Tensor`。\n\n> ⚠️ `ndarray` 必须采用标准\u002F连续的内存布局才能转换为 `TensorRef(Mut)`；请参阅 [`as_standard_layout()`](https:\u002F\u002Fdocs.rs\u002Fndarray\u002Flatest\u002Fndarray\u002Fstruct.ArrayBase.html#method.as_standard_layout)。\n\n## ↔️ 复制张量\n`rc.10` 现在允许你使用 [`Tensor::to`](https:\u002F\u002Fdocs.rs\u002Fort\u002F2.0.0-rc.10\u002Fort\u002Fvalue\u002Ftype.Tensor.html#method.to) 手动在不同设备之间复制张量！\n\n```rs\n\u002F\u002F 在 CUDA 内存中创建我们的张量\nlet cuda_allocator = Allocator::new(\n\t&session,\n\tMemoryInfo::new(AllocationDevice::CUDA, 0, AllocatorType::Device, MemoryType::Default)?\n)?;\nlet cuda_tensor = Tensor::\u003Cf32>::new(&cuda_allocator, [1_usize, 3, 224, 224])?;\n\n\u002F\u002F 将其复制回 CPU\nlet cpu_tensor = cuda_tensor.to(AllocationDevice::CPU, 0)?;\n```\n\n此外，还有 [`Tensor::to_async`](https:\u002F\u002Fdocs.rs\u002Fort\u002F2.0.0-rc.10\u002Fort\u002Fvalue\u002Ftype.Tensor.html#method.to_async)，它复现了 PyTorch 的 `non_blocking=True` 功能。同时，`Tensor` 现在也实现了 `Clone` trait。\n\n## ⚙️ 替代后端\n`ort` 不再仅仅是 ONNX Runtime 的封装库；由于新增了[替代后端 API](https:\u002F\u002Fort.pyke.io\u002Fbackends)，它已成为在 Rust 中推理 ONNX 模型的一站式解决方案。\n\n替代后端会将其他推理引擎包装在 ONNX Runtime 的 API 之下，你可以直接将其集成到 `ort` 中并使用——只需一行代码即可：\n```rs\nfn main() {\n    ort::set_api(ort_tract::api()); \u002F\u002F \u003C- 神奇之处！\n\n    let session = Session::builder()?\n        ...\n}\n```\n\n随 `rc.10` 一同发布的有两个替代后端——由 [`tract`](https:\u002F\u002Fgithub.com\u002Fsonos\u002Ftract) 提供支持的 [`ort-tract`](https:\u002F\u002Fcrates.io\u002Fcrates\u002Fort-tract)，以及由 [`candle`](https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Fcand) 提供支持的 [`ort-candle`](https:\u002F\u002Fcrates.io\u002Fcrates\u002Fort-candle)。","2025-06-05T04:54:58",{"id":171,"version":172,"summary_zh":173,"released_at":174},108875,"v2.0.0-rc.9","## 🌴 撤销 *“扁平化”*（https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Fd4f82fc50edcbea3755ecc21ebb7a9fb28e7503e）\n此前的 `ort` 版本会将所有导出项“扁平化”，即在 crate 根模块中导出所有内容——`ort::{TensorElementType, Session, Value}`。当时 `ort` 导出的内容并不多，但如今已大幅增加，因此导致 `use` 块变得非常冗长且难以维护。\n\n在 `rc.9` 中，大多数导出项已被移至各自的模块下——例如，`Session` 现在需要通过 `ort::session::Session` 导入，`Tensor` 则需使用 `ort::value::Tensor`。借助 `rust-analyzer` 以及 [docs.rs 上的快速搜索](https:\u002F\u002Fdocs.rs\u002Fort\u002F2.0.0-rc.9\u002Fort\u002F?search=)，您可以轻松找到正确的导入路径。\n\n## 📦 Tensor 的 `extract` 优化（https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F1dbad54248cae53e7d4ded8c769c798aaff41c58）\n过去，调用任何 `extract_tensor_*` 方法时，都需要回溯到 ONNX Runtime 来确定值的 `ValueType`，以确保可以安全提取。这一过程涉及大量 FFI 调用和若干次内存分配，在性能敏感的循环中可能会产生显著的性能开销。\n\n由于值的类型在其创建后不会改变，现在 `ValueType` 已在 `Value` 构造时一并生成（例如通过 `Tensor::from_array` 或从会话中返回）。这使得 `extract_tensor_*` 方法的开销大大降低！\n\n需要注意的是，此次优化也带来了一些破坏性变更：\n- 原生张量提取方法的维度返回类型由 `Vec\u003Ci64>` 改为 `&[i64]`。\n- `Value::dtype()` 和 `Tensor::memory_info()` 现在分别返回 `&ValueType` 和 `&MemoryInfo`，而非非引用版本。\n- `ValueType::Tensor` 新增了一个用于表示符号维度的字段 `dimension_symbols`，因此您可能需要更新对 `ValueType` 的 `match` 语句。\n\n## 🚥 线程管理（https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F87577ef3965f41409f86247859b594b656639b29）\n`2.0.0-rc.9` 引入了一个新的 trait：[`ThreadManager`](https:\u002F\u002Fdocs.rs\u002Fort\u002F2.0.0-rc.9\u002Fort\u002Fenvironment\u002Ftrait.ThreadManager.html)。该 trait 允许您为会话和环境线程池定义自定义的线程创建与合并函数！请参阅 [`thread_manager.rs`](https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fblob\u002F87577ef3965f41409f86247859b594b656639b29\u002Ftests\u002Fthread_manager.rs) 测试文件，了解如何创建自己的 `ThreadManager` 并将其应用于会话，或应用于环境的 `GlobalThreadPoolOptions`（此前称为 `EnvironmentGlobalThreadPoolOptions`）。\n\n此外，如果已配置全局线程池，会话现在也可以选择 [不使用环境的全局线程池](https:\u002F\u002Fdocs.rs\u002Fort\u002F2.0.0-rc.9\u002Fort\u002Fsession\u002Fbuilder\u002Fstruct.SessionBuilder.html#method.with_independent_thread_pool)。\n\n## 🧠 自定义算子的形状推断（https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F87577ef3965f41409f86247859b594b656639b29）\n`ort` 现在提供了 [`ShapeInferenceContext`](https:\u002F\u002Fdocs.rs\u002Fort\u002F2.0.0-rc.9\u002Fort\u002Foperator\u002Fstruct.ShapeInferenceContext.html)，这是一个接口，供自定义算子向 ONNX Runtime 提供关于算子输出形状的提示。","2024-11-21T20:47:00",{"id":176,"version":177,"summary_zh":178,"released_at":179},108876,"v2.0.0-rc.7","## 突发：无错误函数\n以下函数已更新为返回 `T` 而不是 `ort::Result\u003CT>`：\n- `MemoryInfo::memory_type`\n- `MemoryInfo::allocator_type`\n- `MemoryInfo::allocation_device`\n- `MemoryInfo::device_id`\n- `Value::\u003CT>::memory_info`\n- `Value::\u003CT>::dtype`\n\n## 功能特性\n- `ValueType` 现在实现了 `Display`。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F7f71e6cf3ead157779fd2c3116334c3353cf2e06 为 `Value\u003CT>` 实现了 `Sync`。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Fabd527b6a1df8f566c729a9c4398bdfd185d652f **任意可配置的执行提供者** 允许您为 CANN、CUDA、oneDNN、QNN、TensorRT、VITIS 和 XNNPACK 执行提供者添加自定义配置选项。\n  * 这也修复了尝试配置 TensorRT 的 `ep_context_embed_mode` 时的一个 bug。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Fe16fd5bbcf6143a6590d558bee7462a653337143 为 CUDA 执行提供者添加了更多选项，包括用户计算流和 SDPA 内核配置。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Fbd3c891e776203de7dcd35a8dc7335dc05551b7e 为 `Allocator` 实现了 `Send`。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F6de6aa5b60b664584deb8f572d9d06301429923f 添加了 `Session::overridable_initializers`，用于获取图中可覆盖的初始值列表。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Fc8b36f33e8bc152c53736182080b6a97a025debb 允许加载带有内存中外部初始值的会话。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F2e1f0143772319ca29db1771fd7d24c3680dc998 在某些情况下允许将 `ValueRef` 或 `ValueRefMut` 升级为 `Value`。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Ff915bcaa573728b32a40a092889954fd1be213ad 添加了 `SessionBuilder::with_config_entry`，用于添加自定义会话配置选项。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Fae7b594d7f4fea5c8c943345f2b82a27cf8979b5 添加了一个环境变量 `ORT_PREFER_DYNAMIC_LINK`，用于在指定了 `ORT_LIB_LOCATION` 时，覆盖 `ort` 是优先使用静态库还是动态库。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F1e2e7b04ae9b25b47ae7f1cf8cab4f462866ee51 为 `IoBinding` 添加了显式数据重新同步的函数。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Fb19cff4de3197f18f2f3d662349a286791359bf0 为每个由 C 支持的结构体添加了 `::ptr()`，以暴露 `ort_sys` 指针。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Fd0ee39533dbdb0b3bbda1c2a9ea7b469e11f621f 为 `MemoryInfo` 实现了 `Clone`。\n\n## 修复\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Fb58595c26dfa9cea88066c21e5e011f294af5d9d oneDNN 执行提供者现在内部使用更新的 API 进行注册。（此外，`with_arena_allocator` 现在已更名为 `with_use_arena`。）\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Fcf1be8637c084baa8c4ed3493530d2608b6b898f 移除了 `IoBinding` 的生命周期约束，使其可以与会话一起存储在结构体中。\n- 对 Linux、macOS 和 Android 的静态链接进行了多项修复。\n  * https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F4da570026a85e2a4a9984550e428e99f81c70b1d\n  * https:\u002F\u002Fgithu","2024-10-18T23:24:25",{"id":181,"version":182,"summary_zh":183,"released_at":184},108877,"v2.0.0-rc.6","## `ort::Error` 重构\n`ort::Error` 不再是枚举类型，而是一个包含错误信息和新的 `ErrorCode` 字段的不透明结构体。\n\n`ort::Error` 仍然实现了 `std::error::Error` trait，因此这一更改不会造成太大的破坏性；不过，如果你之前曾对 `ort::Error` 进行过模式匹配，就需要将代码重构为匹配错误的代码（通过 `Error::code()` 函数获取）。\n\n## `AllocationDevice` 重构\n`AllocationDevice` 类型也已从枚举转换为结构体。常见的设备，如 CUDA 或 DirectML，可以通过关联常量访问，例如 `AllocationDevice::CUDA` 和 `AllocationDevice::DIRECTML`。\n\n## 功能更新\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F60f6ecae9064a75a474678998af42ea87067b1b1 **升级至 ONNX Runtime v1.19.2**。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F9f4527c10b43359f5a76d69b5f57391a686f92ee 添加了 `ModelMetadata::custom_keys()` 方法，用于获取所有自定义键的 Vec。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Fbfa791dfc00defc5669be27803624fbf73cf01c6 增加了多种影响计算和图优化的 `SessionBuilder` 选项。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F5e6fc6be6ba1a421cd0a980bbff8939a32a2446f 公开了底层的 `Allocator` API。现在可以分配和释放从会话或算子内核上下文中获取的缓冲区。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F52422ae47d83e97167a17f2ed066e4ccb06ab7fb 添加了 `ValueType::Optional`。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F25768125a2d32cd88f7da4bd2b847401317a901f 为新款 AMD Ryzen AI 芯片添加了 Vitis AI 执行提供者。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F41ef65abd668d77d8fd288011c43a7415854284b 为部分 Rockchip NPU 添加了 RKNPU 执行提供者。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F6b3e7a0730ca5bbf942a448aa9af65c6866fcc76 添加了 `KernelContext::par_for`，允许算子内核使用 ONNX Runtime 的线程池，而无需额外依赖 rayon 等 crate。\n\n## 修复内容\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Fedcb2199b8f341fc55746183c9cf1d00a43bbfcd **使环境初始化线程安全**。这应能消除在并行运行测试时出现的间歇性段错误，例如 #278 中所见的问题。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F30722797fccc6f8bc570cfaf614b42172ac868f4 **Linux 动态库不再需要版本符号链接**，从而修复了 #269 问题。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Fbc70a0aa4b1af2036f23b77b3409da9bb2708643 修复了从 `&CowArray` 创建 `Tensor` 时存在的无法满足的生命期约束问题。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F6592b17fe32bbcd0f7fa0733e0fd7d9491838f43 提供超出模型预期数量的输入时不再导致段错误。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Fb595048b8c7cc002a1fe6baf6536f1e4a7caa965 通过移除 `tracing` 的 `attributes` 功能来减少依赖项——现在使用 `--no-default-features` 构建 `ort` 只需编译 9 个 crate！\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Fc7ddbdb18e60a16fa53a871aaaa479a7442935a6 移除了 `operator-libraries` 功能——你仍然可以使用 `Ses","2024-09-10T21:46:13",{"id":186,"version":187,"summary_zh":188,"released_at":189},108878,"v2.0.0-rc.5","## 可能会破坏兼容性\n- **预编译的静态库**（即非 `cuda` 或 `tensorrt`）**在 Windows 上现在使用 `\u002FMD` 而不是 `\u002FMT` 进行链接**；也就是说，MSVC 运行时库不再被静态链接。这应该能在某些情况下解决链接问题（尤其是那些使用其他 FFI 库的 crate），但也可能会给其他项目带来问题。我个人已经在两个依赖 `ort` 和许多 FFI 库的内部 pyke 项目中测试过，尚未遇到任何问题，不过具体情况可能因人而异。\n\n## 肯定会破坏兼容性\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F069ddfdd2c1e8af0ea637ac40082ee176ebf870d **`ort` 现在依赖 `ndarray` 0.16 版本。**\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Fe2c454941b944a3bdb0a5df2f11cb997f50c2658 **已移除对 `wasm32-unknown-unknown` 的支持。**\n  * 一开始让 `wasm32-unknown-unknown` 正常工作几乎是个奇迹。为了让 ONNX Runtime 在 Emscripten 之外运行，我付出了大量努力，但近期 Emscripten 和 ONNX Runtime 的变化使得这一目标变得愈发困难。鉴于我对 ONNX Runtime 的内部机制了解不足、难以调试那些[奇怪的错误](https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fissues\u002F260)，以及我自学习 Rust 以来就立志尽量少写 C++ 代码，目前继续维护 `ort` 的 WASM 支持已不再可行。\n  * 如果你正在使用 `ort` 进行 WASM 开发，建议尝试并支持像 [`tract`](https:\u002F\u002Fgithub.com\u002Fsonos\u002Ftract) 或 [WONNX](https:\u002F\u002Fgithub.com\u002Fwebonnx\u002Fwonnx) 这样的替代方案，它们也提供了 ONNX 推理的 WASM 支持。\n\n## 功能更新\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Fab293f89a2e5321c5ba4998080fed6a84943e5ad **升级到 ONNX Runtime v1.19.0。**\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Fecf76f9c2bca04bd9b9eead5035906e9b1792a16 **为下载的模型文件名使用 URL 哈希值。** 之前通过 `commit_from_url` 下载并缓存的模型将被重新下载。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F9d2551470f40d73e9d678de19aa3ff7416ec543f **为部分执行提供程序添加缺失的配置项。**\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F733b7fa329f527a6c0c5c0e5b67f53b52cb8c0a5 **为简单的 `Trainer` API 添加新回调函数**，就像 Hugging Face 的 `TrainerCallbacks` 一样！这使你可以编写自定义的日志记录和学习率调度回调。请参阅更新后的[`train-clm-simple`](https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fblob\u002F733b7fa329f527a6c0c5c0e5b67f53b52cb8c0a5\u002Fexamples\u002Ftraining\u002Fexamples\u002Ftrain-clm-simple.rs#L16-L35) 示例以了解具体用法。\n\n## 修复内容\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F1692d11b63f1dda9de0d0a3a5d0dcd8d89223a5d 修复 OpenVINO EP 选项中的错误。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F08aaa0ffabf597eb97514180460de65bd1bf9938 修复 DirectML 输出张量提取的问题。\n\n\u003Chr \u002F>\n\n如果您对本次发布有任何疑问，欢迎随时联系我们：\n- [Discord: `#💬｜ort-discussions`](https:\u002F\u002Fdiscord.gg\u002FuQtsNu2xMa)\n- [GitHub Discussions](https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fdiscussions)\n\n喜欢 `ort` 吗？不妨考虑在 [Open Collective] 上支持我们吧！","2024-08-18T19:13:22",{"id":191,"version":192,"summary_zh":193,"released_at":194},108879,"v2.0.0-rc.4","本次发布修复了 rc3 中的重要链接问题，尤其是在 Linux 上使用 CUDA 时的问题。\n\nCUDA 12 构建不再需要 cuDNN 9（尽管它仍然是默认值）；请将 `ORT_CUDNN_VERSION` 环境变量设置为 `8`，以在 CUDA 12 中使用 cuDNN 8。\n\n\u003Chr \u002F>\n\n如果您对本次发布有任何疑问，我们随时为您提供帮助：\n- [Discord: `#💬｜ort-discussions`](https:\u002F\u002Fdiscord.gg\u002FuQtsNu2xMa)\n- [GitHub Discussions](https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fdiscussions)\n\n喜欢 `ort` 吗？不妨考虑在 [Open Collective 上支持我们](https:\u002F\u002Fopencollective.com\u002Fpyke-osai) 💖\n\n❤️💚💙💛","2024-07-07T20:52:47",{"id":196,"version":197,"summary_zh":198,"released_at":199},108880,"v2.0.0-rc.3","## 训练\n`ort` 现在支持 ONNX Runtime 训练 API 的一个（目前仍较为有限的）子集。您可以在任何 CPU 或 GPU 上使用设备端训练 API 进行微调、在线学习，甚至完整的预训练。\n\n[`train-clm`](https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Ftree\u002Fmain\u002Fexamples\u002Ftraining#train-clm) 示例从头开始预训练一个语言模型。此外，还有一个“简单”API 和相应的示例 [`train-clm-simple`](https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Ftree\u002Fmain\u002Fexamples\u002Ftraining#train-clm-simple)，它提供了一种几乎只用一行代码就能完成训练的解决方案，类似于 🤗 Transformers 的 Trainer API：\n```rs\ntrainer.train(\n\tTrainingArguments::new(dataloader)\n\t\t.with_lr(7e-5)\n\t\t.with_max_steps(5000)\n\t\t.with_ckpt_strategy(CheckpointStrategy::Steps(500))\n)?;\n```\n\n您可以通过 [这里](https:\u002F\u002Fonnxruntime.ai\u002Fdocs\u002Ftutorials\u002Fon-device-training\u002F) 了解更多关于使用 ONNX Runtime 进行训练的信息。欢迎您试用，并告诉我们如何能够进一步改善您的训练体验！\n\n## ONNX Runtime v1.18\n`ort` 现在随附 ONNX Runtime v1.18 发布。\n\n**CUDA 12 构建版本需要 cuDNN 9.x**，因此如果您正在使用 CUDA 12，则需要更新 cuDNN。而 CUDA 11 构建版本仍然需要 cuDNN 8.x。\n\n## `IoBinding`\n`IoBinding` 此前不太健全的 API 已经被重构，并且现在有了正式文档。\n\n## 输出选择与预分配\n有时您并不需要计算会话的所有输出。而在另一些情况下，为了节省缓慢的设备内存拷贝或昂贵的重新分配开销，您可能需要预先分配会话的输出。现在，您可以通过一个新的 API `OutputSelector` 来实现这两点，而无需使用 `IoBinding`：\n```rs\nlet options = RunOptions::new()?.with_outputs(\n\tOutputSelector::no_default()\n\t\t.with(\"output\")\n\t\t.preallocate(\"output\", Tensor::\u003Cf32>::new(&Allocator::default(), [1, 3, 224, 224])?)\n);\n\nlet outputs = model.run_with_options(inputs![\"input\" => input.view()]?, &options)?;\n```\n\n在这个示例中，每次使用相同的 `options` 结构调用 `run_with_options` 时，都会使用同一块内存分配，从而避免了重新分配输出的开销；同时，除了明确指定的 `output` 外，其他输出根本不会被计算。\n\n## 值操作的便利性\n字符串张量现在是 `Tensor\u003CString>` 而不是 `DynTensor`。创建或提取它们也不再需要提供分配器。此外，`Map` 也可以使用字符串作为键，并且同样不再需要分配器。\n\n自引入值特化以来，`IntoTensorElementType` 一直用于描述原始类型（如 f32、i64）元素。现在这一概念已被更改为 `PrimitiveTensorElementType`，它是 `IntoTensorElementType` 的一个子 trait。如果您之前在类型约束中使用过 `IntoTensorElementType`，那么建议将其更新为使用 `PrimitiveTensorElementType`。\n\n## 自定义算子\n算子内核现在支持 `i64`、字符串、`Vec\u003Cf32>`、`Vec\u003Ci64>` 以及 `TensorRef` 属性，同时还支持许多此前 C API 中缺失的功能。\n\n此外，向某个域添加算子的 API 也稍作调整：现在变为 `.add","2024-07-06T17:20:41",{"id":201,"version":202,"summary_zh":203,"released_at":204},108881,"v2.0.0-rc.2","## 变更\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Ff30ba572882e89cba4e631ed17ce818c3851df1c **升级至 ONNX Runtime v1.17.3**\n  * **新增：CUDA 12 二进制文件。** `ort` 将自动检测您环境中的 CUDA 12\u002F11，并安装相应的正确版本。\n  * **新增：适用于 Linux 的 ROCm 二进制文件。**\n  * 请注意，WASM 仍为 v1.17.1。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Fb12c43c34f4d65acd51dc665f2def2203cd9ac19 支持 `wasm32-unknown-unknown`、`wasm32-wasi`\n  * 存在一些 minor 限制；详情请参阅 https:\u002F\u002Fort.pyke.io\u002Fsetup\u002Fwebassembly。\n  * **感谢 Yunho Cho 的赞助，使这一功能成为可能！** 如果您也想支持我们，欢迎通过 [Open Collective](https:\u002F\u002Fopencollective.com\u002Fpyke-osai) 进行捐助 💖\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Fcedeb55909c074a5f063ba94ec6f5ca10124a2dd 调整了专用值的 `upcast` 和 `downcast` 函数名称，以更准确地反映其实际含义（感谢 [@\u002Fmessense](https:\u002F\u002Fgithub.com\u002Fmessense) 指出此问题！）\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Fde3bca46ff8bf6d57fc9645b52daafa84128d6d2 修复了自定义算子导致的段错误。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F681da43965eb9a7bbce06cea1a94b1a1497686a9 修复了与较旧版本 `rustc` 的兼容性问题。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F63a1818bb940b1d409367ca49ddacb383bf4ca16 允许将 `ValueRefMut` 作为会话输入。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F83838795b941129ee5347eabd25e53e89d4de68a 添加了一个函数，用于从原始设备指针创建张量，从而可以直接从 CUDA 缓冲区创建张量。\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F4af33b16b09f9d6451783ef51102a535d445bcb1 将 `ort-sys` 重新导出为 `ort::sys`。\n\n\u003Chr \u002F>\n\n如果您对本次发布有任何疑问，欢迎随时联系我们：\n- [Discord: `#💬｜ort-discussions`](https:\u002F\u002Fdiscord.gg\u002FuQtsNu2xMa)\n- [GitHub Discussions](https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fdiscussions)\n\n喜欢 `ort` 吗？不妨考虑通过 [Open Collective](https:\u002F\u002Fopencollective.com\u002Fpyke-osai) 支持我们 💖\n\n❤️💚💙💛","2024-04-27T00:19:35",{"id":206,"version":207,"summary_zh":208,"released_at":209},108882,"v2.0.0-rc.1","## Value specialization\r\nThe `Value` struct has been refactored into multiple strongly-typed structs: `Tensor\u003CT>`, `Map\u003CK, V>`, and `Sequence\u003CT>`, and their type-erased variants: `DynTensor`, `DynMap`, and `DynSequence`.\r\n\r\nValues returned by session inference are now `DynValue`s, which behave exactly the same as `Value` in previous versions.\r\n\r\nTensors created from Rust, like via the new `Tensor::new` function, can be directly and infallibly extracted into its underlying data via `extract_tensor` (no `try_`):\r\n```rs\r\nlet allocator = Allocator::new(&session, MemoryInfo::new(AllocationDevice::CUDAPinned, 0, AllocatorType::Device, MemoryType::CPUInput)?)?;\r\nlet tensor = Tensor::\u003Cf32>::new(&allocator, [1, 128, 128, 3])?;\r\n\r\nlet array = tensor.extract_array();\r\n\u002F\u002F no need to specify type or handle errors - Tensor\u003Cf32> can only extract into an f32 ArrayView\r\n```\r\n\r\nYou can still extract tensors, maps, or sequence values normally from a `DynValue` using `try_extract_*`:\r\n```rs\r\nlet generated_tokens: ArrayViewD\u003Cf32> = outputs[\"output1\"].try_extract_tensor()?;\r\n```\r\n\r\n`DynValue` can be `upcast()`ed to the more specialized types, like `DynMap` or `Tensor\u003CT>`:\r\n```rs\r\nlet tensor: Tensor\u003Cf32> = value.upcast()?;\r\nlet map: DynMap = value.upcast()?;\r\n```\r\n\r\nSimilarly, a strongly-typed value like `Tensor\u003CT>` can be downcast back into a `DynValue` or `DynTensor`.\r\n```rs\r\nlet dyn_tensor: DynTensor = tensor.downcast();\r\nlet dyn_value: DynValue = tensor.into_dyn();\r\n```\r\n\r\n## Tensor extraction directly returns an `ArrayView`\r\n`extract_tensor` (and now `try_extract_tensor`) now return an `ndarray::ArrayView` directly, instead of putting it behind the old `ort::Tensor\u003CT>` type (not to be confused with the new specialized value type). This means you don't have to `.view()` on the result:\r\n```diff\r\n-let generated_tokens: Tensor\u003Cf32> = outputs[\"output1\"].extract_tensor()?;\r\n-let generated_tokens = generated_tokens.view();\r\n+let generated_tokens: ArrayViewD\u003Cf32> = outputs[\"output1\"].try_extract_tensor()?;\r\n```\r\n\r\n## Full support for sequence & map values\r\nYou can now construct and extract `Sequence`\u002F`Map` values.\r\n\r\n## Value views\r\nYou can now obtain a view of any `Value` via the new `view()` and `view_mut()` functions, which operate similar to `ndarray`'s own view system. These views can also now be passed into session inputs.\r\n\r\n## Mutable tensor extraction\r\nYou can extract a mutable `ArrayViewMut` or `&mut [T]` from a mutable reference to a tensor.\r\n```rs\r\nlet (raw_shape, raw_data) = tensor.extract_raw_tensor_mut();\r\n```\r\n\r\n## Device-allocated tensors\r\nYou can now create a tensor on device memory with `Tensor::new` & an allocator:\r\n\r\n```rs\r\nlet allocator = Allocator::new(&session, MemoryInfo::new(AllocationDevice::CUDAPinned, 0, AllocatorType::Device, MemoryType::CPUInput)?)?;\r\nlet tensor = Tensor::\u003Cf32>::new(&allocator, [1, 128, 128, 3])?;\r\n```\r\n\r\nThe data will be allocated by the device specified by the allocator. You can then use the new mutable tensor extraction to modify the tensor's data.\r\n\r\n## What if custom operators were 🚀 blazingly 🔥 fast 🦀?\r\nYou can now write custom operator kernels in Rust. Check out the [`custom-ops` example](https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Ftree\u002Fmain\u002Fexamples\u002Fcustom-ops).\r\n\r\n## Custom operator library feature change\r\nSince custom operators can now be written completely in Rust, the old `custom-ops` feature, which enabled loading custom operators from an external dynamic library, has been renamed to `operator-libraries`.\r\n\r\nAdditionally, `Session::with_custom_ops_lib` has been renamed to `Session::with_operator_library`, and the confusingly named `Session::with_enable_custom_ops` (which does not enable custom operators in general, but rather attempts to load [`onnxruntime-extensions`](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fonnxruntime-extensions)) has been updated to `Session::with_extensions` to reflect its actual behavior.\r\n\r\n## Asynchronous inference\r\n`Session` introduces a new `run_async` method which returns inference results via a future. It's also cancel-safe, so you can simply cancel inference with something like `tokio::select!` or `tokio::time::timeout`.\r\n\r\n\u003Chr \u002F>\r\n\r\nIf you have any questions about this release, we're here to help:\r\n- [Discord: `#💬｜ort-discussions`](https:\u002F\u002Fdiscord.gg\u002FuQtsNu2xMa)\r\n- [GitHub Discussions](https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fdiscussions)\r\n\r\nLove `ort`? Consider [supporting us on Open Collective](https:\u002F\u002Fopencollective.com\u002Fpyke-osai) 💖\r\n\r\n❤️💚💙💛","2024-03-28T01:32:24",{"id":211,"version":212,"summary_zh":213,"released_at":214},108883,"v2.0.0-alpha.4","## Features\r\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Faf97600869a07917ecff2b6a8ba30d08df0fdfae Add support for extracting sequences & maps.\r\n\r\n## Changes\r\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F153d7afdb90018b9d5536317e36cb5037fd28a9f Remove built-in ONNX Model Zoo structs (note that you can still use `with_model_downloaded`, just now only with URLs)\r\n\r\nThis is likely one of the last alpha releases before v2.0 becomes stable 🎉\r\n\r\nLove `ort`? Consider [supporting us on Open Collective](https:\u002F\u002Fopencollective.com\u002Fpyke-osai) 💖\r\n\r\n❤️💚💙💛","2023-12-28T06:07:33",{"id":216,"version":217,"summary_zh":218,"released_at":219},108884,"v2.0.0-alpha.3","## Fixes\r\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F863f1f3d293f7d751aee2a3a8a0ce44f55b06c04 Pin Model Zoo URLs to the old repo structure, new models will be coming soon.\r\n\r\n## Features\r\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F32e7fabd993febead1d7e213e5373fc010628c89 Add `ort::init_from` on feature `load-dynamic` to set the path to the dylib at runtime.\r\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F52559e49da6963e12ab715d70dc47bb9b721489e Cache downloaded binaries & models across all projects. Please update to save my bandwidth =)\r\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F534a42a80c322ab5e327fdddbcf78fb8756bec98 Removed `with_log_level`. Instead, logging level will be controlled entirely by `tracing`.\r\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Fa9e146bd47d06a786258b60299fa5fdef9d0258c Implement `TryFrom\u003C(Vec\u003Ci64>, Arc\u003CBox\u003C[T]>>)>` for `Value`, making `default-features = false` more ergonomic\r\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F152f97f14f915b9eac2f2c58faa9e0ae28ecb9cd Add `Value::dtype()` to get the dtype of a tensor value.\r\n\r\n## Changes\r\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F32e7fabd993febead1d7e213e5373fc010628c89 Remove the dependency on `once_cell`.\r\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Facfa7826e7c390cbebbcb5668e736980279f7c55 Remove the `ORT_STRATEGY` environment variable. No need to specify `ORT_STRATEGY=system` anymore, you only need to set `ORT_LIB_LOCATION`.\r\n\r\nLove `ort`? Consider [supporting us on Open Collective](https:\u002F\u002Fopencollective.com\u002Fpyke-osai) 💖\r\n\r\n❤️💚💙💛","2023-12-15T23:51:24",{"id":221,"version":222,"summary_zh":223,"released_at":224},108885,"v2.0.0-alpha.2","## Fixes\r\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F6938da16bfa0f8267ca45a1cd5f0e7128f8c1140 Fix compilation on Windows in some cases when using pyke binaries by linking to DirectML dependencies.\r\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F2373ec50c71262245ea57c5340968f6b71b14cbd Fix linking for Android. (#121)\r\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Fb04a964e992691091a5ae360d4ce2dc0719557bc Fix linking for iOS and add profile option (#121)\r\n\r\n## Features\r\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F30360eb1cdcb65423826a7dd5659c1a4f7a16b9a Update binaries to ONNX Runtime v1.16.3 - compile Linux libraries on Ubuntu 20.04 to fix glibc issues. \r\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F9ed222fbac54da014430f08a47259f75fde0c2af Make XNNPACK & ArmNN structs public\r\n\r\nLove `ort`? Consider [supporting us on Open Collective](https:\u002F\u002Fopencollective.com\u002Fpyke-osai) 💖\r\n\r\n❤️💚💙💛","2023-11-28T04:57:25",{"id":226,"version":227,"summary_zh":228,"released_at":229},108886,"v2.0.0-alpha.1","This is the first alpha release for `ort` v2.0. This update overhauls the API, improves performance, fixes bugs, and makes `ort` simpler to use than ever before.\r\n\r\nOur shiny new website will help you migrate: https:\u002F\u002Fort.pyke.io\u002Fmigrating\u002Fv2\r\n\r\nStuck? We're here to help:\r\n- [Discord: `#💬｜ort-discussions`](https:\u002F\u002Fdiscord.gg\u002FuQtsNu2xMa)\r\n- [GitHub Discussions](https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fdiscussions)\r\n\r\nA huge thank you to those who contributed to this release: [Ben Harris](https:\u002F\u002Fgithub.com\u002Fbharrisau), [Ivan Krivosheev](https:\u002F\u002Fgithub.com\u002Fikrivosheev), [Rui He](https:\u002F\u002Fgithub.com\u002Fruihe774), [Andrea Corradi](https:\u002F\u002Fgithub.com\u002Facrrd), & [Lenny](https:\u002F\u002Fgithub.com\u002FJewishLewish)\r\n\r\nLove `ort`? Consider [supporting us on Open Collective](https:\u002F\u002Fopencollective.com\u002Fpyke-osai) 💖\r\n\r\n❤️💚💙💛","2023-11-22T16:29:57",{"id":231,"version":232,"summary_zh":233,"released_at":234},108887,"v1.16.3","## Changes\r\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Fe5f48ca811639591159854dadc04ca2f5cbe9877 Fixes a segfault that can occur when explicitly registering the CPU execution provider.","2023-11-12T16:29:39",{"id":236,"version":237,"summary_zh":238,"released_at":239},108888,"v1.16.2","## Changes\r\n\r\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F3b23cea2975a9e8eb187899ec4c48a236e0745f7 Fix usage of TensorRT execution provider, part 2","2023-10-07T19:34:50",{"id":241,"version":242,"summary_zh":243,"released_at":244},108889,"v1.16.1","## Changes\r\n\r\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F99c5d43364aa0b55ba523c52d7db7a74acf515bd Fix build on ARM targets.","2023-10-05T14:47:53",{"id":246,"version":247,"summary_zh":248,"released_at":249},108890,"v1.16.0","## Changes\r\n\r\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002Fd28e8ba3d58e4e9759ae43e490948172d0758787 Update to ONNX Runtime v1.16.0","2023-10-03T17:31:45",{"id":251,"version":252,"summary_zh":253,"released_at":254},108891,"v1.15.5","💖 If you find `ort` useful, you can now [sponsor on Open Collective](https:\u002F\u002Fopencollective.com\u002Fpyke-osai) :)\r\n\r\n## Changes\r\n- https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort\u002Fcommit\u002F092907a5d2ddd7ec4c9340d2cddc04cb293e003d Add support for WASM targets","2023-09-29T22:32:54"]