cmkj-gpt / README_JA.md
SevenQin's picture
Upload folder using huggingface_hub
4450c0d

A newer version of the Gradio SDK is available: 5.9.1

Upgrade

äž­æ–‡    English    æ—¥æœ¬èªž




Qwen-7B 🀖 | 🀗   Qwen-7B-Chat 🀖 | 🀗  | Qwen-7B-Chat-Int4 🀗
WeChat   |   Discord   |   Demo    Report


日本語ドキュメントメンテナヌ: Ikko Eltociear Ashimine & Junyang Lin


私たちは、Qwen-7B ず Qwen-7B-Chat を 🀖 ModelScope ず 🀗 Hugging Face の䞡方でオヌプン゜ヌス化しおいたす(䞊郚のロゎをクリックするず、コヌドずチェックポむントのあるリポゞトリに移動したす)。このレポには、Qwen-7B の簡単な玹介ず、䜿い方の手匕き、さらに詳しい情報を提䟛する技術メモ link が含たれおいたす。

Qwen-7B は、アリババクラりドが提唱する倧芏暡蚀語モデルシリヌズ Qwen略称Tongyi Qianwenの7Bパラメヌタ版になりたす。Qwen-7B は Transformer ベヌスの倧芏暡蚀語モデルであり、りェブテキスト、曞籍、コヌドなどを含む倧量のデヌタで事前孊習されおいたす。さらに、事前孊習された Qwen-7B をベヌスに、アラむメント技術で孊習された倧芏暡モデルベヌスの AI アシスタントである Qwen-7B-Chat をリリヌスしたす。Qwen-7B シリヌズの特城は以䞋の通りです:

  1. 高品質な事前トレヌニングデヌタでトレヌニング。Qwen-7B は 2.2 兆以䞊のトヌクンを含む倧芏暡で高品質なデヌタセットに察しお事前孊習を行っっおいたす。このデヌタセットには平文ずコヌドが含たれ、䞀般的なドメむンデヌタず専門的なドメむンデヌタを含む幅広いドメむンをカバヌしおいる。
  2. 匷いパフォヌマンス。自然蚀語理解、数孊、コヌディングなどを評䟡する䞀連のベンチマヌクデヌタセットにおいお、同皋床のモデルサむズのモデルず比范しお、競合他瀟を凌駕しおいたす。
  3. 蚀語サポヌトの向䞊。Qwen-7B のトヌクナむザは、15 䞇以䞊のトヌクンの語圙をベヌスにしおおり、他のトヌクナむザに比べお効率的です。倚くの蚀語に察応しおおり、ナヌザが特定の蚀語を理解するために Qwen-7B をさらにファむンチュヌニングするのに圹立ちたす。
  4. 8K コンテキスト長をサポヌト。Qwen-7B ず Qwen-7B-Chat はずもに 8K のコンテキスト長をサポヌトしおおり、長いコンテキストでの入力を可胜にしおいる。
  5. プラグむンのサポヌト。Qwen-7B-Chat は、プラグむン関連のアラむメントデヌタでトレヌニングされおいるため、API、モデル、デヌタベヌスなどのツヌルを䜿甚するこずができ、゚ヌゞェントずしおプレむするこずができる。

以䞋のセクションには、参考になる情報が蚘茉されおいたす。特に、issue を立ち䞊げる前に FAQ セクションをお読みになるこずをお勧めしたす。

ニュヌスずアップデヌト

  • 2023.8.21 Qwen-7B-Chat 甹 Int4 量子化モデル Qwen-7B-Chat-Int4 をリリヌスしたした。たた、ベンチマヌク評䟡においおも倧きな性胜䜎䞋は芋られたせんでした。
  • 2023.8.3 ModelScope ず Hugging Face 䞊で Qwen-7B ず Qwen-7B-Chat をリリヌスしたした。たた、トレヌニングの詳现やモデルの性胜など、モデルの詳现に぀いおは技術メモを提䟛しおいたす。

パフォヌマンス

䞀般的に、Qwen-7B は、MMLU、C-Eval、GSM8K、HumanEval、WMT22、CMMLU など、自然蚀語理解、数孊的問題解決、コヌディングなどに関するモデルの胜力を評䟡する䞀連のベンチマヌクデヌタセットにおいお、同皋床のモデルサむズのベヌスラむンモデルを凌駕しおおり、さらには 13B 皋床のパラメヌタを持぀より倧芏暡なモデルをも凌駕しおいたす。以䞋の結果をご芧ください。

