Skip to content

Latest commit

 

History

History
430 lines (309 loc) · 13 KB

README_ja-JP.md

File metadata and controls

430 lines (309 loc) · 13 KB

AMchat

📝 目次

📖 紹介

AM (Advanced Mathematics) Chatは、数学知識、高等数学の問題、およびその解決策を統合した大規模言語モデルです。このモデルは、Mathと高等数学の問題とその分析を組み合わせたデータセットを使用し、InternLM2-Math-7Bモデルに基づいており、高等数学の問題を解決するために特別に設計されたxtunerで微調整されています。

このプロジェクトが役立つと思われる場合は、⭐ スターを付けて、より多くの人に知ってもらいましょう!

route

🚀 ニュース

[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 InternLM Challenge (Spring Split) | Innovation and Creativity Award.

[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. このプロジェクトをクローン
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. 設定ファイルを変更

GitHubのリポジトリでは、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/config2/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

# 最終的なマージ後のパラメータの場所
mkdir /root/math/config/work_dirs/hf_merge
export SAVE_PATH=/root/math/config/work_dirs/hf_merge

# パラメータマージを実行
xtuner convert merge \
    $NAME_OR_PATH_TO_LLM \
    $NAME_OR_PATH_TO_ADAPTER \
    $SAVE_PATH \
    --max-shard-size 2GB
  1. デモ
streamlit run web_demo.py --server.address=0.0.0.0 --server.port 7860

OpenXLabデプロイメント

OpenXLabでAMchatをデプロイするには、このリポジトリをフォークし、OpenXLabで新しいプロジェクトを作成し、フォークしたリポジトリを新しく作成したプロジェクトに関連付けるだけです。

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-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():
 # データセットのリストを選択   
 from .datasets.ceval.ceval_gen import ceval_datasets 
 # 結果を選択した形式で出力
#  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_policy4に変更し、上記のconfig内のパスを変更
  • 評価を開始!
python run.py configs/eval_turbomind.py -w 結果を保存するパス
  • 結果ファイルと評価データセットは、同じディレクトリのresultsで入手できます。

💕 謝辞

InternLM-tutorial

InternStudio

xtuner

InternLM-Math

🖊️ 引用

@misc{2024AMchat,
    title={AMchat: 高等数学の概念、演習問題、および解決策を統合した大規模言語モデル},
    author={AMchat Contributors},
    howpublished = {\url{https://github.com/AXYZdong/AMchat}},
    year={2024}
}

ライセンス

このプロジェクトは、Apache License 2.0の下でリリースされています。また、使用されるモデルとデータセットのライセンスにも従ってください。