LoginSignup
2
2

More than 1 year has passed since last update.

Databricksでmpt-7b-instructを動かしてみる

Posted at

いつものことですが、こちらの記事を参考にさせていただきつつ。ありがとうございます。

MPT-7B-Instruct

私はinstructの方を動かしてみます。

MPT-7B-Instruct
MPT-7B-Instructは短い形態の指示追従のためのモデルです。これは、Databricks Dolly-15kAnthropic 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パッケージに組み込まれていないためかと。

Python
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

推論の実行

Python
# プロンプトの準備
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 : データウェアハウスは、データの入出力が制御される仮想デバイスです。データレイクは、データの入出力を制御しない物理的なデバイスです。

データウェアハウスとデータレイクの違いは、データの入出力を制御するかどうかにかかわらず、データを読み書きする際にデー

Databricksクイックスタートガイド

Databricksクイックスタートガイド

Databricks無料トライアル

Databricks無料トライアル

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2