「SAVACAN」担当のMKです。
今回は、個人的な検証としてMicrosoft社が開発した小規模言語モデル(SLM) Phi-4の軽量モデルであるPhi-4 miniを動かしてプログラム生成を試してみましたので、その結果をご紹介致します。
Phi-4 miniはMITライセンスで提供されているため商用利用も可能です。そのため、プロトタイピングや社内ツールへの活用にも適した選択肢となっています。
まず初めにPhi4とは何かについてご説明させて頂きます。
Phi4とは何か
Phi-4は、140億のパラメータで構成される小規模言語モデル(Small Language Model: SLM)です。
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研究に積極的に取り組んでまいります。
検証結果につきましては、本ブログにて随時ご報告させていただく予定です。
今後ともぜひご覧いただけますと幸いです。