Skip to content

AM (Advanced Mathematics) Chat is a large language model that integrates advanced mathematical knowledge, exercises in higher mathematics, and their solutions. AM (Advanced Mathematics) chat 高等数学大模型。一个集成数学知识和高等数学习题及其解答的大语言模型。

License

Notifications You must be signed in to change notification settings

AXYZdong/AMchat

Repository files navigation

AMchat 高等数学大模型

📝目录

📖 简介

AM (Advanced Mathematics) chat 是一个集成了数学知识和高等数学习题及其解答的大语言模型。该模型使用 Math 和高等数学习题及其解析融合的数据集,基于 InternLM2-Math-7B 模型,通过 xtuner 微调,专门设计用于解答高等数学问题。

如果你觉得这个项目对你有帮助,欢迎 ⭐ Star,让更多的人发现它!

route

🚀 News

[2024.08.09] 我们发布了Q8_0量化模型 AMchat-q8_0.gguf

[2024.06.23] InternLM2-Math-Plus-20B 模型微调

[2024.06.22] InternLM2-Math-Plus-1.8B 模型微调,开源小规模数据集

[2024.06.21] 更新README,InternLM2-Math-Plus-7B 模型微调

[2024.03.24] 2024浦源大模型系列挑战赛(春季赛)Top12,创新创意奖。

[2024.03.14] 模型上传至HuggingFace。

[2024.03.08] 完善了README,增加目录、技术路线。增加README_en-US.md。

[2024.02.06] 支持了Docker部署。

[2024.02.01] AMchat第一版部署上线 https://openxlab.org.cn/apps/detail/youngdon/AMchat 🚀

🛠️ 使用方法

快速开始

  1. 下载模型
从 ModelScope

参考 模型的下载

pip install modelscope
from modelscope.hub.snapshot_download import snapshot_download
model_dir = snapshot_download('yondong/AMchat', cache_dir='./')
从 OpenXLab

参考 下载模型

pip install openxlab
from openxlab.model import download
download(model_repo='youngdon/AMchat', 
        model_name='AMchat', output='./')
  1. 本地部署
git clone https://github.com/AXYZdong/AMchat.git
python start.py
  1. Docker部署
docker run -t -i --rm --gpus all -p 8501:8501 guidonsdocker/amchat:latest bash start.sh

重新训练

环境搭建

  1. clone 本项目
git clone https://github.com/AXYZdong/AMchat.git
cd AMchat
  1. 创建虚拟环境
conda env create -f environment.yml
conda activate AMchat
pip install xtuner

XTuner微调

  1. 准备配置文件
# 列出所有内置配置
xtuner list-cfg

mkdir -p /root/math/data
mkdir /root/math/config && cd /root/math/config

xtuner copy-cfg internlm2_chat_7b_qlora_oasst1_e3 .
  1. 模型下载
mkdir -p /root/math/model

download.py

import torch
from modelscope import snapshot_download, AutoModel, AutoTokenizer
import os
model_dir = snapshot_download('Shanghai_AI_Laboratory/internlm2-math-7b', cache_dir='/root/math/model')
  1. 修改配置文件

仓库中 config 文件夹下已经提供了一个微调的配置文件,可以参考 internlm_chat_7b_qlora_oasst1_e3_copy.py。 可以直接使用,注意修改 pretrained_model_name_or_pathdata_path 的路径。

cd /root/math/config
vim internlm_chat_7b_qlora_oasst1_e3_copy.py
# 修改模型为本地路径
- pretrained_model_name_or_path = 'internlm/internlm-chat-7b'
+ pretrained_model_name_or_path = './internlm2-math-7b'

# 修改训练数据集为本地路径
- data_path = 'timdettmers/openassistant-guanaco'
+ data_path = './data'
  1. 开始微调
xtuner train /root/math/config/internlm2_chat_7b_qlora_oasst1_e3_copy.py
  1. PTH 模型转换为 HuggingFace 模型
mkdir hf
export MKL_SERVICE_FORCE_INTEL=1
export MKL_THREADING_LAYER=GNU
xtuner convert pth_to_hf ./internlm2_chat_7b_qlora_oasst1_e3_copy.py \
                         ./work_dirs/internlm2_chat_7b_qlora_oasst1_e3_copy/epoch_3.pth \
                         ./hf
  1. HuggingFace 模型合并到大语言模型
# 原始模型参数存放的位置
export NAME_OR_PATH_TO_LLM=/root/math/model/Shanghai_AI_Laboratory/internlm2-math-7b

# Hugging Face格式参数存放的位置
export NAME_OR_PATH_TO_ADAPTER=/root/math/config/hf

# 最终Merge后的参数存放的位置
mkdir /root/math/config/work_dirs/hf_merge
export SAVE_PATH=/root/math/config/work_dirs/hf_merge

# 执行参数Merge
xtuner convert merge \
    $NAME_OR_PATH_TO_LLM \
    $NAME_OR_PATH_TO_ADAPTER \
    $SAVE_PATH \
    --max-shard-size 2GB
  1. Demo
streamlit run web_demo.py --server.address=0.0.0.0 --server.port 7860

OpenXLab应用部署

仅需要 Fork 本仓库,然后在 OpenXLab 上创建一个新的项目,将 Fork 的仓库与新建的项目关联,即可在 OpenXLab 上部署 AMchat。

Demo

  • AMchat 与 InternLM2-Math-7B 在积分问题上对于同一问题的解答。 AMchat 回答正确,InternLM2-Math-7B 回答错误。

Demo Demo

LMDeploy量化

  • 首先安装LMDeploy
pip install -U lmdeploy
  • 然后转换模型为turbomind格式

--dst-path: 可以指定转换后的模型存储位置。

