動かしたMacbookのスペックは少し古いですが、M1 Max (64GB)です。
Apple MシリーズのマシンでLlama.cppを使ってCommand R+を動かしてみようと思い立ったきっかけは、npakaさんの以下の記事です。
npakaさんの記事ではM3 Max (128GB)とのことです。実行するマシンがそれよりスペックが低いので、4ビット量子化のモデルの代わりに2ビット量子化のモデル(Q2_K - command-r-plus-Q2_K.gguf)を使っています。
以下のように動作しました。
APEXの環境はColimaを使って実行しています。
Oracle Database 23c FreeのコンテナだけでOracle APEXを実行する
データベース単体のコンテナへのOracle APEXのインストールを自動化する
begin
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => '*',
ace => xs$ace_type(
privilege_list => xs$name_list('connect'),
principal_name => 'APEX_230200',
principal_type => xs_acl.ptype_db));
commit;
end;
/
また、管理サービスのインスタンスの設定に含まれるウォレット・パスを設定しています。ウォレット・パスに設定したディレクトリ以下にewallet.p12、cwallet.ssoを配置しています。
APIサーバーは以下のコマンドで実行しています。
Llama.cppをコンパイルしたディレクトリより、
Llama.cppの代わりにOllamaも使ってみました。Ollamaは以下で実行します。
ollama run command-r-plus:104b-q2_K
以下の記事で作成したAPEXアプリケーションを使っています。
OpenAIのChat Completions APIを呼び出すAPEXアプリを作成する
https://apexugj.blogspot.com/2024/04/chat-with-generative-ai-sample-app-0.html
同じアプリケーションで、OpenAI、Llama.cppそれとOllamaを呼び出せるように、パラメータを置換文字列として設定するように変更しています。
ローカルのMacでLlama.cpp+Command R+(Q2_K)を動かして、APEXアプリから呼び出す際の設定です。
G_API_ENDPOINTとしてhttp://host.docker.internal:8080/v1/chat/completions、G_MODEL_NAMEとしてcommand-r-plus(おそらくLlama.cppではモデル名は見ていない)を指定しています。
OpenAIのAPIを呼び出したときの設定です。
G_API_ENDPOINTはhttps://api.openai.com/v1/chat/completions、G_MODEL_NAMEとしてgpt-3.5-turboを指定しています。OpenAIのAPIを呼び出すにはAPIキーの指定が必要なので、G_CREDENTIALとしてWeb資格証明のOPENAI_API_KEYを指定します。Web資格証明はあらかじめ作成しておきます。
ローカルのMacでOllama+command-r-plus:104b-q2_Kを動かしたときの設定です。
G_API_ENDPOINTはhttp://host.docker.internal:11434/v1/chat/completions、G_MODEL_NAMEとしてcommand-r-plus:104b-q2_Kを指定しています。
G_API_ENDPOINTとしてhttp://host.docker.intrernal:11434/api/chatを指定すると、レスポンスの形式が少々変わります。
今回の作業は以上です。
MLXでも試してみたのですが、そちらの方はCommand R+を動かすにはリソースが足りず動きませんでした。Llama.cppではかろうじて動く感じです。
完