Mixtral-8x7B は、Mistral AI が提供するオープンソースのスパース混合エキスパートモデルで、多くのベンチマークで GPT-3.5 を上回っています。PAI モデルギャラリーでは、このモデルですぐに使用できるデプロイメントと LoRA ファインチューニングを提供しています。
モデルの概要
Mixtral-8x7B は、スパース混合エキスパート (SMoE) アーキテクチャに基づくデコーダーのみの LLM で、Apache 2.0 ライセンスでリリースされています。ルーターネットワークは、トークンごとに 8 つのエキスパートグループから 2 つを選択し、その出力を結合します。モデルの総パラメーター数は 470 億ですが、トークンごとにアクティブになるのは 130 億パラメーターのみです。これにより、13B モデルに匹敵する推論速度を実現します。
Mixtral-8x7B は、英語、フランス語、ドイツ語、スペイン語、イタリア語をサポートし、32k トークンのコンテキスト長を持ちます。評価されたすべてのベンチマークで LLaMA2-70B および GPT-3.5 と同等またはそれを上回り、数学、コード生成、多言語タスクにおいては LLaMA2-70B を大幅に上回ります。

ソース: https://arxiv.org/abs/2401.04088
Mistral AI は、教師ありファインチューニングと Direct Preference Optimization (DPO) で最適化された指示チューニング済みバリアント、Mixtral-8x7B-Instruct-v0.1 もリリースしました。このモデルは、人間の指示により正確に従い、対話タスクにおいて他の指示チューニング済みオープンソースモデルを上回ります。

