🦙
M1 Macでnode-llama-cppを使ってElyza-13bを動かしてみた
はじめに
「ELYZA-japanese-Llama-2-13b」シリーズを、llama.cppのNode.jsバインディングである「node-llama-cpp」を使ってM1 Mac (MacBook Air M1 16GB)で動かしてみました。
準備
- llama.cppをインストール
- モデルをダンロード
node-llama-cppを利用するには
モジュールのインストール
適切なフォルダを作り、その中でモジュールをインストール
npm install node-llama-cpp
モデルファイルの準備
モデル用フォルダを作成し、modelsフォルダの中に、ダウンロードしたモデル(ELYZA-japanese-Llama-2-13b-fast-instruct-q4_0.gguf)を配置する(コピー or 移動 or シンボリックリンク)
mkdir models
cd models
ln -s ダウンロードしたフォルダ/ELYZA-japanese-Llama-2-13b-fast-instruct-q4_0.gguf .
サンプルコード
Getting Startedを参考に、次のコードを作成
// example.mjs
mport {fileURLToPath} from "url";
import path from "path";
import {LlamaModel, LlamaContext, LlamaChatSession} from "node-llama-cpp";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const model = new LlamaModel({
modelPath: path.join(__dirname, "models", "ELYZA-japanese-Llama-2-13b-fast-instruct-q4_0.gguf")
});
const context = new LlamaContext({model});
const session = new LlamaChatSession({context});
// ----- チャット ----
const q1 = "富士山の高さは?";
console.log("User: " + q1);
const a1 = await session.prompt(q1);
console.log("AI: " + a1);
const q2 = "エベレストは?";
console.log("User: " + q2);
const a2 = await session.prompt(q2);
console.log("AI: " + a2);
実行
node exmample.mjs
実行結果の例
User: 富士山の高さは?
AI: 富士山の高さは3776.12 mです。
User: エベレストは?
AI: エベレストは8848 mです。
終わりに
Node.jsからllama.cppバインディングを使って、Elyzaの13Bモデルを動かすことができました。バイディングにはNode.js以外にもPythonをはじめとして色々な言語のものが用意されているようです。お試しあれ。
- llama.cppのDescriptionのBindingsを参照
Discussion