Llama2-中国プロジェクト: 1-プロジェクトの紹介とモデル推論

Atom-7B と Llama2 の関係: Atom-7B は、中国語の事前トレーニング用の Llama2 に基づく大規模なオープンソース モデルです。なぜ原子と呼ばれるのでしょうか? 原子が万物を生み出すため、ラマ中国人コミュニティは、原子の大きなモデルが将来 AI 世界を構築するための基本単位になることを期待しています。現在、コミュニティでは以下に示す 6 つのモデルがリリースされています。

FlagAlpha/Atom-7B
FlagAlpha/Llama2-Chinese-7b-Chat
FlagAlpha/Llama2-Chinese-7b-Chat-LoRA
FlagAlpha/Llama2-Chinese-13b-Chat
FlagAlpha/Llama2-Chinese-13b-Chat-LoRA
FlagAlpha/Llama2-Chinese-13b-Chat-4bit

1. Llama2-中国語プロジェクトの紹介 1.


Llama 関連論文
LlaMA: Open and Efficient Foundation Language Models
Llama 2: Open Foundation and Fine-Tuned Chat Models
Code Llama: Open Foundation Models for Code
2. Llama2 の評価結果


2. Atom-7B のロードと推論
モデル呼び出しのコード例は次のとおりです。

from transformers import AutoTokenizer, AutoModelForCausalLM
from pathlib import Path
import torch

pretrained_model_name_or_path = r'L:/20230903_Llama2/Atom-7B'
model = AutoModelForCausalLM.from_pretrained(Path(f'{pretrained_model_name_or_path}'), device_map='auto', torch_dtype=torch.float16, load_in_8bit=True) #加载模型
model = model.eval() #切换到eval模式
tokenizer = AutoTokenizer.from_pretrained(Path(f'{pretrained_model_name_or_path}'), use_fast=False) #加载tokenizer
tokenizer.pad_token = tokenizer.eos_token  #为了防止生成的文本出现[PAD],这里将[PAD]重置为[EOS]
input_ids = tokenizer(['<s>Human: 介绍一下中国\n</s><s>Assistant: '], return_tensors="pt", add_special_tokens=False).input_ids.to('cuda') #将输入的文本转换为token
generate_input = {
    "input_ids": input_ids, #输入的token
    "max_new_tokens": 512,  #最大生成的token数量
    "do_sample": True,      #是否采样
    "top_k": 50,            #采样的top_k
    "top_p": 0.95,          #采样的top_p
    "temperature": 0.3,     #采样的temperature
    "repetition_penalty": 1.3,               #重复惩罚
    "eos_token_id": tokenizer.eos_token_id,  #结束token
    "bos_token_id": tokenizer.bos_token_id,  #开始token
    "pad_token_id": tokenizer.pad_token_id   #pad token
}
generate_ids = model.generate(**generate_input) #生成token
text = tokenizer.decode(generate_ids[0]) #将token转换为文本
print(text) #输出生成的文本

3. 関連知識ポイント
1. Fire ライブラリ
分析: Fire は Google によって開発されたライブラリであり、Python コマンド ライン インターフェイス (CLI) を自動生成するために使用されます。これは、開発者が Python オブジェクトと関数をコマンド ライン ツールとして迅速に公開するのに役立ちます。Fire を使用して、コマンド ライン パラメータ、パラメータ タイプ、デフォルト値などを自動的に作成します。
2. Llama1 と Llama2 の違いの分析
:
(1) Llama2 は、Llama1 の事前トレーニング設定とモデル アーキテクチャの大部分を採用しており、標準の Transformer アーキテクチャを使用し、事前正規化に RMSNorm を適用し、SwiGLU アクティベーション関数とローテーションを使用します。位置エンコーディング。Llama1 と比較した主なアーキテクチャの違いには、コンテキストの長さの増加とグループ化されたクエリ アテンション (GQA) が含まれます。
(2) Llama2 は、7B、13B、70B モデルの合計 3 つのパラメータ サイズを公開しています。LLaMA と比較して、Llama2 のトレーニング データは 2 兆トークンに達し、コンテキストの長さが以前の 2048 から 4096 にアップグレードされ、より長いテキストを理解して生成できます。Llama2Chat モデルは、人間がラベル付けした 100 万件のデータに基づいて微調整されており、英会話に関して ChatGPT に近い結果を達成します。

4. 関連する問題
1. GPU が利用可能であるにもかかわらず、CUDA セットアップが失敗する
分析: 以下はオンラインで紹介されている解決策であり、ソース コードのコンパイルを提案するものもありますが、これら 2 つの解決策はどちらも機能しませんでした。

(1)インストールパス

  • bitsandbytes 径(0.39.1):D:\Python38\Lib\site-packages\bitsandbytes
  • CUDA パス (v12.1): C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\bin
    「CUDA パス (v12.1)」配下のファイルを「bitsandbytes パス (0.39.1)」にコピーします。コンテンツ:
cudart64_12.dll
cublas64_12.dll
cublasLt64_12.dll
cusparse64_12.dll
nvJitLink_120_0.dll

実際の経験 [8] から提案されるアプローチは、 ですpip3 install https://github.com/jllllll/bitsandbytes-windows-webui/blob/main/bitsandbytes-0.39.0-py3-none-any.whl以下のような写真と証拠があります。

(2) ファイル
D:\Python38\Lib\site-packages\bitsandbytes\cuda_setup\main.pyを変更します。

  • if not torch.cuda.is_available(): return 'libsbitsandbytes_cpu.so', None, None, None, Noneに置き換えられますif torch.cuda.is_available(): return 'libbitsandbytes_cuda116.dll', None, None, None, None
  • 2 か所を次のようにself.lib = ct.cdll.LoadLibrary(binary_path)置き換えますself.lib = ct.cdll.LoadLibrary(str(binary_path))

(3)libbitsandbytes_cuda116.dll和libbitsandbytes_cpu.dll
ストレージ パスを として追加しD:\Python38\Lib\site-packages\bitsandbytes、ダウンロード アドレスは [0] を参照します。

2.RuntimeError: cuDNN エラー: CUDNN_STATUS_NOT_INITIALIZED
分析: ダウンロード リンクは [7] で、ダウンロードする前に NVIDIA コミュニティ アカウントでログインする必要があります。

(1) cudnn-windows-x86_64-8.9.4.25_cuda12-archive.zip を解凍します。

(2) C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1 にコピーします。


参考文献:
[0]https://github.com/DeXtmL/bitsandbytes-win-prebuilt/tree/main
[1]https://github.com/facebookresearch/llama
[2]https://github.com/ facebookresearch/llama-recipes/
[3]https://huggingface.co/meta-llama/Llama-2-7b-hf/tree/main
[4]https://huggingface.co/spaces/ysharma/Explore_llamav2_with_TGI
[5 ] ]https://huggingface.co/meta-llama/Llama-2-70b-chat-hf
[6]https://huggingface.co/blog/llama2
[7]https://developer.nvidia.com/rdp /cudnn-download
[8]https://github.com/jllllll/bitsandbytes-windows-webui
[9]https://github.com/langchain-ai/langchain
[10]https://github.com/AtomEcho /AtomBulb
[11]https://github.com/huggingface/peft
[12] すべてのパラメータを微調整すると、target_modules 変数が存在しないことが報告されます: https://github.com/FlagAlpha/Llama2- Chinese/issues/169
[13]https://huggingface.co/FlagAlpha
[ 14]https://ラマ.ファミリー/

おすすめ

転載: blog.csdn.net/shengshengwang/article/details/132816351