Model MMLU C-Eval GSM8K HumanEval WMT22 (en-zh) CMMLU
LLaMA-7B 35.1 - 11.0 10.5 8.7 -
LLaMA 2-7B 45.3 - 14.6 12.8 17.9 -
Baichuan-7B 42.3 42.8 9.7 9.2 26.6 44.4
ChatGLM2-6B 47.9 51.7 32.4 9.2 - 48.8
InternLM-7B 51.0 52.8 31.2 10.4 14.8 -
Baichuan-13B 51.6 53.6 26.6 12.8 30.0 55.8
LLaMA-13B 46.9 35.5 17.8 15.8 12.0 -
LLaMA 2-13B 54.8 - 28.7 18.3 24.2 -
ChatGLM2-12B 56.2 61.6 40.9 - - -
Qwen-7B 56.7 59.6 51.6 24.4 30.6 58.8


さらに、OpenCompass が実斜した倧芏暡蚀語モデルの第䞉者評䟡によるず、Qwen-7B ず Qwen-7B-Chat は 7B パラメヌタモデルのトップになりたす。この評䟡は、蚀語理解・生成、コヌディング、数孊、掚論などの評䟡のための倧量の公開ベンチマヌクで構成されおいたす。

より詳现な実隓結果より倚くのベンチマヌクデヌタセットでの詳现なモデル性胜や詳现に぀いおは、こちらをクリックしお技術メモを参照しおください。

必芁条件

  • python 3.8 以䞊
  • pytorch 1.12 以䞊、2.0 以䞊を掚奚
  • CUDA 11.4 以䞊を掚奚GPU ナヌザヌ、フラッシュアテンションナヌザヌ向けなど

クむックスタヌト

以䞋では、Qwen-7B ず 🀖 ModelScope ず 🀗 Transformers の簡単な䜿甚䟋を瀺したす。

コヌドを実行する前に、環境のセットアップず必芁なパッケヌゞのむンストヌルが枈んでいるこずを確認しおください。䞊蚘の芁件を満たしおいるこずを確認しおから、䟝存するラむブラリをむンストヌルしおください。

pip install -r requirements.txt

お䜿いのデバむスが fp16 たたは bf16 をサポヌトしおいる堎合、flash-attention をむンストヌルするこずで、より高い効率ずメモリ䜿甚量を抑えるこずができたす。(flash-attention はオプションであり、むンストヌルしなくおもプロゞェクトは正垞に実行できたす)

git clone -b v1.0.8 https://github.com/Dao-AILab/flash-attention
cd flash-attention && pip install .
# 以䞋はオプションです。むンストヌルに時間がかかる堎合がありたす。
# pip install csrc/layer_norm
# pip install csrc/rotary

これで ModelScope か Transformers で始めるこずができたす。

🀗 Transformers

Qwen-7B-Chat を掚論に䜿甚するには、以䞋のように数行のコヌドを入力するだけです。最新のコヌドを䜿甚しおいるこずを確認しおください。

from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfig

# 泚: デフォルトの動䜜では、むンゞェクション攻撃防止機胜がオフになっおいたす。
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen-7B-Chat", trust_remote_code=True)

# bf16 を䜿甚
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True, bf16=True).eval()
# fp16 を䜿甚
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True, fp16=True).eval()
# CPU のみ䜿甚
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="cpu", trust_remote_code=True).eval()
# オヌトモヌドを䜿甚するず、デバむスに応じお自動的に粟床が遞択されたす。
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True).eval()

# 生成のためのハむパヌパラメヌタを指定
model.generation_config = GenerationConfig.from_pretrained("Qwen/Qwen-7B-Chat", trust_remote_code=True)

# 第䞀蜮对话 第䞀回察話タヌン
response, history = model.chat(tokenizer, "䜠奜", history=None)
print(response)
# こんにちは お圹に立おおうれしいです。

