Giter Site home page Giter Site logo

axyzdong / amchat Goto Github PK

View Code? Open in Web Editor NEW
84.0 2.0 20.0 12.09 MB

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 高等数学大模型。一个集成数学知识和高等数学习题及其解答的大语言模型。

Home Page: https://openxlab.org.cn/apps/detail/youngdon/AMchat

License: Apache License 2.0

Python 100.00%
advanced-mathematics large-language-models llm math fine-tuning-llm gpt

amchat's Introduction

AMchat 高等数学大模型

📝目录

📖 简介

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

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

route

🚀 News

[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 -r requirements-raw.txt

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. 修改配置文件
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/config2/internlm2_chat_7b_qlora_oasst1_e3_copy.py
  1. PTH 模型转换为 HuggingFace 模型
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 MKL_SERVICE_FORCE_INTEL=1
export MKL_THREADING_LAYER='GNU'

# 原始模型参数存放的位置
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成员 书生·浦语实战营助教 负责项目规划,RAG框架)
  • 张友东-项目负责人 (Datawhale成员 书生·浦语实战营助教 模型训练,OpenXlab应用部署,数据收集,RAG内容整理)
  • 肖鸿儒-项目负责人 (Datawhale成员 同济大学 书生·浦语实战营助教 数据收集,数据集整理及增强,模型量化与评测,RAG推理与验证)
  • 揭熔阳 (Datawhale成员 哈尔滨工业大学(威海) 数据收集 RAG内容整理)
  • 彭琛(Datawhale成员 数据收集)
  • 王新茗 (数据收集)
  • 刘志文 (Datawhale成员 山东女子学院 数据收集)
  • 王睿玥 (Northeastern University 数据收集)
  • 陈逸涵 (Datawhale成员 北京邮电大学 数据收集)
  • guidons (东北大学 docker部署)

特别鸣谢

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

感谢 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 开源许可证 同时,请遵守所使用的模型与数据集的许可证。

amchat's People

Contributors

archimedesliu avatar axyzdong avatar guidons-master avatar hongru0306 avatar kmno4-zx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

amchat's Issues

agent

请问你们怎么使用、调用、设计agent的?

关于数据处理

大佬好,你的工作很惊艳,我对此很感兴趣。能否请教一下细节问题?
1.您大概用了多少数据进行lora微调呢?
2.想了解一下下图部分具体是怎么做的呢?
image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.