ソース: https://huggingface.co/spaces/lmsys/chatbot-arena-leaderboard
前提条件
Lingjun AI 計算サービスのリソースが有効化されている必要があります。 リソースグループを作成し、Lingjun AI 計算サービスのリソースを購入します。
環境要件
-
この例では、中国 (ウランチャブ) リージョンの PAI Lingjun クラスターが必要です。
-
GU108 GPU (80 GB VRAM) を推奨します。推論には少なくとも 2 つの GPU が必要です。LoRA ファインチューニングには少なくとも 4 つの GPU が必要です。
PAI コンソールでのモデルの使用
モデルのデプロイと呼び出し
-
モデルギャラリーページに移動します。
-
PAI コンソールにログインします。
-
上部のナビゲーションバーで、中国 (ウランチャブ) リージョンを選択します。
-
左側のナビゲーションペインで、[Workspaces] をクリックします。[Workspaces] ページで、使用するワークスペースの名前をクリックします。
-
左側のナビゲーションペインで、QuickStart > [Model Gallery] を選択して、モデルギャラリーページに移動します。
-
-
右側のモデルリストで、Mixtral-8x7B-Instruct-v0.1 モデルカードをクリックして、[Model Details] ページを開きます。
-
右上隅にある Deploy をクリックします。Lingjun AI 計算サービスのリソースを設定し、Deploy をクリックしてモデルを PAI-EAS にデプロイします。
このモデルには Lingjun AI 計算サービスのリソースが必要です。リソースクォータには、少なくとも 2 つの GU108 GPU が含まれている必要があります。
デプロイ設定パネルで、[Resource group type] を [Lingjun AI 計算サービス] に、[Number of instances] を 1 に、[CPU] を 40 に、[Memory (MB)] を 256000 に設定します。その後、[Deploy] をクリックします。
-
推論サービスを呼び出します。
HTTP API
推論サービスは OpenAI 互換の API をサポートしています。サービス詳細ページからサービスエンドポイントとアクセストークンを取得し、cURL を使用してサービスを呼び出します。
and with the actual endpoint and token of your service. export API_ENDPOINT="<ENDPOINT>" export API_TOKEN="<TOKEN>" # List available models curl $API_ENDPOINT/v1/models \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $API_TOKEN" # Call the general text completion API curl $API_ENDPOINT/v1/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $API_TOKEN" \ -d '{ "model": "Mixtral-8x7B-Instruct-v0.1", "prompt": "San Francisco is a", "max_tokens": 256, "temperature": 0 }' # Call the chat completion API curl $API_ENDPOINT/v1/chat/completions \ -H "Authorization: Bearer $API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "model": "Mixtral-8x7B-Instruct-v0.1", "messages": [ {"role": "user", "content": "Tell me about the history of Shanghai."} ] }' #SDK
OpenAI SDK を使用してサービスを呼び出すには、まず SDK をインストールします。
# サービスを呼び出すための SDK をインストールします python -m pip install openaiSDK を使用して推論サービスを呼び出します。
and with the token and endpoint from the service details page. openai.api_key = "<TOKEN>" openai.base_url = "<ENDPOINT>" + "/v1" # Call the chat completion API completion = openai.chat.completions.create( model="Mixtral-8x7B-Instruct-v0.1", temperature=0.0, top_p=0.8, frequency_penalty=0.0, messages=[{"role": "user", "content": "Tell me about yourself."}], # stream=True, ) # Print the output content print(completion.choices[0].message.content) import openai #
モデルのファインチューニング
モデルギャラリーは、Mixtral-8x7B-Instruct-v0.1 ですぐに使用できるファインチューニングアルゴリズムを提供します。
トレーニングデータは JSON 形式である必要があります。各エントリには instruction フィールド (指示) と output フィールド (回答) が必要です。
[
{
"instruction": "Write a poem on a topic 'On a Political Prisoner': \n",
"output": "She that but little patience knew,\r\nFrom childhood on, had now so much\r\nA grey gull lost its fear and flew\r\nDown to her cell and there alit,\r\nAnd there endured her fingers' touch\r\nAnd from her fingers ate its bit.\r\nDid she in touching that lone wing."
},
{
"instruction": "Write a poem on a topic 'To His Love': ",
"output": "He's gone, and all our plans\r\n Are useless indeed.\r\nWe'll walk no more on Cotswold\r\n Where the sheep feed\r\n Quietly and take no heed.\r\n His body that was so quick\r\n Is not as you\r\nKnew it, on Severn river\r\n Under the blue\r\n Driving our small boat through."
}
]
-
Model Details ページで、右上隅の Fine-tune をクリックします。主要な設定は次のとおりです。
-
[データセット設定]:データを OSS バケットにアップロードするか、NAS または CPFS データセットを指定します。PAI はテスト用の公開データセットも提供しています。
-
[コンピューティングリソース設定]:4 つの GU108 GPU (80 GB VRAM) が必要です。十分なクォータを確保してください。
-
[ハイパーパラメーター設定]:データとコンピューティングリソースに基づいて以下のハイパーパラメーターを調整するか、デフォルト値を使用します。
パラメーター
タイプ
デフォルト
必須
説明
learning_rate
float
5e-5
はい
トレーニング中の重み更新のステップサイズを制御します。
num_train_epochs
int
1
はい
トレーニングデータセットを反復処理する回数。
per_device_train_batch_size
int
1
はい
イテレーションごとに各 GPU で処理されるサンプル数。値を大きくするとスループットが向上しますが、VRAM の使用量が増加します。
seq_length
int
128
はい
トレーニングステップごとの入力シーケンス長。
lora_dim
int
16
いいえ
LoRA の次元。lora_dim > 0 の場合、LoRA または QLoRA による軽量ファインチューニングが有効になります。
lora_alpha
int
32
いいえ
LoRA のアルファスケーリング係数。lora_dim > 0 の場合に使用されます。
load_in_4bit
bool
true
いいえ
モデルを 4 ビットでロードするかどうかを指定します。
lora_dim > 0、load_in_4bitが true、load_in_8bitが false の場合、軽量ファインチューニングは 4 ビット QLoRA を使用します。load_in_8bit
bool
false
いいえ
モデルを 8 ビットでロードするかどうかを指定します。
lora_dim > 0、load_in_4bitが false、load_in_8bitが true の場合、軽量ファインチューニングは 8 ビット QLoRA を使用します。gradient_accumulation_steps
int
8
いいえ
勾配蓄積ステップ数。
apply_chat_template
bool
true
いいえ
アルゴリズムがモデルのデフォルトのチャットテンプレートをトレーニングデータに適用するかどうかを指定します。例:
-
質問:
<|begin_of_text|><|start_header_id|>user<|end_header_id|>\n\n + instruction + <|eot_id|> -
回答:
<|start_header_id|>assistant<|end_header_id|>\n\n + output + <|eot_id|>
-
-
-
Fine-tune をクリックすると、トレーニングジョブページが開き、ジョブが自動的に開始されます。
右上隅の Tensorboard をクリックして TensorBoard を開き、モデルの収束を監視します。

