いつものことですが、こちらの記事を参考にさせていただきつつ。ありがとうございます。
MPT-7B-Instruct
私はinstructの方を動かしてみます。
MPT-7B-Instruct
MPT-7B-Instructは短い形態の指示追従のためのモデルです。これは、Databricks Dolly-15kとAnthropic Helpful and Harmless (HH-RLHF)データセットに対してMPT-7Bをファインチューニングすることで構築されています。
おおー、Dollyのデータセットが活用されている。嬉しいです。ライセンスもCC-By-SA-3.0であり商用利用が可能となっています。
NVIDIAライブラリのインストール
Databricksランタイムバージョンに合わせてNVIDIAライブラリのインストールが必要です。
DBR12.2MLの場合、以下のコマンドを実行します。
!wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/libcusparse-dev-11-3_11.5.0.58-1_amd64.deb -O /tmp/libcusparse-dev-11-3_11.5.0.58-1_amd64.deb && \
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/libcublas-dev-11-3_11.5.1.109-1_amd64.deb -O /tmp/libcublas-dev-11-3_11.5.1.109-1_amd64.deb && \
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/libcusolver-dev-11-3_11.1.2.109-1_amd64.deb -O /tmp/libcusolver-dev-11-3_11.1.2.109-1_amd64.deb && \
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/libcurand-dev-11-3_10.2.4.109-1_amd64.deb -O /tmp/libcurand-dev-11-3_10.2.4.109-1_amd64.deb && \
dpkg -i /tmp/libcusparse-dev-11-3_11.5.0.58-1_amd64.deb && \
dpkg -i /tmp/libcublas-dev-11-3_11.5.1.109-1_amd64.deb && \
dpkg -i /tmp/libcusolver-dev-11-3_11.1.2.109-1_amd64.deb && \
dpkg -i /tmp/libcurand-dev-11-3_10.2.4.109-1_amd64.deb
13.0MLの場合に関してはこちらのコードをご覧ください。
こちらも実行してライブラリをインストールします。ビルドが走るので20分弱かかります。
%pip install einops flash_attn
トークナイザーとモデルの準備
以降は元記事をそのまま使わせていただいています。本当はMLflowのtransfomerサポートを活用したかったのですが、ロギングした後のロードでエラーになってしまっています。おそらく、こちらにあるように、現在はカスタムのMPTアーキテクチャを使用しており、Hugging Faceのtransformers
パッケージに組み込まれていないためかと。
from transformers import AutoTokenizer, AutoModelForCausalLM
# トークナイザーとモデルの準備
tokenizer = AutoTokenizer.from_pretrained(
"mosaicml/mpt-7b-instruct"
)
model = AutoModelForCausalLM.from_pretrained(
"mosaicml/mpt-7b-instruct", trust_remote_code=True
推論の実行
# プロンプトの準備
prompt = "データウェアハウスとデータレイクの違いは。"
# 推論の実行
inputs = tokenizer(prompt, return_tensors='pt').to(model.device)
input_length = inputs.input_ids.shape[1]
outputs = model.generate(
**inputs,
max_new_tokens=128,
do_sample=True,
temperature=0.7,
top_p=0.7,
top_k=50,
return_dict_in_generate=True
)
token = outputs.sequences[0, input_length:]
output_str = tokenizer.decode(token)
# 確認
print("output :", output_str)
日本語でもそれなりに動作します。
output : データウェアハウスは、データの入出力が制御される仮想デバイスです。データレイクは、データの入出力を制御しない物理的なデバイスです。
データウェアハウスとデータレイクの違いは、データの入出力を制御するかどうかにかかわらず、データを読み書きする際にデー