はじめに
プログラミングの際にAIにアシストして欲しくてContinueというのを使いたいと思っています。github.com
Gemini Code AssistやGitHub Copilotが制限はあるもののほぼ無償で使えるこの時代にローカルにこだわる必要があるのかどうかは疑問です。
ローカルで行うメリットは「ネットワークを必要としない」「自分のプログラムがクラウド上にさらされない」などでしょうか。
後者は趣味でプログラミングを楽しんでいる自分には関係ないことですが。
目的
ContinueではチャットのためのInstructモデルとコード補完のためのBaseモデルを別々に用意する必要があります。今回WSL2上のOllamaを使って2つのモデルを同時にサーバーとして立ち上げることに挑戦しました。Ollamaのインストール
1行で済みます。こちらを参照させて頂きました。(CUDAがインストールされている前提です)
curl -fsSL https://ollama.com/install.sh | sh
この方法でインストールするとWSL2を立ち上げると同時にサービスが始まります。今回は二つのサーバーを立ち上げたいので自動的にサービスが開始されるのを停止する必要があります。こちらを参照させて頂きました。
sudo systemctl stop ollama sudo systemctl disable ollama sudo rm /etc/systemd/system/ollama.service
サーバーを立ち上げるためのシェルスクリプト(拡張子.sh)を書きました。いやClaude 3.7 Sonnetに書いてもらいました。ローカルにこだわると言っておきながらここはクラウドサービスを利用しました。ローカルで実行できるモデルはClaude 3.7 Sonnetに性能で到底及びません。
#!/bin/bash # 1つ目のインスタンス(デフォルトポート:11434)を起動 ollama serve & OLLAMA_PID_1=$! # サーバー1の起動を待つ echo "サーバー1を起動中..." sleep 5 while ! curl -s http://localhost:11434/api/version > /dev/null; do echo "サーバー1の起動を待っています..." sleep 2 done echo "サーバー1が起動しました" # 2つ目のインスタンス(別ポート:11435)を起動 OLLAMA_HOST=127.0.0.1:11435 ollama serve & OLLAMA_PID_2=$! # サーバー2の起動を待つ echo "サーバー2を起動中..." sleep 5 while ! curl -s http://localhost:11435/api/version > /dev/null; do echo "サーバー2の起動を待っています..." sleep 2 done echo "サーバー2が起動しました" # 1つ目のサーバーにモデルをロード echo "qwen2.5-coder:7b-instruct-q4_K_Mモデルをロード中..." ollama pull qwen2.5-coder:7b-instruct-q4_K_M # 2つ目のサーバーにモデルをロード echo "qwen2.5-coder:7b-base-q4_K_Mモデルをロード中..." OLLAMA_HOST=127.0.0.1:11435 ollama pull qwen2.5-coder:7b-base-q4_K_M echo "両方のモデルのロードが完了しました" echo "サーバー1のPID: $OLLAMA_PID_1" echo "サーバー2のPID: $OLLAMA_PID_2"
バックグラウンドで実行しているOllamaは
fg
でプロセスをフォアグラウンドに持ってきて、その後Ctrl+Cで終了させます。
VS codeのContinue側のjsonファイル
"models": [ { "title": "qwen2.5-coder:7b-instruct-q4_K_M", "model": "qwen2.5-coder:7b-instruct-q4_K_M", "apiBase": "http://localhost:11434", "provider": "ollama" } ], "tabAutocompleteModel": { "title": "qwen2.5-coder:7b-base-q4_K_M", "model": "qwen2.5-coder:7b-base-q4_K_M", "apiBase": "http://localhost:11435", "provider": "ollama" },
関連記事
touch-sp.hatenablog.comtouch-sp.hatenablog.com