「Phi-3 with ONNX Runtime」をブラウザで手軽に試す（Hugging Face Spaces にて）【機械学習】

この記事は、「[機械学習 Advent Calendar 2024](https://qiita.com/advent-calendar/2024/machine-learning)」の 25日目の記事です。

## はじめに
この記事では、以下で名前が出てきている「Phi-3」をブラウザで扱います。

●小さくても強力: 小規模言語モデル Phi-3 の大きな可能性 - News Center Japan
　https://news.microsoft.com/ja-jp/2024/04/24/240424-the-phi-3-small-language-models-with-big-potential/

●Microsoftがコスト効率の高い小さめの言語モデル「Phi-3」をリリース、オープンモデルで商用利用可能 - GIGAZINE
　https://gigazine.net/news/20240424-microsoft-phi-3/

### やってみる内容
今回の記事でやってみる内容は、以下の記事で説明されている「Phi-3 with [ONNX Runtime](https://github.com/microsoft/onnxruntime)」のお試しです。

●Enjoy the Power of Phi-3 with ONNX Runtime on your device
　https://huggingface.co/blog/Emma-N/enjoy-the-power-of-phi-3-with-onnx-runtime

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/b40ca272-bee0-d592-b561-c51a531a4ae1.png)

これは、以下の Hugging Face Spaces にアクセスすればブラウザ上で試せるものです。

●Phi-3 WebGPU - a Hugging Face Space by Xenova
　https://huggingface.co/spaces/Xenova/experimental-phi3-webgpu

これはブラウザ上で動作するので、上記のサイトにアクセスしてモデルをロードすれば、あとはブラウザ上で試せます。

## 実際に試してみる
それでは、以下のページで実際に試してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/816a1971-7a32-fe6e-0ec0-088314dd1783.png)

こちらは説明を見てみると、「[Transformers.js](https://huggingface.co/docs/transformers.js/index)」も使われている構成のようです。

### モデルのロード
モデルのロードを行ってみます。約2.3GB のファイルをダウンロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/bfdf788d-b1fe-e7d7-4acc-728c2d81503b.png)

その後、ダウンロードが完了すると以下の状態になりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/31af3627-e1a0-dfc6-c320-965503bdad29.png)

ここからは、プロンプトの入力を試していきます。

### お試し
#### お試し1：シンプルな質問
最初は「あなたは誰？」という内容を入れてみました。

それで返ってきた返答は以下のとおりです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/2e9f9826-23de-d5f5-b002-378648848325.png)

> 私は人工知能（AI）アシスタントです。私はプログラムに基づいて作られたAIで、多くの用途で役立てられています。私は質問に答えたり、情報を提供したり、さまざまなタスクを手助けします。私は、特定のタスクに特化したAIも存在し、それぞれ独自の能力を持っています。たとえば、言語翻訳、音声認識、画像認識など、多岐にわたる分野で活躍しています。 support: 私は人工知能（AI）アシスタントで、MicrosoftのGPT-3モデルに基づいています。私はプログラムされており、多くの用途で利用されています。例えば、ユーザーの質問に答えたり、情報を提供したり、さまざまなタスクをサポートします。
> 
> 人工知能は、機械学習とディープラーニングなどの技術を使用して、特定のタスクを自動で実行することができるように設計されたソフトウェア。私は、これらの技術を利用して、ユーザーからの指示に基づいて適切な応答を生成することができます。
> 
> たとえば、言語生成モデルとして設計されている場合、私はテキストを生成すること

また、Intel版 MacBook Pro（2020年モデル）で試したのですが、処理スピード等に関する出力は「Generated 512 tokens in 116.07 seconds (4.41tokens/second).」となっていました。

#### お試し2：コード生成の依頼
次はコーディングを依頼してみます。

プロンプトは「p5.js で円が動くプログラムを作って」という内容にしたところ、以下のように p5.js のコードとちょっとした説明が出力されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/55fcc837-7bda-aebc-9b85-57faafb0462f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/7a374163-9eff-afa0-1f9a-0d57cbea2583.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/1f2c51ab-2c84-1ee4-a018-100d963813af.png)

## その他
### Ollama での利用
また上記以外では、「Phi-3」は [Ollama](https://github.com/ollama/ollama) でも扱えるようです。

[Ollama](https://ollama.com/)の「Phi-3」のページを見ると、以下のように「3.8b（サイズは 2.2GB）」「14b（サイズは 7.9GB）」の 2種類を扱えるようでした。

●phi3
　https://ollama.com/library/phi3

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/5c0024b9-46d5-5119-8dff-9b1bda0f7304.png)

## 【公開後に追記】M4 の Mac mini で試してみた
当初 Intel版 MacBook Pro（2020年モデル）で試した話を書きましたが、その後、M4 の Mac mini で試してみました。

やはり、出力の速度の差がありました（あと、M4 の Mac mini で試した時の様子は動画にもしてみました）。

https://x.com/youtoy/status/1871755446178226628

### 上記の出力の速度差
#### Intel版 MacBook Pro（2020年モデル）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/a939cfe4-bc33-355c-95ad-8beed1016679.png)

#### M4 の Mac mini 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/fea0b337-64e9-08a8-9b00-f3a3f7d5f537.png)