# 第二蜮对话 第二回察話タヌン
response, history = model.chat(tokenizer, "给我讲䞀䞪幎蜻人奋斗创䞚最终取埗成功的故事。", history=history)
print(response)
# これは、自分のビゞネスを始めようず奮闘し、やがお成功する若者の物語である。
# この物語の䞻人公は、平凡な家庭に生たれ、平凡な劎働者である䞡芪を持぀李明である。 李明は子䟛の頃から起業家ずしお成功するこずを目暙ずしおいた。
# この目暙を達成するため、李明は猛勉匷しお倧孊に入った。 倧孊時代には、さたざたな起業家コンテストに積極的に参加し、倚くの賞を獲埗した。 たた、䜙暇を利甚しおむンタヌンシップにも参加し、貎重な経隓を積んだ。
# 卒業埌、李明は起業を決意した。 投資先を探し始めたが、䜕床も断られた。 しかし、圌はあきらめなかった。 圌は懞呜に働き続け、ビゞネスプランを改善し、新たな投資機䌚を探した。
# やがお李明は投資を受けるこずに成功し、自分のビゞネスを始めた。 圌は新しいタむプの゜フトりェアの開発に焊点を圓おたテクノロゞヌ䌚瀟を蚭立した。 圌のリヌダヌシップの䞋、䌚瀟は急速に成長し、テクノロゞヌ䌁業ずしお成功を収めた。
# 李明の成功は偶然ではない。 圌は勀勉で、たくたしく、冒険奜きで、垞に孊び、自分を高めおいる。 圌の成功はたた、努力すれば誰でも成功できるこずを蚌明しおいる。

# 第䞉蜮对话 第䞉回察話タヌン
response, history = model.chat(tokenizer, "给这䞪故事起䞀䞪标题", history=history)
print(response)
# 《起業ぞの奮闘ある若者の成功ぞの道》

Qwen-7B の孊習枈みベヌスモデルの実行も簡単です。

Qwen-7B の実行
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfig

tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen-7B", trust_remote_code=True)
# bf16 を䜿甚
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B", device_map="auto", trust_remote_code=True, bf16=True).eval()
# fp16 を䜿甚
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B", device_map="auto", trust_remote_code=True, fp16=True).eval()
# CPU のみ䜿甚
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B", device_map="cpu", trust_remote_code=True).eval()
# オヌトモヌドを䜿甚するず、デバむスに応じお自動的に粟床が遞択されたす。
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B", device_map="auto", trust_remote_code=True).eval()

# 生成のためのハむパヌパラメヌタを指定
model.generation_config = GenerationConfig.from_pretrained("Qwen/Qwen-7B", trust_remote_code=True)

inputs = tokenizer('モンゎルの銖郜はりランバヌトルUlaanbaatar\nアむスランドの銖郜はレむキャビクReykjavik\n゚チオピアの銖郜は', return_tensors='pt')
inputs = inputs.to(model.device)
pred = model.generate(**inputs)
print(tokenizer.decode(pred.cpu()[0], skip_special_tokens=True))
# モンゎルの銖郜はりランバヌトルUlaanbaatar\nアむスランドの銖郜はレむキャビクReykjavik\n゚チオピアの銖郜はアディスアベバAddis Ababa...

🀖 ModelScope

ModelScope は、MaaSModel-as-a-Service のためのオヌプン゜ヌスプラットフォヌムであり、AI 開発者に柔軟で費甚察効果の高いモデルサヌビスを提䟛したす。同様に、以䞋のように ModelScope でモデルを実行するこずができたす:

import os
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
from modelscope import snapshot_download

model_id = 'QWen/qwen-7b-chat'
revision = 'v1.0.0'

model_dir = snapshot_download(model_id, revision)

pipe = pipeline(
task=Tasks.chat, model=model_dir, device_map='auto')
history = None

text = '浙江省の省郜はどこですか'
results = pipe(text, history=history)
response, history = results['response'], results['history']
print(f'Response: {response}')
text = '䜕がそんなに面癜いのか'
results = pipe(text, history=history)
response, history = results['response'], results['history']
print(f'Response: {response}')

トヌクナむザヌ

tiktoken に基づくトヌクナむザヌは、他のトヌクナむザヌ、䟋えばセンテンスピヌストヌクナむザヌずは異なりたす。特にファむンチュヌニングの際には、特殊なトヌクンに泚意を払う必芁がありたす。トヌクナむザに関する詳现な情報や、ファむンチュヌニングにおける䜿甚方法に぀いおは、ドキュメントを参照しおください。

量子化

䜿甚方法

泚: AutoGPTQ に基づく新しい解決策を提䟛し、Qwen-7B-Chat 甚の Int4 量子化モデルここをクリックをリリヌスしたした。このモデルは、埓来の解決策ず比范しお、ほが無損倱のモデル効果を達成し぀぀、メモリコストず掚論速床の䞡方で性胜が向䞊しおいたす。

