日本語LLMを使って生成AI用のOpenAI互換のAPIサーバーを構築する手順
この資料は、2023年11月現在のものです。
この資料では、日本語LLMを使って、OpenAI互換の生成AIのAPIサーバーをパソコン上に構築し、トンネルサービスのngrokでインターネット上に一時的に公開するまでを説明しています。
- 1 動作確認に用いたパソコン環境
- 2 LLMの選択
- 3 この資料により実現できること
- 4 生成AIのAPIサーバーの準備
- 4.1 Linuxをお使いの場合 ( Windows 10/11でWSL2を含む)
- 4.1.1 前提
- 4.1.2 WSL2を使って、Linux(Ubuntu)環境を用意する際の注意点(WSL2を使っていない場合は省略)
- 4.1.3 Python用仮想環境の用意
- 4.1.4 作業用ディレクトリの作成
- 4.1.5 日本語LLMのモデルダウンロード
- 4.1.6 Python用仮想環境を作ります
- 4.1.7 llama-cpp-pythonをインストールします
- 4.1.8 OpenAI互換のAPIサーバー機能の追加
- 4.1.9 APIサーバーの起動
- 4.1.9.1 モデルを指定して起動
- 4.1.9.2 実行結果 ( 膨大なので、重要な最後の方を表示 )
- 4.2 Macをお使いの場合 ( Intel Mac / Apple シリコン Mシリーズ )
- 4.2.1 日本語LLMのモデルダウンロード
- 4.2.2 ターミナルアプリを起動
- 4.2.3 Pythonのインストール
- 4.2.4 作業用ディレクトリの作成
- 4.2.5 LLMを作業用ディレクトリにコピー
- 4.2.6 Python用仮想環境の作成
- 4.2.7 pipをアップグレード
- 4.2.8 llama-cpp-pythonをインストール
- 4.2.9 OpenAI互換のAPIサーバー機能の追加
- 4.2.10 APIサーバーの起動
- 4.2.10.1 モデルを指定して起動
- 4.2.10.2 実行結果 ( 膨大なので、重要な最後の方を表示 )
- 4.2.11 Macが使っているIPアドレスの確認
- 4.1 Linuxをお使いの場合 ( Windows 10/11でWSL2を含む)
- 5 Webブラウザで、生成AIのAPIサーバーにアクセス
- 6 ローコード開発ツール Node-REDから、呼び出してみよう
- 7 パソコン上の生成AIのAPIサーバーをインターネット向けに公開する方法
- 8 APIサーバーの使用停止と再利用時
- 8.1 使用停止方法
- 8.2 停止したAPIサーバーを起動する場合
動作確認に用いたパソコン環境
100文字程度の文章を生成するまでにかかる時間として、数分かかる(だいたい3~5分くらい)
Windows 10
第7世代 Core i5 , 2コア4スレッド対応
メモリ 8GB
SSD搭載
中古として買うと、1万円台後半から2万台前半くらい。
100文字程度の文章を生成するまでにかかる時間として、数十秒かかる(200文字前後だと2分弱くらい)
Windows 10/11
第10世代 Core i5 , 4コア8スレッド対応
メモリ 16GB
SSD搭載
中古として買うと、3万円台~4万円台。
新品として買うと、第10世代のIntel CPUは古いため、より高性能なAMD Ryzen 7000番台搭載のラップトップ(ノートパソコン)が、6万円台くらいから買えるので、余裕があれば新品の方が望ましい。第13世代 Intel Core i5 搭載だと、7万円台前半から買える。
Mac
Intel版 MacBook Pro , メモリ16GB搭載 , 2020年に発売されたもの : MWP72J/A (Mid 2020) , 中古で買うと、7万円台くらいから買える。
M1 iMac , メモリ16GB搭載 , MGTF3J/A (Mid 2021) , 新品で17万円くらいで買える。
LLMの選択
本資料は、生成AI機能を持つAPIサーバーを構築するにあたり、LLMとして「ELYZA-japanese-Llama-2-7b」を選んでいます。
LLMを用いるために、「llama-cpp-python」を使います。「llama-cpp-python」でLLMを用いるには、「gguf」形式である必要があり、「gguf」形式で配布されている「ELYZA-japanese-Llama-2-7b-fast-instruct-gguf」を用います。
この資料により実現できること
100文字で説明せよと指示したものの、実際は260文字程度出力された。
生成AIのAPIサーバーの準備
Linuxをお使いの場合 ( Windows 10/11でWSL2を含む)
前提
Ubuntu 22.04 を前提とします。Ubutnu 22.04 は、2023年10月現在、2027年4月までのサポートが約束されており、かつ無料で使えるLinuxディストリビューションとして使い易いです。
WSL2を使って、Linux(Ubuntu)環境を用意する際の注意点(WSL2を使っていない場合は省略)
Microsoft Storeから、Ubuntu 22.04 をインストールする前に、「Visual Studio Build Tools 2022」をインストールしましょう。「Visual Studio Build Tools 2022」はC++対応のビルドツールがあり、WSL2上のUbuntuでllama-cpp-pythonがインストールエラーになることを防ぎます。
https://visualstudio.microsoft.com/ja/downloads/ にアクセスし、「Tools for Visual Studio」>>Build Tools for Visual Studio 2022の「ダウンロード」をクリックします。
「vs_BuildTools .exe」をダウンロードします。
ダウンロードした「vs_BuildTools.exe」をダブルクリックし、画面指示に従って進めます。
「C++ によるデスクトップ開発」をクリックし、右下の「インストール」をクリックします。
「Visual Studio Build Tools 2022」がインストールされます。
Microsoft Storeから、Ubuntu 22.04 をインストールします。
Ubuntu 22.04 をWindowsのスタートメニューから起動します。
Python用仮想環境の用意
次のコマンドを実行します。
sudo apt update -y && sudo apt upgrade -y
sudo apt install -y python3-pip python3-venv python3-dev
作業用ディレクトリの作成
次のコマンドを実行します。
mkdir -p llmtest
cd llmtest/
日本語LLMのモデルダウンロード
日本語LLMのモデルをなんらかの取り組みや講義でダウンロードしている場合は、ダウンロード済みのモデルを作業用ディレクトリに移動してください。
日本語LLMのモデルをダウンロードしていない場合は、作業用ディレクトリで、次のコマンドを実行します。
Linux環境では、wgetコマンドを用います。「ELYZA-japanese-Llama-2-7b-fast-instruct-q8_0.gguf」と「ELYZA-japanese-Llama-2-7b-fast-instruct-q2_K.gguf」、どちらかをダウンロードします。
2023年11月現在、「ELYZA-japanese-Llama-2-7b-fast-instruct-q8_0.gguf」としました。7GB近く(2023年11月現在、6.8GB)あるため、ダウンロードに数十分から数時間かかります。
wget https://huggingface.co/mmnga/ELYZA-japanese-Llama-2-7b-fast-instruct-gguf/resolve/main/ELYZA-japanese-Llama-2-7b-fast-instruct-q8_0.gguf
7GB近くのダウンロードを待つ時間がない場合は、性能が落ちますが、半分以下の3GB近くのモデルをダウンロードする手もあります。「ELYZA-japanese-Llama-2-7b-fast-instruct-q2_K.gguf」
Python用仮想環境を作ります
次のコマンドを実行します。ここでは、myvenvという名前にします。
llama-cpp-pythonをインストールします
次のコマンドを実行します。
インストール成功のメッセージ(インストール作業を行った時期により、表示されるバージョン番号が異なるので注意)
OpenAI互換のAPIサーバー機能の追加
次のコマンドを実行します。
インストール成功のメッセージ(インストール作業を行った時期により、表示されるバージョン番号が異なるので注意)
APIサーバーの起動
モデルを指定して起動
「ELYZA-japanese-Llama-2-7b-fast-instruct-q8_0.gguf」と「ELYZA-japanese-Llama-2-7b-fast-instruct-q2_K.gguf」のどちらか一方、ダウンロードしてある方で、APIサーバーを起動します。
ELYZA-japanese-Llama-2-7b-fast-instruct-q8_0.gguf の場合
localhost以外からでも、IPアドレスでも利用できるように、--host 0.0.0.0 を指定し、次のコマンドを実行します。
ELYZA-japanese-Llama-2-7b-fast-instruct-q2_K.gguf の場合
localhost以外からでも、IPアドレスでも利用できるように、--host 0.0.0.0 を指定し、次のコマンドを実行します。
実行結果 ( 膨大なので、重要な最後の方を表示 )
Macをお使いの場合 ( Intel Mac / Apple シリコン Mシリーズ )
日本語LLMのモデルダウンロード
下記の日本語LLMのモデルをダウンロードします。日本語LLMのモデルをなんらかの取り組みや講義でダウンロードしている場合は、スキップして次の「ターミナルアプリを起動」に進んでください。
SafariやGoogle Chrome等のWebブラウザで、下記にアクセスすればダウンロードが始まります。
2023年11月現在、「ELYZA-japanese-Llama-2-7b-fast-instruct-q8_0.gguf」としました。7GB近く(2023年11月現在、6.8GB)あるため、ダウンロードに数十分から数時間かかります。
7GB近くのダウンロードを待つ時間がない場合は、性能が落ちますが、半分以下の3GB近くのモデルをダウンロードする手もあります。「ELYZA-japanese-Llama-2-7b-fast-instruct-q2_K.gguf」
お使いのMacのダウンロードフォルダに保存します。どこにダウンロードされたかは、ご自分のMacなのですから把握しておきましょう。
ターミナルアプリを起動
ターミナルアプリを起動します。アプリケーションフォルダ内のユーティリティフォルダに格納されています。Macを使って、プログラミングする人は1度は使ったことがあるはず。
Pythonのインストール
昔は別として、現在のMacには標準でPythonが入っていないため、自分でPythonをインストールする必要があります。既にPython3系で3.8以上が入っている場合は、飛ばしてください。
定番のHomebrewを使います。以下を参考に、HomebrewによるPythonのインストールを行ってください。
作業用ディレクトリの作成
次のコマンドを実行します。
LLMを作業用ディレクトリにコピー
次のコマンドを実行し、作成した作業用ディレクトリに、ダウンロードしておいたLLMをコピーします。
LLMは、ダウンロードフォルダにダウンロードした前提にしています。
ダウンロードした場所が異なる場合は、Downloads/ を適切なパスに読み替えてください。
ELYZA-japanese-Llama-2-7b-fast-instruct-q8_0.gguf の場合
ELYZA-japanese-Llama-2-7b-fast-instruct-q2_K.gguf の場合
Python用仮想環境の作成
次のコマンドを実行します。作成済みの作業用ディレクトリに移動し、myvenvという名称の仮想環境を作ります。
pipをアップグレード
次のコマンドを実行します。
アップグレード成功のメッセージ ( 2023年11月現在 )
llama-cpp-pythonをインストール
次のコマンドを実行します。
インストール成功のメッセージ(インストール作業を行った時期により、表示されるバージョン番号が異なるので注意)
OpenAI互換のAPIサーバー機能の追加
次のコマンドを実行します。
インストール成功のメッセージ(インストール作業を行った時期により、表示されるバージョン番号が異なるので注意)
APIサーバーの起動
モデルを指定して起動
「ELYZA-japanese-Llama-2-7b-fast-instruct-q8_0.gguf」と「ELYZA-japanese-Llama-2-7b-fast-instruct-q2_K.gguf」のどちらか一方、ダウンロードしてある方で、APIサーバーを起動します。
ELYZA-japanese-Llama-2-7b-fast-instruct-q8_0.gguf の場合
localhost以外からでも、IPアドレスでも利用できるように、--host 0.0.0.0 を指定し、次のコマンドを実行します。
ELYZA-japanese-Llama-2-7b-fast-instruct-q2_K.gguf の場合
localhost以外からでも、IPアドレスでも利用できるように、--host 0.0.0.0 を指定し、次のコマンドを実行します。
実行結果 ( 膨大なので、重要な最後の方を表示 )
途中、下図のような警告メッセージが表示されますので、「許可」をクリックします。
Macが使っているIPアドレスの確認
Macの「システム設定」画面の「ネットワーク」で、IPアドレスを確認します。「Wi-Fi」を使っている場合で、接続しているネットワーク(例 iPhone)の「詳細」をクリックすることで、Macに割り当てられているIPアドレスがわかります。
表示されたIPアドレス
Webブラウザで、生成AIのAPIサーバーにアクセス
LinuxまたはMacのIPアドレスを使い、次のURLにアクセスします。http:// <IPアドレス> :8000/docs (例 http://172.20.10.7:8000/docs , またはhttp://127.0.0.1:8000/docs)
APIサーバーのUIが表示されます。APIサーバー内に記載されている方法で処理することで、文章生成を行う生成AIとして機能します。
Chat風のテキスト生成は、「Create Chat Completion」で、「POST」のメソッドを選びます。「Try it out」をクリックします。「Try it out」は、動作確認の意があります。
「Request body」に、下記のように生成AIに対する質問文(プロンプト)をJSON形式で入力します。
「Execute」をクリックします。
今回は100文字前後なので、数秒でレスポンスがありました。指定した文字数や質問内容次第では、数十秒以上かかることもあります。
レスポンス画面の最初は、リクエスト内容を「Curl」で実施した場合について表示されます。その下に「Request URL」が表示されます。
「Request URL」の下に、JSON形式で「Response body」表示されます。「JSON」形式ですから、パースすることで、さまざまなAPIに抽出した文章を渡すことができます。
「Response body」の下に、「Response headers」が表示されます。
今回は、パソコン上のLinux環境やMacで動かしていますが、実際にLinuxやMacのサーバーで実行すれば、より多くのAPIと連携できることは想像に難くありません。
ローコード開発ツール Node-REDから、呼び出してみよう
APIサーバーをたてたら、次はAPI連携によるサービス開発に取り組みましょう。
パソコン上の生成AIのAPIサーバーをインターネット向けに公開する方法
パソコン上で動くAPIサーバーをインターネットから利用できるようにするにはトンネルサービスの「ngrok」を使います。ngrokは、ローカル環境(今回はパソコン)上で動くサービス(今回はAPIサーバー)をインターネットに向け公開することができるトンネルサービスです。使い方は、下記をご覧ください。
ngrokを使うことで、起動したAPIサーバーをインターネットに公開できるので、様々なインターネットサービスと、自分で用意した生成AI環境を連携させるための開発や検証に役立ちます。
APIサーバーの使用停止と再利用時
使用停止方法
APIサーバーを終了するには、ターミナル画面に戻り、Ctrl + c キーを押します。これで、APIサーバーが停止します。
その後、Python仮想環境の使用を終えるために、次のコマンドを実行します。
これで、開発・検証環境が停止します。
停止したAPIサーバーを起動する場合
作業用ディレクトリで、作成済みのPython仮想環境を立ち上げるため、次のコマンドを実行します。
その後、APIサーバー起動コマンドを実行します。