|
|
# 煤矿安全大模型——矿途智护者
|
|
|
|
|
|
## 项目背景
|
|
|
|
|
|
- 国家高度重视煤矿安全生产工作,提高从业人员的安全知识水平,是煤矿安全管理的重要基础。
|
|
|
- 安全管理领域积累了海量数据,但难以为安全决策所利用。
|
|
|
- 根据国家矿山安监局统计:90%以上煤矿事故都与人的不安全行为有关。
|
|
|
|
|
|
## 主要功能
|
|
|
|
|
|
- 支持煤矿安全领域常规题型解答,如:单选题、多选题、判断题、填空题等 (针对煤矿主要负责人及安管人员、煤矿各种作业人员)
|
|
|
- 支持针对安全规程规章制度、技术等文档内容回答(如《中华人民共和国矿山安全法》、《煤矿建设安全规程》)
|
|
|
- 支持煤矿历史事故案例,事故处理报告查询,提供事故原因详细分析、事故预防措施以及应急响应知识
|
|
|
|
|
|
## 创建环境
|
|
|
```shell
|
|
|
conda create -n CoalLLM python=3.10
|
|
|
conda activate CoalLLM
|
|
|
```
|
|
|
## 依赖包安装
|
|
|
```shell
|
|
|
pip install modelscope[framework] # 模型库
|
|
|
pip install py-data-juicer[sci] # 数据处理库
|
|
|
pip install ms-swift[llm] # 训练库
|
|
|
pip install ms-swift[eval] # 评测库
|
|
|
```
|
|
|
|
|
|
|
|
|
## 数据构建
|
|
|
|
|
|
输入如下命令,会在data目录下生成CoalQA_data.json
|
|
|
|
|
|
```shell
|
|
|
git clone https://gitlink.org.cn/yaosenJ/Coal_Mine_SAFETY.git
|
|
|
cd Coal_Mine_SAFETY/data_process
|
|
|
python Generate_QAdata.py ../data/CoalQA_data.json
|
|
|
```
|
|
|
|
|
|
CoalQA_data.json内容结构形如:
|
|
|
|
|
|
```json
|
|
|
[
|
|
|
{
|
|
|
"instruction": "请提供新建矿井立井井筒冻结法施工的具体要求。",
|
|
|
"output": "新建矿井立井井筒冻结法施工需要遵守以下要求:冻结深度必须穿过风化带延深至稳定的基岩10m以上,第一个冻结孔必须全孔取芯,钻孔时必须测定钻孔的方向和偏斜度,偏斜度超过规定时必须及时纠正,冻结管必须采用无缝钢管并焊接或螺纹连接,开始冻结后必须经常观察水文观测孔的水位变化,并在确定冻结壁已交圈后才能进行试挖。"
|
|
|
},
|
|
|
...
|
|
|
|
|
|
]
|
|
|
```
|
|
|
## 模型训练
|
|
|
安装 flash-attention 加快推理速度
|
|
|
```shell
|
|
|
pip install flash-attn --no-build-isolation
|
|
|
```
|
|
|
使用ms-swift训练模型
|
|
|
```shell
|
|
|
!CUDA_VISIBLE_DEVICES=0 swift sft \
|
|
|
--sft_type lora \
|
|
|
--model_type internlm2_5-7b-chat \
|
|
|
--model_id_or_path /root/share/new_models/Shanghai_AI_Laboratory/internlm2_5-7b-chat \
|
|
|
--dataset /root/Coal_Mine_SAFETY/data/data.json\
|
|
|
--system "你是一个煤矿安全领域的知识达人,你对相关煤矿安全规章规程制度、技术等文档非常熟悉。请你专业正确地解答用户想问的煤矿安全相关问题。" \
|
|
|
--dataset_test_ratio 0.01 \
|
|
|
--output_dir output \
|
|
|
--lora_target_modules ALL \
|
|
|
--lora_rank 8 \
|
|
|
--dtype bf16 \
|
|
|
--seed 42 \
|
|
|
--learning_rate 1e-4 \
|
|
|
--warmup_ratio 0.05 \
|
|
|
--max_length 2048 \
|
|
|
--batch_size 4 \
|
|
|
--eval_batch_size 4 \
|
|
|
--num_train_epochs 3 \
|
|
|
--gradient_accumulation_steps 4 \
|
|
|
--save_total_limit 5 \
|
|
|
--eval_steps 100 \
|
|
|
--save_steps 100
|
|
|
```
|
|
|
**显存占用**
|
|
|
|
|
|
<p align="center">
|
|
|
<br>
|
|
|
<img src="https://code.educoder.net/api/yaosenJ/CoalLLM/raw/img%2F%E6%98%BE%E5%AD%98%E5%8D%A0%E7%94%A8.png?ref=main"/>
|
|
|
<br>
|
|
|
</p>
|
|
|
|
|
|
**训练日志**
|
|
|
|
|
|
<p align="center">
|
|
|
<br>
|
|
|
<img src="https://code.educoder.net/api/yaosenJ/CoalLLM/raw/img%2Ftrain_log.png?ref=main"/>
|
|
|
<br>
|
|
|
</p>
|
|
|
|
|
|
## 使用evalscope评估模型
|
|
|
|
|
|
### 1. 自定义数据集评估
|
|
|
|
|
|
```shell
|
|
|
!CUDA_VISIBLE_DEVICES=0 swift eval \
|
|
|
--ckpt_dir /root/Coal_Mine_SAFETY/output/internlm2_5-7b-chat/v4-20240909-222741/checkpoint-1113 \
|
|
|
--eval_dataset no \
|
|
|
--infer_backend pt \
|
|
|
--eval_backend Native \
|
|
|
--eval_limit 10 \
|
|
|
--seed 42 \
|
|
|
--eval_batch_size 8 \
|
|
|
--custom_eval_config custom_eval_config.json \
|
|
|
--temperature 0.7 \
|
|
|
--top_k 20 \
|
|
|
--top_p 0.9
|
|
|
```
|
|
|
<p align="center">
|
|
|
<br>
|
|
|
<img src="https://code.educoder.net/api/yaosenJ/CoalLLM/raw/img%2F%E8%AF%84%E6%B5%8B.png?ref=main"/>
|
|
|
<br>
|
|
|
</p>
|
|
|
|
|
|
## 项目展示
|
|
|
|
|
|
<p align="center">
|
|
|
<br>
|
|
|
<img src="https://code.educoder.net/api/yaosenJ/CoalLLM/raw/img%2F%E5%9B%BE%E7%89%871.png?ref=main"/>
|
|
|
<br>
|
|
|
</p>
|
|
|
<p align="center">
|
|
|
<br>
|
|
|
<img src="https://code.educoder.net/api/yaosenJ/CoalLLM/raw/img%2F%E5%9B%BE%E7%89%874.png?ref=main"/>
|
|
|
<br>
|
|
|
</p>
|
|
|
<p align="center">
|
|
|
<br>
|
|
|
<img src="https://code.educoder.net/api/yaosenJ/CoalLLM/raw/img%2F%E5%9B%BE%E7%89%875.png?ref=main"/>
|
|
|
<br>
|
|
|
</p>
|
|
|
<p align="center">
|
|
|
<br>
|
|
|
<img src="https://code.educoder.net/api/yaosenJ/CoalLLM/raw/img%2F%E5%9B%BE%E7%89%876.png?ref=main"/>
|
|
|
<br>
|
|
|
</p> |