Alpaca モデルは、スタンフォード大学によって開発された LLM (Large Language Model、ビッグランゲージ) オープンソース モデルであり、LLaMA 7B (7B オープン) の 52K 命令に基づいて微調整されたモデルです。出典: Meta Company)、モデル パラメーターは 70 億個あります (モデル パラメーターが大きいほど、モデルの推論能力が強化され、当然、モデルのトレーニングのコストも高くなります)。
LoRA、正式な英語名は Low-Rank Adaptation of Large Language Models で、文字通り大規模言語モデルの低レベル適応と訳されます。これは、大規模言語モデルの微調整を解決するために Microsoft の研究者によって開発されたテクノロジです。言語モデル。事前にトレーニングされた大規模な言語モデルで特定のフィールドのタスクを実行できるようにしたい場合は、通常、微調整を行う必要がありますが、優れた推論効果を持つ大規模な言語モデルのパラメーターの次元は非常に大きく、大規模な言語モデルに対して微調整を直接実行すると、非常に大量の計算と非常に高いコストが必要になります。
'LoRA のアプローチは、事前トレーニングされたモデル パラメーターをフリーズし、トレーニング可能なレイヤーを各 Transformer ブロックに注入することです。モデル パラメーターの勾配を再計算する必要がないため、計算が大幅に削減されます。量。
下の図に示すように、中心となるアイデアは、元の事前トレーニング済みモデルにバイパスを追加し、次元削減を実行してから次元操作を実行することです。トレーニング中、事前トレーニングされたモデルのパラメーターは固定され、次元削減行列 A と次元強化行列 B のみがトレーニングされます。モデルの入力次元と出力次元は変更されず、BA と事前トレーニングされた言語モデルのパラメーターが出力に重ねられます。
A をランダム ガウス分布で初期化し、B を 0 行列で初期化します。これにより、トレーニング中の新しいバイパス BA=0 が保証され、モデルの結果に影響を与えません。推論中、左部分と右部分の結果が加算されます (つまり、h=Wx BAx=(W BA)x)。したがって、学習後の行列積 BA と元の重み行列 W を新しい重みパラメータとして追加するだけです。元の事前トレーニング済み言語モデルの W だけで十分であり、追加のコンピューティング リソースは追加されません。 LoRA の最大の利点は、トレーニングが高速になり、使用するメモリが少なくなることです。
この記事でローカライズされた展開の実践に使用される Alpaca-lora モデルは、Alpaca モデルの低次適応バージョンです。この記事では、Alpaca-lora モデルのローカリゼーション展開、微調整、推論プロセスを実践し、関連する手順について説明します。
この記事で展開する GPU サーバーには 4 つの独立した GPU があり、モデルは P40 です。単一の P40 の計算能力は次のとおりです。 60 同じメイン周波数の CPU の計算能力に相当します。
#物理カードがテストするには高価すぎると感じる場合は、「代替バージョン」である GPU クラウド サーバーを使用することもできます。物理カードと比較して、GPU クラウド サーバーを使用して構築すると、柔軟なハイパフォーマンス コンピューティングが保証されるだけでなく、次のような利点もあります -
//m.sbmmt.com/link/5d3145e1226fd39ee3b3039bfa90c95d
##GPU サーバーを入手したら、まずグラフィック カード ドライバーと CUDA ドライバー (グラフィック カード メーカーである NVIDIA が発売したコンピューティング プラットフォームです。CUDA は一般的な並列コンピューティング アーキテクチャです) をインストールします。 NVIDIA によって開始され、GPU 能力で複雑な計算問題を解決できるようになります)。
グラフィック カード ドライバーは、NVIDIA の公式 Web サイトにアクセスして、対応するグラフィック カード モデルと適応する CUDA バージョンを見つける必要があります。ダウンロード アドレス:
https://www.nvidia.com/Download/index.aspx , [対応するグラフィックス カードと CUDA バージョンのドライバー ファイルをダウンロードできます] を選択します。です
NVIDIA-Linux-x86_64-515.105.01.run、これは実行可能ファイルであり、root 権限で実行できます。ドライバーのインストール プロセス中に nvidia プロセスを実行できないことに注意してください。必要に応じて、すべてのプロセスを強制終了してください。それ以外の場合は、次の図に示すように、インストールに失敗します:
次に、次へ進みます。エラーが報告されなければ、インストールは成功です。後でグラフィックス カードのリソースを確認するには、nvitop などの別のグラフィックス カード監視ツールをインストールするのが最善です。単に pip install nvitop を使用します。サーバーごとに Python のバージョンが異なるため、anaconda をインストールするのが最善であることに注意してください。実行時にさまざまな奇妙なエラーが発生するのを防ぐために、独自のプライベート Python スペースをデプロイします 具体的な手順は次のとおりです:
1. anaconda をインストールします ダウンロード方法: wget
https://repo.anaconda.com /archive/Anaconda3-5.3.0-Linux-x86_64 .sh。インストール コマンド: sh Anaconda3-5.3.0-Linux-x86_64.sh インストール手順ごとに「yes」を入力し、conda init 後に最後にインストールを完了します。これにより、インストール ユーザーのセッションに入るたびに、自分のセッションを直接入力することになります。 Python環境。インストールの最後のステップで no を選択した場合、つまり conda init が実行されなかった場合は、後でsource /home/jd_ad_sfxn/anaconda3/bin/activate を通じてプライベート Python 環境に入ることができます。
2. setuptools のインストール 次に、パッケージ化および配布ツールの setuptools をインストールする必要があります。ダウンロード アドレス: wget
https://files.pythonhosted.org/packages/26/e5/9897eee1100b166a61f91b68528cb692e8887300d9cbdaa1a349f6304b79/setuptools- 40.5.0 .zip インストール コマンド: unzip setuptools-40.5.0.zip cd setuptools-40.5.0/ python setup.py install
3. pip のダウンロード アドレスをインストール: wget
https://files .pythonhosted.org/packages/45/ae/8a0ad77defb7cc903f09e551d88b443304a9bd6e6f124e75c0fbbf6de8f7/pip-18.1.tar.gz インストールコマンド: tar -xzf pip-18.1.tar.gz cd pip-18.1 python setup.py install
これまでのところ, 久しぶりのインストールです ようやくプロセスが終わりました. ここでプライベート Python スペースを作成し、
conda create -n alpaca pythnotallow=3.9conda activate alpaca
を実行して確認します. 下図のように、作成されたことがわかります成功しました。
GPU サーバーの基本環境は上記でインストールされました。これからエキサイティングなモデル トレーニングを開始します (エキサイティング ing ) 、トレーニングの前に、最初にモデル ファイルをダウンロードする必要があります。ダウンロード アドレス:
https://github.com/tloen/alpaca-lora、モデル全体がオープンソースであり、これは素晴らしいことです。まず、モデルファイルをローカルにダウンロードし、git clone https://github.com/tloen/alpaca-lora.git を実行します。
ローカルに alpaca-lora フォルダーが作成され、そのフォルダー内で cd alpaca-lora を実行します。
pip install -r requirements.txt
このプロセスは時間がかかる可能性があり、から大量の依存関係パッケージをダウンロードする必要があります。インターネット。さまざまなパッケージの競合や不足している依存関係も報告される場合があります。この領域では、何が不足しているのかを見つけることしかできません (パッケージの依存関係やバージョンの競合を解決するのは確かに頭の痛い問題です。ただし、この手順が適切に行われないと、モデルも実行されます。立ち上がることができないので、辛抱強く少しずつ解決することしかできません)。マシンごとに異なる問題が発生する可能性があるため、ここでは面倒なプロセスについては詳しく説明しません。したがって、参照の重要性は次のとおりです。あまり素晴らしいものではありません。
インストール プロセスが完了すると、エラー メッセージは報告されず、「成功しました」というプロンプトが表示され、おめでとうございます。数千マイルにわたる長い行進は完了し、成功に非常に近づいています。もう少し待ってください。成功する可能性が非常に高いです :)。
私たちの目標はモデルを微調整することなので、微調整の目標を持たなければなりません。元のモデルは中国語を十分にサポートしていないため、私たちの目標は中国語コーパスを使用してモデルを改善することです。中国語をサポートしています。このコミュニティも私のために用意してくれました。中国語コーパスを直接ダウンロードして、wget
https://github.com/LC1332/ Chinese-alpaca-lora/ をローカルで実行するだけです。blob/main/data/ trans_chinese_alpaca_data.json?raw=true、後のモデルトレーニングに使用されるコーパスを alpaca-lora のルート ディレクトリにダウンロードします (後の便宜のため)。
コーパスの内容は、下図のような命令、入力、出力のトリプルで構成されており、命令はモデルに何かをさせる命令、入力は入力、出力はモデルの出力 指示と入力に従って、モデルが中国語によりよく適応できるようにトレーニング モデルがどのような情報を出力する必要があるか。
好的,到现在为止,万里长征已经走完2/3了,别着急训练模型,我们现在验证一下GPU环境和CUDA版本信息,还记得之前我们安装的nvitop嘛,现在就用上了,在本地直接执行nvitop,我们就可以看到GPU环境和CUDA版本信息了,如下图:
在这里我们能够看到有几块显卡,驱动版本和CUDA版本等信息,当然最重要的我们还能看到GPU资源的实时使用情况。
怎么还没到模型训练呢,别着急呀,这就来啦。
我们先到根目录下然后执行训练模型命令:
如果是单个GPU,那么执行命令即可:
python finetune.py \--base_model 'decapoda-research/llama-7b-hf' \--data_path 'trans_chinese_alpaca_data.json' \--output_dir './lora-alpaca-zh'
如果是多个GPU,则执行:
WORLD_SIZE=2 CUDA_VISIBLE_DEVICES=0,1 torchrun \--nproc_per_node=2 \--master_port=1234 \finetune.py \--base_model 'decapoda-research/llama-7b-hf' \--data_path 'trans_chinese_alpaca_data.json' \--output_dir './lora-alpaca-zh'
如果可以看到进度条在走,说明模型已经启动成功啦。
在模型训练过程中,每迭代一定数量的数据就会打印相关的信息,会输出损失率,学习率和代信息,如上图所示,当loss波动较小时,模型就会收敛,最终训练完成。
我用的是2块GPU显卡进行训练,总共训练了1904分钟,也就是31.73个小时,模型就收敛了,模型训练是个漫长的过程,所以在训练的时候我们可以适当的放松一下,做点其他的事情:)。
模型训练好后,我们就可以测试一下模型的训练效果了,由于我们是多个GPU显卡,所以想把模型参数加载到多个GPU上,这样会使模型推理的更快,需要修改
generate.py 文件,添加下面这样即可。
然后我们把服务启起来,看看效果,根目录执行:
python generate.py --base_model "decapoda-research/llama-7b-hf" \--lora_weights './lora-alpaca-zh' \--load_8bit
其中./lora-alpaca-zh目录下的文件,就是我们刚刚fine tuning模型训练的参数所在位置,启动服务的时候把它加载到内存(这个内存指的是GPU内存)里面。
如果成功,那么最终会输出相应的IP和Port信息,如下图所示:
我们可以用浏览器访问一下看看,如果能看到页面,就说明服务已经启动成功啦。
激动ing,费了九牛二虎之力,终于成功啦!!
因为我们目标是让模型说中文,所以我们测试一下对中文的理解,看看效果怎么样?
简单的问题,还是能给出答案的,但是针对稍微复杂一点的问题,虽然能够理解中文,但是并没有用中文进行回答,训练后的模型还是不太稳定啊。
在推理的时候我们也可以监控一下GPU的变化,可以看到GPU负载是比较高的,说明GPU在进行大量的计算来完成推理。
1.效果问题:由于语料库不够丰富,所以目前用社区提供的语料库训练的效果并不是很好,对中文的理解力有限,如果想训练出能够执行特定领域的任务,则需要大量的语料支持,同时训练时间也会更长;
2. 推論時間の問題: 現在デプロイされている GPU サーバーには 4 つの GPU があるため、そのうちの 3 つを実行できます。3 つの GPU に基づくと、推論は依然として非常に困難です。インタラクションの実行には約 30 秒から 1 分かかります。 chatGPT のようにリアルタイムで返されるため、それをサポートするには多くの計算能力が必要になります。投資は考慮する必要がある問題です;
3. 中国語のコード文字化けの問題: 入力が中国語の場合、返される結果が文字化けする場合があります。単語の分割に関連していると考えられます。中国語によるものです。エンコードの問題、中国語は英語のようにスペースで区別されないため、特定のエラーが発生する可能性があります。文字化けが発生し、オープン AI の API を呼び出すときにも発生します。コミュニティに対応する解決策があるかどうかは後で確認します。
4. モデル選択の問題: GPT コミュニティは現在比較的活発であるため、モデルの生成と変更も日を追うごとに変化しています。時間の都合上、アルパカの局所的な展開のみを調査しました。 lora モデル。将来、実際の実装には、より優れた低コストの実装ソリューションが登場するはずです。引き続きコミュニティの発展を追跡し、適切なものを選択する必要があります。オープンソース ソリューション。
JD Cloud P40 モデル GPU の [ChatGLM 言語モデル] 実践の詳細: //m.sbmmt.com/link/f044bd02e4fe1aa3315ace7645f8597a
著者: JD Retail Luo Yongjian
コンテンツ ソース: JD Cloud Developer Community
以上がGPT 大規模言語モデル Alpaca-lora ローカリゼーション展開の実践の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。