この記事は ConoHa Advent Calendar 2024 16日目の記事です。
ワシは ConoHa WING で AI を動かしたいんじゃ
なぜかって?そこに愛(AI)があるから。
ConoHa WING は共用WEBホスティングサービスで、rootも使えないしGPUも使えないのでAIを動かす環境としてなんのメリットもありませんが、Linuxでコンソール使えるんだから超軽量モデルなら推論ぐらいいけんだろ、という淡い期待と知的好奇心を胸に抱いて進めていきます。
環境構築
動作環境として ollama をインストロールしていきます。
バイナリ配布で共有ライブラリを必要としないため、普通にConoHa WINGで動きます。
公式が配布しているインストールスクリプトは root 前提なので、GPU関係をカットして、一般ユーザーで $HOME
にインストールするようAIに頼んで改変しています、
mod_ollama-install.sh
#!/bin/bash
# Ollama Installer for Linux (General User, CPU-only)
set -eu
# Utility functions
status() { echo ">>> $*" >&2; }
error() { echo "ERROR: $*"; exit 1; }
warning() { echo "WARNING: $*"; }
# Temporary directory for downloads
TEMP_DIR=$(mktemp -d)
cleanup() { rm -rf "$TEMP_DIR"; }
trap cleanup EXIT
# Verify necessary tools are available
require_tools() {
local MISSING=''
for TOOL in curl awk grep sed tar; do
if ! command -v "$TOOL" >/dev/null; then
MISSING="$MISSING $TOOL"
fi
done
if [ -n "$MISSING" ]; then
error "Missing required tools: $MISSING. Please install them and try again."
fi
}
require_tools
# Determine architecture
ARCH=$(uname -m)
case "$ARCH" in
x86_64) ARCH="amd64" ;;
aarch64|arm64) ARCH="arm64" ;;
*) error "Unsupported architecture: $ARCH" ;;
esac
# Installation directories
INSTALL_DIR="$HOME/ollama"
BINDIR="$HOME/.local/bin"
# Create necessary directories
mkdir -p "$INSTALL_DIR" "$BINDIR"
# Download and extract Ollama
status "Downloading Ollama for Linux ($ARCH)..."
curl --fail --show-error --location --progress-bar \
"https://ollama.com/download/ollama-linux-${ARCH}.tgz" | \
tar -xzf - -C "$INSTALL_DIR"
# Create a symlink to the executable in the user's PATH
if [ "$INSTALL_DIR/ollama" != "$BINDIR/ollama" ]; then
status "Linking Ollama to $BINDIR"
ln -sf "$INSTALL_DIR/ollama" "$BINDIR/ollama"
fi
# Add $HOME/.local/bin to PATH if not already included
if ! echo "$PATH" | grep -q "$HOME/.local/bin"; then
status "Adding $HOME/.local/bin to PATH (temporarily)"
export PATH="$HOME/.local/bin:$PATH"
warning "To make this permanent, add 'export PATH=\$HOME/.local/bin:\$PATH' to your shell configuration file (e.g., ~/.bashrc or ~/.zshrc)."
fi
# Finish installation
status "Ollama installation complete!"
status "Run 'ollama' to start using it."
$ sh mod_ollama-install.sh
>>> Downloading Ollama for Linux (amd64)...
######################################################################## 100.0%
>>> Linking Ollama to /home/xxxxxxxx/.local/bin
>>> Ollama installation complete!
>>> Run 'ollama' to start using it.
まるで問題なくインストールできました。
実行
モデルをロードして実行していきます。今回はMicrosoftが開発し公開している phi-3-mini を使用します。これは 3.8B
のパラメータを持つ小型の言語モデル(SML: Small Language Model)で、Azure AI Studio や Hugging Face でも利用可能ですが、今回はローカルで実行すること自体が目的なので ollama で実行していきます。
$ ollama/bin/ollama serve
Couldn't find '/home/xxxxxxxx/.ollama/id_ed25519'. Generating new private key.
Your new public key is:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKdZ8YOn0ZpNDYWTfcOB1a4hnLlKdiXuOj+9F8fh4hiL
2024/12/03 21:42:37 routes.go:1197: INFO server config env="map[CUDA_VISIBLE_DEVICES: GPU_DEVICE_ORDINAL: HIP_VISIBLE_DEVICES: HSA_OVERRIDE_GFX_VERSION: HTTPS_PROXY: HTTP_PROXY: NO_PROXY: OLLAMA_DEBUG:false OLLAMA_FLASH_ATTENTION:false OLLAMA_GPU_OVERHEAD:0 OLLAMA_HOST:http://127.0.0.1:11434 OLLAMA_INTEL_GPU:false OLLAMA_KEEP_ALIVE:5m0s OLLAMA_LLM_LIBRARY: OLLAMA_LOAD_TIMEOUT:5m0s OLLAMA_MAX_LOADED_MODELS:0 OLLAMA_MAX_QUEUE:512 OLLAMA_MODELS:/home/r6210970/.ollama/models OLLAMA_MULTIUSER_CACHE:false OLLAMA_NOHISTORY:false OLLAMA_NOPRUNE:false OLLAMA_NUM_PARALLEL:0 OLLAMA_ORIGINS:[http://localhost https://localhost http://localhost:* https://localhost:* http://127.0.0.1 https://127.0.0.1 http://127.0.0.1:* https://127.0.0.1:* http://0.0.0.0 https://0.0.0.0 http://0.0.0.0:* https://0.0.0.0:* app://* file://* tauri://* vscode-webview://*] OLLAMA_SCHED_SPREAD:false OLLAMA_TMPDIR: ROCR_VISIBLE_DEVICES: http_proxy: https_proxy: no_proxy:]"
time=2024-12-03T21:42:37.997+09:00 level=INFO source=images.go:753 msg="total blobs: 0"
time=2024-12-03T21:42:37.997+09:00 level=INFO source=images.go:760 msg="total unused blobs removed: 0"
time=2024-12-03T21:42:37.997+09:00 level=INFO source=routes.go:1248 msg="Listening on 127.0.0.1:11434 (version 0.4.7)"
time=2024-12-03T21:42:37.998+09:00 level=INFO source=common.go:135 msg="extracting embedded files" dir=/home/xxxxxxxx/tmp/ollama2882729364/runners
time=2024-12-03T21:42:38.063+09:00 level=INFO source=common.go:49 msg="Dynamic LLM libraries" runners="[cuda_v12 rocm cpu cpu_avx cpu_avx2 cuda_v11]"
time=2024-12-03T21:42:38.063+09:00 level=INFO source=gpu.go:221 msg="looking for compatible GPUs"
time=2024-12-03T21:42:38.081+09:00 level=INFO source=gpu.go:386 msg="no compatible GPUs were discovered"
time=2024-12-03T21:42:38.081+09:00 level=INFO source=types.go:123 msg="inference compute" id=0 library=cpu variant=avx2 compute="" driver=0.0 name="" total="377.2 GiB" available="220.5 GiB"
ollama がサービスとして立ち上がりました。※ConoHa WINGはユーザーによるサービスの起動をサポートしていないので、長時間稼働させたり高負荷を掛けるとkillされる場合があります。
モデルをロードして実行してみます。初回はモデルのダウンロードがあります。
$ ollama/bin/ollama run phi3
pulling manifest
pulling 633fc5be925f... 100% ▕████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 2.2 GB
pulling fa8235e5b48f... 100% ▕████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 1.1 KB
pulling 542b217f179c... 100% ▕████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 148 B
pulling 8dde1baf1db0... 100% ▕████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 78 B
pulling 23291dc44752... 100% ▕████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 483 B
verifying sha256 digest
writing manifest
success
>>> 今日の天気は?
今日の湿気 は高く、多くの人々が外出を控えることをおすすめします。雨予報では明日午後から台風による一時的な降水が見込まれています。
>>>
>>> 今日も渋谷で5時?
今日の渋谷では、まだ5時になりません。標準時間によると現在は6時45分です。渋谷は東京都であるため、一般的な標準時間が適用されています。しかし、夏期には日本時間が適用されることがあり、その場合は現在は6時45分でなく、10時45分(12時Error: an error was encountered while running the model: unexpected EOF
動きました。日本語の質問には日本語で答えてくれます。一応。。。
何かエラーが起こってますね。
$ top -c
top - 22:00:30 up 362 days, 8:47, 3 users, load average: 2.76, 2.67, 2.94
Tasks: 9 total, 1 running, 8 sleeping, 0 stopped, 0 zombie
%Cpu(s): 11.0 us, 4.5 sy, 0.0 ni, 84.2 id, 0.0 wa, 0.1 hi, 0.1 si, 0.0 st
KiB Mem : 39557494+total, 20642198+free, 15441641+used, 34736532 buff/cache
KiB Swap: 4194300 total, 4177404 free, 16896 used. 22362560+avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
45399 xxxxxxxx 20 0 7668704 5.1g 6964 S 601.7 1.4 4:31.15 /home/xxxxxxxx/tmp/ollama1153868121/runners/cpu_avx2/ollama_llama_server --model /home/xxxxxxxx/.ollama/models/blobs/sha256-633fc5be925f9a484b61d6f9b9a78021eeb462100bd557309f01ba84cac26adf --ctx-siz+
48895 xxxxxxxx 20 0 2929676 53416 34000 S 0.3 0.0 0:07.71 ollama/bin/ollama serve
49161 xxxxxxxx 20 0 162012 4484 3868 R 0.3 0.0 0:00.21 top -c
54850 xxxxxxxx 20 0 2016464 18796 11520 S 0.3 0.0 0:00.20 ollama/bin/ollama run phi3
8338 xxxxxxxx 20 0 116528 4372 3176 S 0.0 0.0 0:00.01 -bash
32353 xxxxxxxx 20 0 116528 4448 3236 S 0.0 0.0 0:00.04 -bash
40969 xxxxxxxx 20 0 116528 4448 3304 S 0.0 0.0 0:00.00 -bash
はい。CPU使用率が割り当て最大の 600%(6vCPU相当)
に到達しています。ダミダこりゃ。でもメモリは意外と使ってませんね。なお、
$ ollama/bin/ollama run phi3
>>> 石破茂という政治家について説明して
石破茂(Ishi Matsu)は、日本の政治家であり、2012年5月16日に党内での首相選手となった。背景には、経済学者としても知られることがあり、国土交通省や「石破」という運用事業で尊敬を集めていた。若くして高い立場に就き初めており、その迅速な進出が注目されることから、政治の世界におけるError: an error was encountered while running the model: GGML_ASSERT(rc == 0) failed
回答の精度はまあこんなもんです。ある程度日本語として成立する文章を吐いていますが、知識の網羅性や内容の正確性でLLMと比較してはいけません。
このモデルはサイズを抑えるために英語中心の厳選された少量のデータで訓練されており、英語では GPT-3.5-Turbo にも匹敵する精度が出るとされていますが、日本語や日本ローカルの情報では能力を今一つ発揮できないということもあるようです。
というわけで
とりあえず ConoHa WING で AI 動かしてみたよというお話でした。
(負荷要因になる可能性があるのであまりお勧めするものではありません。)
それでは皆様よいホリデーシーズンをお迎えください。