トレーニングされたモデルは、自動的に AI アセット - モデル管理に登録されます。モデルの登録と管理。
PAI SDK でモデルを使用する
モデルギャラリーのモデルは、PAI SDK for Python を使用して利用することもできます。SDK をインストールして設定します。
# PAI SDK for Python をインストールします
python -m pip install alipai --upgrade
# アクセス認証情報、PAI ワークスペース、その他の情報を対話形式で設定します
python -m pai.toolkit.config
「インストールと設定」の説明に従って、アクセス認証情報 (AccessKey ペア) とワークスペースを設定します。
モデルのデプロイと呼び出し
モデルギャラリーから事前設定された推論設定を使用して、Mixtral モデルを PAI-EAS にデプロイします。サービス名とリソースの詳細を指定します。
from pai.session import get_default_session
from pai.model import RegisteredModel
from pai.common.utils import random_str
from pai.predictor import Predictor
session = get_default_session()
# PAI QuickStart が提供するモデルを取得します
m = RegisteredModel(
model_name="Mixtral-8x7B-Instruct-v0.1",
model_provider="pai",
)
# モデルのデフォルトのデプロイ設定を表示します
print(m.inference_spec)
# 推論サービスをデプロイします
# 少なくとも 2 つの GU108 (80 GB VRAM) GPU を持つ Lingjun リソースクォータの ID (QuotaId) を指定する必要があります。
predictor = m.deploy(
service_name="mixtral_8_7b_{}".format(random_str(6)),
options={
# リソースクォータの ID
"metadata.quota_id": "<LingJunResourceQuotaId>",
"metadata.quota_type": "Lingjun",
"metadata.workspace_id": session.workspace_id,
}
)
# 推論サービスのエンドポイントとトークンを取得します
endpoint = predictor.internet_endpoint
token = predictor.access_token
上記の「推論サービスを呼び出す」で説明した方法、または PAI SDK を直接使用して推論サービスを呼び出します。
from pai.predictor import Predictor
p = Predictor("<MixtralServiceName>")
res = p.raw_predict(
path="/v1/chat/completions",
method="POST",
data={
"model": "Mixtral-8x7B-Instruct-v0.1",
"messages": [
{"role": "user", "content": "Tell me about the history of Shanghai."}
]
}
)
print(res.json())
テスト後は、コンソールまたは SDK を使用してサービスを削除し、リソースを解放します。
# サービスを削除します
predictor.delete_service()
モデルのファインチューニング
モデルギャラリーからモデルを取得して、そのファインチューニングアルゴリズム、サポートされているハイパーパラメーター、および入出力設定を表示します。
from pai.model import RegisteredModel
# PAI QuickStart が提供する Mixtral-8x7B-Instruct-v0.1 モデルを取得します
m = RegisteredModel(
model_name="Mixtral-8x7B-Instruct-v0.1",
model_provider="pai",
)
# モデルに設定されたファインチューニングアルゴリズムを取得します
est = m.get_estimator()
# サポートされているハイパーパラメータとアルゴリズムの入出力情報を表示します
print(est.hyperparameter_definitions)
print(est.input_channel_definitions)
Mixtral-8x7B-Instruct-v0.1 のファインチューニングアルゴリズムは、現在 Lingjun AI 計算サービスのリソースのみをサポートしています。PAI コンソールからリソースクォータ ID を取得し、ジョブを送信する前にハイパーパラメーターを設定します。
# トレーニングジョブ用の Lingjun リソースクォータ ID を設定します
est.resource_id = "<LingjunResourceQuotaId>"
# トレーニングジョブのハイパーパラメーターを設定します
hps = {
"learning_rate": 1e-5,
"per_device_train_batch_size": 2,
}
est.set_hyperparameters(**hps)
ファインチューニングアルゴリズムは 3 つの入力をサポートします。
-
model: 事前学習済みの Mixtral-8x7B-Instruct-v0.1 モデル。 -
train:ファインチューニング用のトレーニングデータセット。 -
validation: ファインチューニング用の検証データセットです。
必要なデータセットの形式は、「モデルのファインチューニング」セクションで説明されています。ossutil、コンソール、または SDK を使用して、データを OSS バケットにアップロードします。
from pai.common.oss_utils import upload
# モデルのファインチューニングアルゴリズムで使用される入力を表示します
# モデルとテスト用の公開データセットを含む、アルゴリズムの入力データを取得します
training_inputs = m.get_estimator_inputs()
print(training_inputs)
# {
# "model": "oss://pai-quickstart-cn-wulanchabu.oss-cn-wulanchabu-internal.aliyuncs.com/huggingface/models/Mixtral-8x7B-Instruct-v0.1/main/",
# "train": "oss://pai-quickstart-cn-wulanchabu.oss-cn-wulanchabu-internal.aliyuncs.com/huggingface/datasets/llm_instruct/en_poetry_train_mixtral.json",
# "validation": "oss://pai-quickstart-cn-wulanchabu.oss-cn-wulanchabu-internal.aliyuncs.com/huggingface/datasets/llm_instruct/en_poetry_test_mixtral.json",
# }
# ユーザーデータをアップロードします。次のローカルファイルパスとアップロード先の OSS バケットパスを置き換えてください。
train_data_uri = upload("/path/to/local/train.json", "path/of/train/data")
validation_data_uri = upload("/path/to/local/validation.json", "path/of/validation/data")
# トレーニングデータを独自のものに置き換えます。
# training_inputs["train"] = train_data_uri
# training_inputs["validation"] = validation_data_uri
train と validation の入力を独自のデータセットに置き換えて、ファインチューニングジョブを送信します。出力されたジョブリンクを使用して PAI コンソールでステータスとログを表示するか、TensorBoard を開いて収束を監視します。
from pai.common.oss_utils import download
# トレーニングジョブを送信し、ジョブへのリンクを表示します
est.fit(
inputs=training_inputs,
wait=False,
)
# TensorBoard を開いてトレーニングの進捗状況を表示します
est.tensorboard()
# トレーニングジョブの完了を待機します
est.wait()
# OSS バケット上のモデルパスを表示します
print(est.model_data())
# ossutil または SDK のユーティリティメソッドを使用して、モデルをローカルマシンにダウンロードできます。
download(est.model_data())
完全な SDK 統合ガイド:事前学習済みモデルの使用 — PAI SDK for Python。