1. 実装のゴール
M4 Maxのパワーを活かし、ローカルLLM環境(llama.cpp)をターミナルなしで制御することを目指します。
メニューバーにステータス(起動中/停止中)を表示。
ワンクリックで
llama-serverを起動・停止。SwiftBarの仕様に基づき、エラー(はてなマーク)を徹底排除する。
2. 起動・制御用シェルスクリプト
今回作成した llama_control.1s.sh の全容です。
#!/bin/bash
# --- 環境設定 ---
# GUIアプリから呼ばれるため、PATHを明示してコマンドを見失わないようにする
export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
# パス設定(各自の環境に合わせて変更)
MODEL_PATH="/Users/hidenari/models/Qwen3.5-9B-Q8_0.gguf"
LOG_FILE="/tmp/llama.log"
# SwiftBarに無視させるため、PIDファイルはドット(.)で始めるのがコツ
PID_FILE="/Users/hidenari/Documents/SwiftBar/.llama-server.pid"
# 自分自身のフルパス(SwiftBarの再帰呼び出しを確実にするため)
SELF_PATH="/Users/hidenari/Documents/SwiftBar/llama_control.1s.sh"
# --- プロセスチェック ---
# pgrepでプロセスを直接確認。名前で狙い撃ち
CURRENT_PID=$(pgrep -f "llama-server.*Qwen3.5-9B")
if [ -n "$CURRENT_PID" ]; then
STATUS="Running"
COLOR="green"
ICON="🤖"
else
STATUS="Stopped"
COLOR="red"
ICON="💤"
fi
# --- SwiftBarへの出力 ---
# メニューバーの表示
echo "$ICON LLM: $STATUS | color=$COLOR"
echo "---"
if [ "$STATUS" = "Stopped" ]; then
# 起動コマンド:ターミナルを開かずバックグラウンドで実行
echo "Launch Qwen 3.5 | bash='$SELF_PATH' param1=start terminal=false"
else
# 停止コマンド
echo "Stop llama-server | bash='$SELF_PATH' param1=stop terminal=false"
echo "PID: $CURRENT_PID"
fi
# --- 実行ロジック(SwiftBarからの引数 $1 で分岐) ---
case "$1" in
start)
if [ -z "$CURRENT_PID" ]; then
cd /Users/hidenari/llama.cpp/build/bin/
# M4 Maxの性能をフル活用(GPU全レイヤー、Flash Attention有効)
nohup ./llama-server -m "$MODEL_PATH" -c 65536 --n-gpu-layers 99 --port 8080 --flash-attn on > "$LOG_FILE" 2>&1 &
sleep 2
fi
;;
stop)
# 確実にプロセスを終了させる
TARGET_PID=$(pgrep -f "llama-server.*Qwen3.5-9B")
[ -n "$TARGET_PID" ] && kill -9 $TARGET_PID
;;
esac
---------------------------------------------------3. こだわりの「記載過程」とエンジニアの知恵
① 「はてなマーク」との決別:隠しファイルの活用
SwiftBarはディレクトリ内の全ファイルを自動実行しようとします。以前、プロセスIDを保存する llama-server.pidを置いていたところ、SwiftBarがそれを「スクリプト」と勘違いして実行しようとし、エラー(はてなマーク)が発生しました。
対策: ファイル名を
.llama-server.pidとドットから始まる隠しファイルに。SwiftBarはこのファイルを無視するため、メニューバーがクリーンに保たれます。
② 「自分自身」をフルパスで定義する
GUIアプリであるSwiftBarから呼び出される際、相対パス($0)は不安定になりがちです。
対策:
SELF_PATH変数にスクリプトのフルパスを直接記載。これにより、メニューからクリックした際のコマンド実行ミスをゼロにしました。
③ M4 Maxのポテンシャルを活かす
起動パラメータに --n-gpu-layers 99 と --flash-attn on を指定。
これにより、Qwen 3.5クラスのモデルも爆速で動作。ハードの性能を最大限引き出すのがインフラエンジニアの醍醐味です。
0 件のコメント:
コメントを投稿