# openmind
**Repository Path**: ascend/openmind
## Basic Information
- **Project Name**: openmind
- **Description**: openMind是一个大模型微调套件,通过命令行接口或SDK原生支持在昇腾NPU上进行微调、推理、评估和部署。
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 28
- **Forks**: 26
- **Created**: 2025-01-16
- **Last Updated**: 2025-06-27
## Categories & Tags
**Categories**: machine-learning
**Tags**: None
## README
---
## 📝 简介
openMind Library是一个大模型微调套件,通过命令行接口或SDK原生支持在昇腾NPU上进行微调、推理、评估和部署。通过简化使用流程,充分利用NPU的独特优势,为大模型应用提供高效、可扩展的解决方案。
**为什么使用 openMind Library?**
基于Transformers框架,openMind Library实现了高效的微调流程。它集成了PyTorch生态中常用的工具库功能,提供数据预处理、权重加载、低参微调、量化适配以及训练跟踪等全流程的一键式解决方案。此外,库内融合了针对昇腾NPU的优化算子,可大幅提升模型训练效率。
openMind Library提供了统一的Pipeline SDK,提供更快速、更高效的推理体验。
模型部署方面,openMind Library基于LMDeploy和MindIE,提供多后端部署支持,极大地简化了部署流程,使得模型部署更加便捷。
openMind Library目前支持的特性如下:
- 模型类型:支持Qwen2、Qwen2.5、Qwen1.5、Internlm2、Internlm3、Llama3.1、Glm4、Skywork等系列模型
- 微调训练:SFT训练
- 混合精度训练: BF16、FP16
- 高效微调:LoRA微调、DoRA微调、PiSSA微调、4bit QLoRA微调
- 分布式训练:native DDP、DeepSpeed
- 微调加速:npu_fusion_attention融合算子、npu_rms_norm融合算子、RoPE融合算子、SwiGLU融合算子
- 训练监控:SwanLab
- 多轮对话:Transformers/Mindformers多backend
- 推理:Transformers/Diffusers多backend、text-generation/text-to-image多任务
- 部署:LMDeploy、MindIE
- 评估:lm_eval
---
## 🔥 DeepSeek功能支持
| 模型蒸馏 | DeepSeek-R1-Distill系列LLM模型微调 | Open-R1复现 |
|:-----------------------------------------------------|:-----------------------------------------------------------------------------|:----------------------------------------------------|
| 在研中,详情请见[模型蒸馏](./docs/zh/best_practice/deepseek_r1.md#模型蒸馏)章节 | 在研中,详情请见[DeepSeek-R1-Distill模型微调](./docs/zh/best_practice/deepseek_r1.md#deepseek-r1-distill模型微调)章节 | 在研中,详情请见[基于昇腾NPU复现open-r1](examples/research/open_r1/README.md)文档 |
---
## 🌟 项目特色
openMind Library支持QLoRA,融合算子等训练加速手段,帮助您减少显存开销,提升微调训练速度。
 |
 |
Qwen2.5-7B Full/LoRA/QLoRA显存开销
npu=8, per_device_train_batch_size=1, max_length=1024
|
Qwen2.5-7B Full/LoRA性能对比
npu=8, max_length=1024, train_samples_per_second
|
---
## 🚀 更新日志
- 2025/02/20:新增DoRA低参微调算法、新增SwiGLU和RoPE融合算子。
- 2025/02/06:新增LLM二次预训练、新增融合算子SDK支持、数据集支持txt/csv/parquet格式。
- 2025/01/17:openMind Library 1.0.0版本发布,支持cli命令启动微调、LoRA权重合并、SwanLab训练监控以及LMDeploy/MindIE部署。
---
## ⚙️ 软件版本配套
openMind Library master版本配套说明如下,目前仅支持Linux系统。
| 产品名称 | 产品版本 | 获取链接 |
|---------------------|----------------------|------------------------------------------------------------------------------------------------------------------------|
| MindSpore | 2.4.0 | https://www.mindspore.cn/versions#2.4.0 |
| PyTorch | 2.1.0 | https://download.pytorch.org/whl/torch/ |
| PyTorch-NPU | 6.0.rc3-pytorch2.1.0 | https://gitee.com/ascend/pytorch/releases/tag/v6.0.rc3-pytorch2.1.0 |
| CANN | 8.0.RC3.beta1 | https://www.hiascend.com/developer/download/community/result?module=cann&cann=8.0.RC3.beta1 |
| HDK | 1.0.26.alpha | https://www.hiascend.com/hardware/firmware-drivers/community?product=6&model=27&cann=8.0.RC3.alpha003&driver=1.0.26.alpha |
| MindSpeed(可选) | 1.0.RC2/ | https://gitee.com/ascend/MindSpeed/tree/1.0.RC2/ |
| Megatron-LM(可选) | 0.6.0 | https://github.com/NVIDIA/Megatron-LM/releases/tag/core_v0.6.0 |
| MindSpore NLP(可选) | 0.4.1 | https://github.com/mindspore-lab/mindnlp/tree/v0.4.1 |
| silicondiff_npu(可选) | 2.1.0.post3 | https://pypi.org/project/silicondiff-npu/2.1.0.post3 |
| mindone(可选) | 0.2.0 | https://gitee.com/mindspore-lab/mindone/tree/v0.2.0/ |
---
配套版本安装,推荐用户参考[安装](./docs/zh/install.md)文档,以确保顺利完成固件和驱动的配置。
## 🛠️ 安装
openMind Library支持PyTorch和MindSpore双框架,您可以根据需求选择安装对应框架和依赖。请注意**不要同时安装双框架**。您可以直接使用pip install openmind的形式安装源码,或者git clone获取源码手动安装以使用更多示例脚本。
- 使用pip进行安装:
```shell
# 不安装框架,仅安装openMind Library
pip install openmind
# aarch64环境下安装PyTorch框架及其框架
pip install openmind[pt]
# x86环境下安装PyTorch框架及其框架
pip install openmind[pt] --extra-index-url https://download.pytorch.org/whl/cpu
# MindSpore框架及其依赖
pip install openmind[ms]
```
- 从源代码安装:
```shell
git clone https://gitee.com/ascend/openmind.git
cd openmind
# 不安装框架,仅安装openMind Library
pip install -e .
# aarch64环境下安装PyTorch框架及其框架
pip install -e .[pt]
# x86环境下安装PyTorch框架及其框架
pip install -e .[pt] --extra-index-url https://download.pytorch.org/whl/cpu
# MindSpore框架及其依赖
pip install -e .[ms]
```
关于openMind Library的安装步骤,推荐用户参考[安装](./docs/zh/install.md)文档,以确保顺利并正确地完成安装过程。
---
## 🧰 快速上手
openMind Library支持通过cli或SDK方式启动微调、推理、评估、多轮对话和部署。运行示例前请初始化CANN环境变量:
```shell
# 默认安装路径,如有必要请修改到特定安装路径
source /usr/local/Ascend/ascend-toolkit/set_env.sh
```
### 微调
您可以在openMind源码目录下,在终端中输入以下命令启动微调示例,快速拉起全参/LoRA/DoRA/QLoRA微调。
#### 全参微调
```shell
openmind-cli train examples/features/train/train_sft_full.yaml
```
#### LoRA微调
```shell
openmind-cli train examples/features/train/train_sft_lora.yaml
```
#### DoRA微调
```shell
openmind-cli train examples/features/train/train_sft_dora.yaml
```
#### PiSSA微调
```shell
openmind-cli train examples/features/train/train_sft_pissa.yaml
```
#### QLoRA微调
QLoRA微调启动前,需要手动安装bitandbytes仓,请参考[QLoRA](./docs/zh/basic_tutorial/train/lora_and_merge.md#QLoRA
)章节中的安装指引完成前置配置。
```shell
openmind-cli train examples/features/train/train_sft_qlora.yaml
```
#### LoRA权重合并
基于LoRA等低参数微调方法训练完成后,系统将保存适配器权重。通过openMind Library,您可以使用yaml配置文件或命令行传参方式快速完成权重合并操作,便于后续模型部署与应用。
```shell
openmind-cli export examples/features/export/merge_lora_qwen2_0.5b.yaml
```
#### NPU亲和算子优化
openMind Library目前集成了多种融合算子,可以显著提升模型微调训练性能。您可以参考[基础教程-融合算子使能](./docs/zh/basic_tutorial/fused_ops.md)文档使用该功能提升训练速度。
训练功能完整说明(含数据处理、参数配置及启动方式等)请参阅[基础教程-模型训练](docs/zh/basic_tutorial/train/overview.md)文档。
### 推理
openMind Library支持基于cli命令快速启动文本生成推理。
```shell
openmind-cli run text-generation --framework pt --input "What is AI?"
```
`openmind-cli run`也支持文生图推理。
```shell
openmind-cli run text-to-image --framework pt --backend diffusers --input "masterpiece, best quality, Cute dragon creature, pokemon style, night, moonlight, dim lighting"
```
如果您需要集成openMind Library的推理功能,或者有其他使用需求,您也可以使用对应的SDK接口进行调用。
```shell
from openmind import pipeline
pipe = pipeline(
task="text-generation",
model="Baichuan/Baichuan2_7b_chat_pt",
framework="pt",
backend="transformers",
trust_remote_code=True,
device="npu:0",
)
output = pipe("Give three tips for staying healthy.")
print(output)
```
更多推理功能使用,您可以参考[基础教程-模型推理](./docs/zh/basic_tutorial/pipeline.md)文档和[单轮推理](./docs/zh/basic_tutorial/cli.md#单轮推理)章节。
### 评估
openMind Library集成了lm_eval进行模型评估推理。您可以调用`openmind-cli eval`命令,从魔乐社区下载评估数据集完成评估。
```shell
openmind-cli eval --model Baichuan/Baichuan2_7b_chat_pt --device npu:0 --tasks arithmetic --batch_size 64
```
更多使用方式和支持的评估数据集列表,请查看[大语言模型评估](./docs/zh/basic_tutorial/cli.md#大语言模型评估)章节。
### 多轮对话
openMind Library集成了transformers和Mindformers启动多轮对话。您可以调用`openmind-cli chat`命令,一键式快速启动对话服务。
```shell
openmind-cli chat --model_id Qwen2.5-7B-Chat --device 0
```
更多运行方式您可以查看[多轮对话](./docs/zh/basic_tutorial/cli.md#多轮对话)章节。
### 部署
openMind Library支持了LMDeploy和MindIE部署模型服务。您可以使用以下命令运行示例,完成服务部署。
#### 基于LMDeploy部署Qwen2-7B模型
在您基于LMDeploy部署模型之前,请参考[LMDeploy](./docs/zh/basic_tutorial/cli.md#lmdeploy)章节,进行部署前的环境准备。
```shell
openmind-cli deploy AI-Research/Qwen2-7B --backend lmdeploy
```
#### 调用API接口完成推理
```shell
curl http://127.0.0.1:1025/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{"model": "AI-Research/Qwen2-7B", "messages": "推荐一个海边度假的地方"}'
```
更多deploy接口使用和MindIE后端使用,请查看[模型部署](./docs/zh/basic_tutorial/cli.md#模型部署)章节。
---
## 🔧 版本维护
### 分支维护策略
openMind版本分支的维护阶段如下:
| 状态 | 时间 | 说明 |
| ------------------- | -------- | ------------------------------------------------ |
| 计划 | 1—3 个月 | 计划特性 |
| 开发 | 3 个月 | 开发特性|
| 维护 | 6-12个月 | 常规分支维护6个月, 长期支持分支维护12个月。对重大BUG进行修复,不合入新特性,并视BUG的影响发布补丁版本 |
| 生命周期终止(EOL) | N/A | 分支不再接受任何修改 |
### openMind版本维护策略
| openMind版本 | 维护策略 | 当前状态 | 发布时间 | 后续状态 | EOL日期 |
| ------------- | ------- | ------- | -------- | ------- | ------- |
| 1.1.0 | 常规分支 | 开发 | 2025/03/31 | 预计发布于3月31日 | 2025/09/30 |
| 1.0.0 | 常规分支 | 维护 | 2025/01/17 | - | 2025/07/17 |
| 0.9.1 | 预研分支 | 不维护 | 2025/01/17 | - | - |
| 0.9 | 预研分支 | 不维护 | 2025/01/17 | - | - |
| 0.8 | 预研分支 | 不维护 | 2025/01/17 | - | - |
| 0.7 | 预研分支 | 不维护 | 2025/01/17 | - | - |
---
## 📇 指南链接
我们也为您提供了更详细的指南文档,您可以根据以下链接跳转查询对应功能明细。
- [安装](docs/zh/install.md)
- [版本说明](docs/zh/release_note.md)
- [基础教程-数据加载](docs/zh/basic_tutorial/load_dataset.md)
- [基础教程-命令行接口](docs/zh/basic_tutorial/cli.md)
- [基础教程-模型训练](docs/zh/basic_tutorial/train/overview.md)
- [基础教程-模型推理](docs/zh/basic_tutorial/pipeline.md)
- [基础教程-模型评估](docs/zh/basic_tutorial/metrics.md)
- [基础教程-模型部署](docs/zh/basic_tutorial/deploy.md)
- [基础教程-融合算子使能](docs/zh/basic_tutorial/fused_ops.md)
- [开发者教程-故障处理](docs/zh/developer_tutorial/trouble_shooting.md)
- [开发者教程-贡献指南](docs/zh/developer_tutorial/contribution.md)
- [API接口](docs/zh/api_reference/apis)
---
## 📚 贡献
1. 在上传PR之前,请确保所有测试都通过。首先在本地运行如下命令。
```shell
# The scripts below run on system default python version by default. If you want to use other python version, set the env
# PY_VERSION. For example, `PY_VERSION=3.8 ./ci/lint.sh`
# Lint check
./ci/lint.sh
# Unit test
./ci/unit_test.sh
# Functional test, Please generate the HUB_TOKEN from openmind by yourself and use it privatelly.
HUB_TOKEN=your_hub_token ./ci/functional_test.sh
```
2. 当您推送或更新PR(Pull Request)后,系统将自动触发CI(持续集成)构建和测试流程。若所有CI构建和测试均顺利通过,`ci-pipeline-passed`标记将自动添加到您的PR中。然而,若出现CI故障,您可以通过点击CI日志链接来详细查看失败原因,并在本地进行必要的修复。一旦您完成了修复并希望重新运行CI作业,只需在PR中留下评论`compile`即可。
3. 详细贡献指南请参考[开发者教程-贡献指南](docs/zh/developer_tutorial/contribution.md)。
---
## 🔒 安全声明
为保障使用过程安全,推荐用户参考[安全声明](./security_statement.md)了解相关安全信息,进行必要的安全加固。
---
## 📖 免责声明
### 致openMind Library使用者
1. openMind Library提供的模型仅供您用于非商业目的。
2. openMind Library仅提示性地向您建议可用于模型微调的数据集,华为不提供任何数据集,如您使用这些数据集进行训练,请您特别注意应遵守对应数据集的License,如您因使用数据集而产生侵权纠纷,华为不承担任何责任。
3. 如您在使用openMind Library过程中,发现任何问题(包括但不限于功能问题、合规问题),请在Gitee提交issue,我们将及时审视并解决。
### 致数据集所有者
如果您不希望您的数据集在openMind Library中被提及,或希望更新关于您的数据集的描述,请在Gitee提交issue,我们将根据您的issue要求删除或更新您的数据集描述。衷心感谢您对openMind Library的理解和贡献。
### 许可证
openMind Library使用木兰宽松许可证第2版(MulanPSL v2)。详见[License](http://license.coscl.org.cn/MulanPSL2)文件。