![見出し画像](https://assets.st-note.com/production/uploads/images/142653295/rectangle_large_type_2_116eb3d5bea9a9143bc40d6996e5df7e.png?width=800)
Photo by
sery1
ArrowPro-7B-KUJIRA をCoreML変換
せっかくMacStudioを持っているのでCoreMLに変換してGPUやNPUの性能をフルに活かしてローカルLLMを使ってみようと思います。
変換するモデル
GPT-4oとClaude 3 Opusと一緒に作った変換ロジック
import coremltools as ct
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
import os
import numpy as np
# TensorFlowのバージョンを確認
import tensorflow as tf
print("TensorFlow version:", tf.__version__)
# モデルのパスを指定
model_name_or_path = "../LLMModels/ArrowPro-7B-KUJIRA"
# モデルパスの存在を確認
if not os.path.exists(model_name_or_path):
raise FileNotFoundError(f"モデルパスが見つかりません: {model_name_or_path}")
else:
print(f"モデルパスが見つかりました: {model_name_or_path}")
try:
# トークナイザをロード
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path)
# モデルをロード
model = AutoModelForCausalLM.from_pretrained(model_name_or_path, trust_remote_code=True)
model.eval() # 推論モードに設定
# サンプル入力のトークンを生成
input_text = "Hello, world!"
inputs = tokenizer(input_text, return_tensors="pt")
input_ids = inputs["input_ids"] # int64のまま
# トレースではなく、直接エクスポート
class CustomWrapper(torch.nn.Module):
def __init__(self, model):
super(CustomWrapper, self).__init__()
self.model = model
def forward(self, input_ids):
outputs = self.model(input_ids=input_ids)
return outputs.logits
wrapped_model = CustomWrapper(model)
# トレースモデルを生成
traced_model = torch.jit.trace(wrapped_model, input_ids)
# CoreMLモデルに変換
mlmodel = ct.convert(
traced_model,
convert_to="mlprogram", # この行を追加
inputs=[ct.TensorType(name="input_ids", shape=input_ids.shape, dtype=np.int64)]
)
# CoreMLモデルを保存
mlmodel.save("ArrowPro-7B-KUJIRA.mlpackage") # 拡張子を.mlpackageに変更
print("モデルの変換と保存が成功しました。")
except Exception as e:
print(f"モデルの変換中にエラーが発生しました: {e}")
ここに辿り着くまでに本当にいろいろありました。。。
途中で気づいたんですが、おそらく
こちらを使えばもっと楽に変換できたかもしれません。
今度やってみます。
![](https://assets.st-note.com/img/1717261209575-Qi0MOGdPry.png)
量子化しない版のArrowPro-7B-KUJIRAはCPUだけだとめちゃめちゃ重かったです。多分5分くらいかかってました。
NPU使った場合はどうなるでしょうか?
試してみました
ライブラリの
pip install tensorflow==2.12.0
がずっと
インストールできなくて泣きそうになってたんですけど
pip install tensorflow-macos==2.12.0
にしたらできました!
いえい
import coremltools as ct
import numpy as np
# NPU対応のモデルを読み込み
model = ct.models.MLModel("ArrowPro-7B-KUJIRA.mlpackage")
# サンプル入力の準備
input_text = "Hello, world!"
input_ids = np.array([[1, 2, 3, 4, 5]], dtype=np.int32) # 2次元のnumpy配列
# モデルの期待する入力型を確認
print("Expected inputs:", model.input_description)
# 推論の実行
try:
output = model.predict({"input_ids": input_ids})
# 出力の処理
output_tensor = output["var_5268"]
print("Output tensor shape:", output_tensor.shape)
# 出力テンソルの処理例
predicted_token_ids = np.argmax(output_tensor, axis=-1)
print("Predicted token IDs:", predicted_token_ids)
print("推論が完了しました。")
except RuntimeError as e:
print(f"Error during prediction: {e}")
出力結果↓↓
Expected inputs: Features(input_ids)
Output tensor shape: (1, 5, 32000)
Predicted token IDs: [[28705 1 4066 166 28846]]
推論が完了しました。
これで一応できてはいるみたい
ただトークナイザがないから意味のない推論結果になっているらしい
で
トークナイザで詰まった
huggingfaceのは使えないらしい
今日はここまで
この記事が気に入ったらサポートをしてみませんか?