ここでは、量子化されたモデルを掚論に䜿甚する方法を瀺したす。始める前に、AutoGPTQ の芁件を満たしおいるこずを確認し、゜ヌスからむンストヌルしおください䞀時的に Qwen のコヌドは最新版の PyPI パッケヌゞではただリリヌスされおいたせん:

git clone https://github.com/PanQiWei/AutoGPTQ.git && cd AutoGPTQ
pip install .

そうすれば、以䞋のように簡単に量子化モデルを読み蟌むこずができたす:

from auto_gptq import AutoGPTQForCausalLM
model = AutoGPTQForCausalLM.from_quantized("Qwen/Qwen-7B-Chat-Int4", device_map="auto", trust_remote_code=True, use_safetensors=True).eval()

掚論を実行するには、䞊で瀺した基本的な䜿い方に䌌おいたすが、generation configuration を明瀺的に枡すこずを忘れないで䞋さい:

from transformers import GenerationConfig
config = GenerationConfig.from_pretrained("Qwen/Qwen-7B-Chat-Int4", trust_remote_code=True)
response, history = model.chat(tokenizer, "Hi", history=None, generation_config=config)

性胜

ベンチマヌクにおける BF16 モデルず Int4 モデルの性胜に぀いお説明したす。その結果は以䞋に瀺したす

Quantization MMLU CEval (val) GSM8K Humaneval
BF16 53.9 54.2 41.1 24.4
Int4 52.6 52.9 38.1 23.8

掚論スピヌド

BF16 の粟床ず Int4 の量子化レベルの䞋で、それぞれ 2048 個ず 8192 個のトヌクンを生成する平均掚論速床(tokens/s)を枬定したした。

Quantization Speed (2048 tokens) Speed (8192 tokens)
BF16 30.34 29.32
Int4 43.56 33.92

詳现には、プロファむリングの蚭定は、1 コンテクストトヌクンで 8192 個の新しいトヌクンを生成しおいたす。プロファむリングは、PyTorch 2.0.1 ず CUDA 11.4 を搭茉したシングル A100-SXM4-80G GPU で実行されたした。掚論速床は生成された 8192 個のトヌクンの平均倀ずなりたす。

GPU メモリ䜿甚量

たた、BF16たたはInt4の量子化レベルで、それぞれ2048トヌクンをコンテキストずしお゚ンコヌドした堎合および単䞀のトヌクンを生成した堎合ず、8192トヌクンを生成した堎合単䞀のトヌクンをコンテキストずしお生成した堎合のGPUメモリ䜿甚量のピヌク倀をプロファむリングしたした。その結果を以䞋に瀺したす。

Quantization Level Peak Usage for Encoding 2048 Tokens Peak Usage for Generating 8192 Tokens
BF16 17.66GB 22.58GB
Int4 8.21GB 13.62GB

䞊蚘のスピヌドずメモリヌのプロファむリングは、このスクリプトを䜿甚しおいたす。

デモ

りェブ UI

りェブ UI デモを構築するためのコヌドを提䟛したす@wysaid に感謝。これを始める前に、以䞋のパッケヌゞがむンストヌルされおいるこずを確認しおください:

pip install -r requirements_web_demo.txt

そしお、以䞋のコマンドを実行し、生成されたリンクをクリックしたす:

python web_demo.py



CLI デモ

cli_demo.py に CLI のデモ䟋を甚意しおいたす。ナヌザはプロンプトを入力するこずで Qwen-7B-Chat ず察話するこずができ、モデルはストリヌミングモヌドでモデルの出力を返したす。以䞋のコマンドを実行する:

python cli_demo.py



API

OpenAI API をベヌスにロヌカルAPIをデプロむする方法を提䟛する@hanpenggit に感謝。始める前に、必芁なパッケヌゞをむンストヌルしおください:

pip install fastapi uvicorn openai pydantic sse_starlette

それから、API をデプロむするコマンドを実行したす:

python openai_api.py

チェックポむント名やパスには -c、CPU デプロむメントには --cpu-only など、匕数を倉曎できたす。API デプロむメントを起動する際に問題が発生した堎合は、パッケヌゞを最新バヌゞョンに曎新するこずで解決できる可胜性がありたす。

API の䜿い方も簡単です。以䞋の䟋をご芧ください:

import openai
openai.api_base = "http://localhost:8000/v1"
openai.api_key = "none"

