Ollama + Phi4-mini + Open WebUIをAlmalinux8上のdockerで実行する

「SAVACAN」担当のMKです。

今回は、個人的な検証としてMicrosoft社が開発した小規模言語モデル(SLM) Phi-4の軽量モデルであるPhi-4 miniを動かしてプログラム生成を試してみましたので、その結果をご紹介致します。
Phi-4 miniはMITライセンスで提供されているため商用利用も可能です。そのため、プロトタイピングや社内ツールへの活用にも適した選択肢となっています。

まず初めにPhi4とは何かについてご説明させて頂きます。

目次

Phi4とは何か

Phi-4は、140億のパラメータで構成される小規模言語モデル(Small Language Model: SLM)です。

Phiファミリー 公式サイト

SLMは一般的に、大規模言語モデル(Large Language Models:LLM)と比較してモデルサイズが小さく、軽量な動作が可能である点が特長です。しかしPhi-4は、数学的推論タスクにおいては一部のLLMを上回る性能を示すなど、非常に高いポテンシャルを持つモデルとして注目されています。

数学競技問題におけるPhi-4のベンチマーク

画像はMicrosoftの AIプラットフォームブログ より参照

また、Phi-4の軽量版として提供されているのがPhi-4 miniです。こちらは38億のパラメータで構成されており、より省メモリ・低リソース環境での活用を前提としたモデルです。
一般的には、モデルのパラメータ数が多いほど性能が高くなる傾向がありますが、Phi-4やPhi-4 miniのような効率的に設計されたSLMは、コンパクトでありながら高い性能を実現しています。

Phi-4環境を自分で構築するメリット・デメリット

ChatGPTを活用するだけでも十分に業務を効率化できると感じている方は多いかもしれません。しかし自身で環境を構築することで得られるメリットも存在します。

メリットデメリット
データが外部に送信されない(データ流出対策)システム利用料がかからない
オフラインネットワークでも使える
導入の難易度が高い
GPUなどのハードを自前で用意する必要がある
必要に応じて自身でアップデートが必要

動作確認環境

以下の環境で確認をしています。
GPUは2019年10月に発売された製品ですがPhi4-miniであれば想定通りの速度で動作しました。
Phi4を使うとメモリ容量が足りず、動作が非常に遅くなります。

OS:Almalinux8
CPU:4コア(Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz)
メモリ:16GB
GPU:CUDA 1408コア(NVIDAI GeForce GTX 1660 SUPER)
利用サービス:Ollama + Phi4-mini + Open WebUIのdocker版

利用サービスは、それぞれ以下の役割で動作しています。
AI:Phi4-mini
AIをマシン上で実行するツール:Ollama
ブラウザでPhi4-miniと対話するツール:Open WebUI

インストール内容紹介

前提作業としてAlmalinux8のOSインストールとDockerのインストールが完了しているものとさせて頂きます。

Nvidiaのドライバーをインストールします。

dnf config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo
dnf install kernel-devel-$(uname -r) kernel-headers-$(uname -r)
dnf install nvidia-driver nvidia-settings
dnf install nvidia-driver-cuda

サーバーの再起動で反映し、GPUを認識したか確認します。

[root@phi4 ~]# nvidia-smi 
Fri Apr 25 15:03:50 2025       
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 570.133.20             Driver Version: 570.133.20     CUDA Version: 12.8     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce GTX 1660 ...    Off |   00000000:01:00.0 Off |                  N/A |
| 41%   33C    P8              9W /  125W |       4MiB /   6144MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
                                                                                         
+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+
[root@phi4 ~]# 

DockerからOllamaを起動します。

docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

Ollamaにphi4-miniをインストールします。

docker exec -it ollama ollama run phi4-mini

phi4-miniインストールが完了するとコマンドライン上で対話できるようになりますが、このままでは不便ですのでOpen WebUIを起動してブラウザから対話できるようにします。

