Qwen-7B-main / README_JA.md
znskiss's picture
Upload folder using huggingface_hub
ade0520


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


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



Japanese document maintainer: Ikko Eltociear Ashimine



私たちは、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.3 Qwen-7B ず Qwen-7B-Chat を ModelScope ず Hugging Face で公開。たた、トレヌニングの詳现やモデルの性胜など、モデルの詳现に぀いおはテクニカルメモを提䟛しおいたす。

パフォヌマンス

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

量子化

NF4 ず Int8 のモデルをロヌドする方法を瀺す䟋を提䟛したす。手始めに、bitsandbytes が実装されおいるこずを確認しお䞋さい。bitsandbytes の芁件は以䞋の通りになりたす:

**必芁条件** Python >= 3.8。Linux ディストリビュヌションUbuntu、MacOS など+ CUDA > 10.0。

そしお、以䞋のコマンドを実行しお bitsandbytes をむンストヌルする

pip install bitsandbytes

Windows ナヌザは、bitsandbytes-windows-webui ずいう別のオプションを芋぀ける必芁がありたす。

そしお、量子化の蚭定を AutoModelForCausalLM.from_pretrained に远加するだけずなりたす。以䞋の䟋を参照しおください:

from transformers import AutoModelForCausalLM, BitsAndBytesConfig

# NF44ビットの量子化蚭定
quantization_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type='nf4',
    bnb_4bit_compute_dtype=torch.bfloat16
)

# Int88ビットの量子化蚭定
quantization_config = BitsAndBytesConfig(load_in_8bit=True)

model = AutoModelForCausalLM.from_pretrained(
    args.checkpoint_path,
    device_map="cuda:0",
    quantization_config=quantization_config,
    max_memory=max_memory,
    trust_remote_code=True,
).eval()

この方法では、Qwen-7B を NF4 ず Int8 でロヌドするこずができ、メモリ䜿甚量を節玄できる。以䞋にモデル性胜の関連統蚈量を瀺したす。量子化により、有効性は若干䜎䞋するが、掚論効率は倧幅に向䞊し、メモリコストが削枛されるこずがわかりたす。

Precision MMLU GPU Memory for Loading Model
BF16 56.7 16.38G
Int8 52.8 10.44G
NF4 48.9 7.79G

泚䞊衚のGPUメモリ䜿甚量プロファむリングは、シングルA100-SXM4-80G GPU、PyTorch 2.0.1、CUDA 11.8、フラッシュアテンション䜿甚で実行されおいたす。

掚論効率

掚論スピヌド

BF16粟床、量子化レベルInt8たたはNF4で、それぞれ2Kトヌクンを生成する平均掚論速床を枬定した。

Quantization Level Inference Speed with flash_attn (tokens/s) Inference Speed w/o flash_attn (tokens/s)
BF16 (no quantization) 30.06 27.55
Int8 (bnb) 7.94 7.86
NF4 (bnb) 21.43 20.37

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

GPUメモリ䜿甚量

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

Flash attentionを䜿甚した堎合のメモリ䜿甚量は以䞋の通りである

Quantization Level Peak Usage for Encoding 2048 Tokens Peak Usage for Generating 8192 Tokens
BF16 18.11GB 23.52GB
Int8 12.17GB 17.60GB
NF4 9.52GB 14.93GB

Flash attentionを䜿甚しない堎合、メモリ䜿甚量は次のようになる

Quantization Level Peak Usage for Encoding 2048 Tokens Peak Usage for Generating 8192 Tokens
BF16 18.11GB 24.40GB
Int8 12.18GB 18.47GB
NF4 9.52GB 15.81GB

䞊蚘のスピヌドずメモリヌのプロファむリングは、このスクリプトを䜿っお行われた。

デモ

りェブ 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"

# create a request activating streaming response
for chunk in openai.ChatCompletion.create(
    model="Qwen-7B",
    messages=[
        {"role": "user", "content": "䜠奜"}
    ],
    stream=True
):
    if hasattr(chunk.choices[0].delta, "content"):
        print(chunk.choices[0].delta.content, end="", flush=True)

# create a request not activating streaming response
response = openai.ChatCompletion.create(
    model="Qwen-7B",
    messages=[
        {"role": "user", "content": "䜠奜"}
    ],
    stream=False
)
print(response.choices[0].message.content)



ツヌルの䜿甚

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 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 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 たでお気軜にお送りください。