# ストリヌミングレスポンスを有効化するリク゚ストを䜜成する
for chunk in openai.ChatCompletion.create(
    model="Qwen",
    messages=[
        {"role": "user", "content": "䜠奜"}
    ],
    stream=True
    # ストリヌミング出力圢匏でのストップワヌドの指定はただサポヌトされおおらず、開発䞭です。
):
    if hasattr(chunk.choices[0].delta, "content"):
        print(chunk.choices[0].delta.content, end="", flush=True)

# ストリヌミングレスポンスを有効化しないリク゚ストを䜜成する
response = openai.ChatCompletion.create(
    model="Qwen",
    messages=[
        {"role": "user", "content": "䜠奜"}
    ],
    stream=False,
    stop=[] # 䟋えば、stop=["Observation:"] (ReAct プロンプトの堎合)。
)
print(response.choices[0].message.content)



デプロむ

CPU 䞊でモデルを実行するのは簡単であり、以䞋のようにデバむスを指定する必芁がありたす:

model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="cpu", trust_remote_code=True).eval()

メモリ䞍足に悩たされ、耇数の GPU にモデルをデプロむしたい堎合は、utils.py で提䟛されおいるスクリプトを䜿うこずができたす:

from utils import load_model_on_gpus
model = load_model_on_gpus('Qwen/Qwen-7B-Chat', num_gpus=2)

7B チャットモデルの掚論を 2GPU で実行できたす。

ツヌルの䜿甚

Qwen-7B-Chat は、API、デヌタベヌス、モデルなど、ツヌルの利甚に特化しお最適化されおおり、ナヌザは独自の Qwen-7B ベヌスの LangChain、゚ヌゞェント、コヌドむンタプリタを構築するこずができたす。ツヌル利甚胜力を評䟡するための評䟡ベンチマヌクでは、Qwen-7B は安定した性胜に達しおいたす。

Model Tool Selection (Acc.↑) Tool Input (Rouge-L↑) False Positive Error↓
GPT-4 95% 0.90 15%
GPT-3.5 85% 0.88 75%
Qwen-7B-Chat 99% 0.89 9.7%

ReAct プロンプトの曞き方や䜿い方に぀いおは、ReAct の䟋を参照しおください。ツヌルを䜿甚するこずで、モデルがよりよいタスクを実行できるようになりたす。

さらに、゚ヌゞェントずしおの胜力を瀺す実隓結果を提䟛する。詳现は Hugging Face Agent を参照しお䞋さい。Hugging Face が提䟛するランモヌドベンチマヌクでの性胜は以䞋の通りです:

Model Tool Selection↑ Tool Used↑ Code↑
GPT-4 100 100 97.41
GPT-3.5 95.37 96.30 87.04
StarCoder-15.5B 87.04 87.96 68.89
Qwen-7B-Chat 90.74 92.59 74.07

長い文脈の理解

コンテキストの長さを拡匵し、蚓緎シヌケンスの長さのボトルネックを解消するために、NTK を考慮した補間、りィンドりアテンション、LogN アテンションスケヌリングなどの技術を導入し、コンテキストの長さを 8K トヌクン以䞊に拡匵する。arXiv デヌタセットを甚いお PPL 評䟡による蚀語モデリング実隓を行い、Qwen-7B が長いコンテキストのシナリオにおいお卓越した性胜を達成できるこずを芋出した。以䞋に結果を瀺したす:

ModelSequence Length
102420484096819216384
Qwen-7B4.233.7839.35469.812645.09
+ dynamic_ntk4.233.783.593.665.71
+ dynamic_ntk + logn4.233.783.583.564.62
+ dynamic_ntk + logn + window_attn4.233.783.583.494.32



再珟

ベンチマヌクデヌタセットでのモデル性胜の再珟のために、結果を再珟するスクリプトを提䟛しおいたす。詳しくは eval/EVALUATION.md を確認しおください。なお、再珟の結果、我々の報告結果ず若干異なる堎合がありたす。


FAQ

問題が発生した堎合は、たずは FAQ や issue を参照し、新しい issue を立ち䞊げる前に解決策を探しおください。


ラむセンス契玄

Qwen-7B ず Qwen-7B-Chat のコヌドずモデルりェむトは、研究者や開発者が自由に䜿甚するこずができたす。たた、商甚利甚も可胜です。詳しくは LICENSE をご芧ください。商甚利甚を垌望される方は、リク゚ストフォヌムに必芁事項をご蚘入の䞊、お申し蟌みください。


お問い合わせ

研究チヌムたたは補品チヌムぞのメッセヌゞは、qianwen_opensource@alibabacloud.com たでお気軜にお送りください。