lmdeploy convert internlm2-chat-7b  要转化的模型地址 --dst-path 转换后的模型地址
  • LMDeploy Chat 对话
lmdeploy chat turbomind 转换后的turbomind模型地址

OpenCompass评测

  • 安装 OpenCompass
git clone https://github.com/open-compass/opencompass
cd opencompass
pip install -e .
  • 下载解压数据集
cp /share/temp/datasets/OpenCompassData-core-20231110.zip /root/opencompass/
unzip OpenCompassData-core-20231110.zip
  • 评测启动!
python run.py \
    --datasets math_gen \
    --hf-path 模型地址 \
    --tokenizer-path tokenizer地址 \
    --tokenizer-kwargs padding_side='left' truncation='left'     trust_remote_code=True \
    --model-kwargs device_map='auto' trust_remote_code=True \
    --max-seq-len 2048 \
    --max-out-len 16 \
    --batch-size 2  \
    --num-gpus 1 \
    --debug

LMDeploy & OpenCompass量化以及量化评测

W4 量化评测
  • W4量化
lmdeploy lite auto_awq 要量化的模型地址 --work-dir 量化后的模型地址
  • 转化为TurbMind
lmdeploy convert internlm2-chat-7b 量化后的模型地址  --model-format awq --group-size 128 --dst-path 转换后的模型地址
  • 评测config编写
from mmengine.config import read_base
from opencompass.models.turbomind import TurboMindModel

with read_base():
 # choose a list of datasets   
 from .datasets.ceval.ceval_gen import ceval_datasets 
 # and output the results in a choosen format
#  from .summarizers.medium import summarizer

datasets = [*ceval_datasets]

internlm2_chat_7b = dict(
     type=TurboMindModel,
     abbr='internlm2-chat-7b-turbomind',
     path='转换后的模型地址',
     engine_config=dict(session_len=512,
         max_batch_size=2,
         rope_scaling_factor=1.0),
     gen_config=dict(top_k=1,
         top_p=0.8,
         temperature=1.0,
         max_new_tokens=100),
     max_out_len=100,
     max_seq_len=512,
     batch_size=2,
     concurrency=1,
     #  meta_template=internlm_meta_template,
     run_cfg=dict(num_gpus=1, num_procs=1),
)
models = [internlm2_chat_7b]
  • 评测启动!
python run.py configs/eval_turbomind.py -w 指定结果保存路径
KV Cache 量化评测
  • 转换为TurbMind
lmdeploy convert internlm2-chat-7b  模型路径 --dst-path 转换后模型路径
  • 计算与获得量化参数
# 计算
lmdeploy lite calibrate 模型路径 --calib-dataset 'ptb' --calib-samples 128 --calib-seqlen 2048 --work-dir 参数保存路径
# 获取量化参数
lmdeploy lite kv_qparams 参数保存路径 转换后模型路径/triton_models/weights/ --num-tp 1
  • 更改quant_policy改成4,更改上述config里面的路径
  • 评测启动!
python run.py configs/eval_turbomind.py -w 结果保存路径
  • 结果文件与评测数据集可在同目录文件results中获取。

💕 致谢

项目成员

  • 张友东-项目负责人 (Datawhale成员 书生·浦语实战营助教 负责模型训练,OpenXlab应用部署,数据收集,RAG内容整理,InternLM2-Math-Plus微调规划)
  • 宋志学-项目负责人 (Datawhale成员 书生·浦语实战营助教 负责项目规划,RAG框架)
  • 肖鸿儒-项目负责人 (Datawhale成员 同济大学 书生·浦语实战营助教 负责数据收集,数据集整理及增强,模型量化与评测,RAG推理与验证)
  • 程宏 (书生·浦语实战营助教&Datawhale鲸英助教 InternLM2-Math-Plus-7B 模型微调&部署)
  • 莫宝琪(玉柴工程研究院 InternLM2-Math-Plus-1.8B 模型微调)
  • 陈辅元(甘肃政法大学 InternLM2-Math-Plus-20B 模型微调)
  • 龚鹤扬 (中国科学技术大学统计学博士 LMDeploy 模型量化)
  • 揭熔阳 (Datawhale成员 哈尔滨工业大学(威海) 数据收集 RAG内容整理)
  • 彭琛 (Datawhale成员 数据收集)
  • 王新茗 (数据收集)
  • 刘志文 (Datawhale成员 山东女子学院 数据收集)
  • 王睿玥 (Northeastern University 数据收集)
  • 陈逸涵 (Datawhale成员 北京邮电大学 数据收集)
  • guidons (东北大学 docker部署)
  • eltociear (Board member at I-Tecnology Co., Ltd.,增加 Japanese README)

特别鸣谢

感谢上海人工智能实验室组织的 书生·浦语实战营 学习活动~

感谢 OpenXLab 对项目部署的算力支持~

感谢 浦语小助手 对项目的支持~

感谢上海人工智能实验室推出的书生·浦语大模型实战营,为我们的项目提供宝贵的技术指导和强大的算力支持!

InternLM-tutorialInternStudioxtunerInternLM-Math

🖊️ Citation

@misc{2024AMchat,
    title={AMchat: A large language model integrating advanced math concepts, exercises, and solutions},
    author={AMchat Contributors},
    howpublished = {\url{https://github.com/AXYZdong/AMchat}},
    year={2024}
}

开源许可证

该项目采用 Apache License 2.0 开源许可证 同时,请遵守所使用的模型与数据集的许可证。

About

AM (Advanced Mathematics) Chat is a large language model that integrates advanced mathematical knowledge, exercises in higher mathematics, and their solutions. AM (Advanced Mathematics) chat 高等数学大模型。一个集成数学知识和高等数学习题及其解答的大语言模型。

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages