😺

LLMのモデルの形式(transformer周り)

2024/10/08に公開

重みを保存するモデルに関して

Torchモデル

lua向けのライブラリ。
「.t7」という拡張子ファイル。

Pytorchモデル

Python向けのライブラリ。
.ptや.pthという拡張子ファイル。(「.t7」とはモデル構造が違う)

PyTorch modelはtorch.nn.Moduleのサブクラスだと思って良い。

モデルのロード
load_model = torch.load('〇〇.pt')

TorchScript形式

PyTorch modelの中間表現。高性能な環境(例えばC++)で実行できるようにしている。
拡張子は.pt

pytorchモデルからの変換
script_model = torch.jit.script(model)
pytorchモデルからの変換
script_model = torch.jit.trace(model, example_inputs=dummy_input)

ロード時

load_model = torch.jit.load("torchScriptのファイルパス")

Hugging Face モデル

ベースモデルが、PreTrainedModel,

  • nn.Moduleを継承しているのでPythorchモデルとも言える。
  • モデルの読み込みと保存に関する共通のメソッドを実装

(注意 ベースが、TFPreTrainedModel (TensorFlowベース) FlaxPreTrainedModel (Flaxベース)もある。https://huggingface.co/docs/transformers/ja/main_classes/model)

vLLMで利用する。

サポートしてるモデル一覧
https://docs.vllm.ai/en/latest/models/supported_models.html

pip install vllm

⭐️自身の環境ではopenaiのバージョンアップも必要だった。

llama2を動作させるサンプル例
import os
from vllm import LLM, SamplingParams

LOCAL_PATH = "/Path/llama2/7b"

model_dir = os.path.expanduser(LOCAL_PATH)
vllm_model = LLM(model=model_dir)
sampling_params = SamplingParams(temperature=0.8, top_p=0.95)
prompts = ["初めまして、こんにちは"]

# Generate text using the specified model and parameters in vLLM
outputs = vllm_model.generate(prompts, sampling_params)

# Print the outputs.
for output in outputs:
    prompt = output.prompt
    generated_text = output.outputs[0].text
    print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")

上記のmodelはvllmが対応しているHFモデルです。

ONNXモデル

ONNX(Open Neural Network eXchange)(オニキス)フォーマットで作られたモデルのこと。

上記のように計算グラフの形で情報を保持している。

推論方法

ONNX Runtimeで推論する。

ONNX Runtimeに関して。

https://onnxruntime.ai/

pip install onnxruntime-gpu
  • ONNXのオペレーターにはバージョン番号(opset number)が付いている。
    opset_version

モデルの視覚化

Netronで視覚化できる。
https://github.com/lutzroeder/netron

huggingface/optimum(未検証)

transformes -> onnx形式変換

pip install optimum[exporters]
text-generationタスクの場合
!optimum-cli export onnx --task text-generation --model <model_path> <output_dir>

ONNXモデルのダウンロード

ONNX Model Zooにモデルが置かれている。
ONNX Model Hubを利用してダウンロードすることができる。

from onnx import hub

ONNXファイルのあれこれ

  • Constant_<ID>_attr__value
    モデルの計算グラフ内で使われる定数値を保持するための部分

  • onnx__MatMul_<ID>
    行列の掛け算を行う演算ノードを保持するための部分。

Discussion