🦙

M1 Macでnode-llama-cppを使ってElyza-13bを動かしてみた

2024/01/04に公開

はじめに

「ELYZA-japanese-Llama-2-13b」シリーズを、llama.cppのNode.jsバインディングである「node-llama-cpp」を使ってM1 Mac (MacBook Air M1 16GB)で動かしてみました。

準備

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をはじめとして色々な言語のものが用意されているようです。お試しあれ。

Discussion