docker pull ghcr.io/open-webui/open-webui:main
docker run -d -p 3000:8080 -v open-webui:/app/backend/data --name open-webui ghcr.io/open-webui/open-webui:main

インストールが完了したらブラウザでアクセスしてみましょう!

Open WebUI設定

以下のIPアドレスでアクセスしてアカウントを作成します。

http://サーバーのIPアドレス:3000/

サインアップをクリックして作成したアカウントでサインインします。
インストール直後は対話ができませんのでモデルを設定します。

画面右上のユーザーアイコンをクリックします。

[設定]→[管理者設定]と進み[接続]→[Manage Ollama API Connections]の設定を以下に変更します。
http://サーバーのIPアドレス:11434

これでOpen WebUIからOllamaに接続ができるようになります。
[モデル]をクリックします。

Ollamaにインストールしたphi4-mini:latestが選択できるようになります。

保存してログイン後の画面に戻ると[phi4-mini:latest]のモデルが適用されたことが確認できます。

動作確認

同一ディレクトリ内のファイルを100日前の作成日で判定して削除するシェルを書いてください

と質問すると10秒ほどで以下のシェルを作成してくれました。

#!/bin/bash

# ファイルディレクトリを指定します(現在のディレクトリと仮定)
directory="/path/to/your/directory"

# 100日前の日付を取得する関数
get_100_days_ago() {
    date --date="$1 yesterday" +%Y-%m-%d
}

# ディレクトリ内のファイルが最後に更新された時点で100日前の日付まで遡るために `find` と `xargs -I {} sh -c '...'` を使用します。
current_date=$(date --utc +"%Y-%m-%d")
hundred_days_ago=$(( $(date --date="$1" +%s) - 86400 ))

# ディレクトリを通過し、100日前の日付まで遡るかつ削除する
find "$directory" -type f -print0 | while IFS= read -r -d $'\0' file; do
    # ファイルが最後に変更またはアクセスされた日付を取得します。
    modification_date=$(stat --format=%y "%s" "$file")

    if [[ ! $? -eq 0 ]]; then
        echo "Failed to get the status of '$file'. Skipping."
        continue
    fi

    # ファイルが最後に変更またはアクセスされた日付から100日前の日付まで遡るかどうかを確認します。
    modification_date_unix=$(date -d "$modification_date" +%s)
    if [[ $((modification_date_unix)) -lt $hundred_days_ago ]]; then
        # もともと最後にアクセスまたは変更された日付が100日前の日付前であるため削除します。
        echo "Removing '$file' (last modified on $modification_date)"
        rm "$file"
    fi
done

echo "Done removing files last modified over 100 days ago."

※このシェルはphi4-miniが作成したものをそのまま公開しています。動作の保証はありませんので実行しないでください。

実行中のGPUが使用状況は以下でした。

[root@phi4 ~]# nvidia-smi 
Wed May 21 12:55:13 2025       
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 570.133.20             Driver Version: 570.133.20     CUDA Version: 12.8     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce GTX 1660 ...    Off |   00000000:01:00.0 Off |                  N/A |
| 48%   43C    P8              9W /  125W |    3932MiB /   6144MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
                                                                                         
+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A          412298      C   /usr/bin/ollama                        3928MiB |
+-----------------------------------------------------------------------------------------+

GPU-UtilにGPU使用率、 Memory-Usageにメモリ使用率が表示されました。
Open WebUIを使用することでChatGPTのような操作で質問の仕方もできますので将来的にもう少し掘り下げて検証していきたいと思います。

最後に

現在はまだ検証段階ではありますが、今後もオープンソースで公開されているAI研究に積極的に取り組んでまいります。
検証結果につきましては、本ブログにて随時ご報告させていただく予定です。
今後ともぜひご覧いただけますと幸いです。

※本検証に利用したGPU製品はエンタープライズ用途での利用は許可されておりません。
 データセンターでの運用や、複数人での利用において制限がございますのでご注意ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次