Llama 3.1 と Streamlit で AI チャットアプリを作る

Pocket

はじめに

この記事では、オープンソースの大規模言語モデルである Llama 3.1 と、Streamlit を使って AI チャットアプリを作る方法を紹介します。

対象読者は、OpenAI 等の API 利用ではなく、自分で大規模言語モデルをホスティングしたい、という方を想定しております。大規模言語モデルは Llama 3.1 を取り上げていますが、他のモデルでも実施可能です。

ホスティングの環境はクラウド、オンプレミスどちらでも可能です。この記事では AWS EC2 の GPU インスタンスを利用します。

Llama 3.1 とは?

Llama 3.1 は、 Meta 社が開発したオープンソースの大規模言語モデルです。

8B(= 8 Billion = 80億), 70B, 405B という、3つのパラメータサイズのモデルが提供されています。サイズが大きいほど性能がよくなりますが、動かすのに必要な GPU のスペックも高くなります。

今回は 8B モデルの meta-llama/Meta-Llama-3.1-8B-Instruct を利用します。

AI チャットアプリの構成

今回作る AI チャットアプリの構成は次の図のとおりです。

 

Streamlit のアプリから Llama 3.1 の推論サーバーにリクエストを投げて結果を表示する、という流れです。Llama 3.1 のモデルは Hugging Face からダウンロードされます。

Streamlit は Python のみで Web アプリを開発できるフレームワークです。こちらを使ってチャットアプリを作ります。

vLLM は Python で高速に大規模言語モデルを動かすライブラリです。こちらで Llama 3.1 の推論サーバーを立てます。

Hugging Face は、機械学習のモデルやデータセット等を提供するプラットフォームです。こちらから Llama 3.1 のモデル(meta-llama/Meta-Llama-3.1-8B-Instruct) がダウンロードされます。

GPU サーバーの準備

モデルを動かすためのサーバーを準備していきます。

今回のモデル(meta-llama/Meta-Llama-3.1-8B-Instruct)だと GPU メモリが 16GB ほど必要となります。必要な GPU メモリは、 Hugging Face のモデルのページから「Files and versions」を開いて、パラメータファイル(.safetensors)のサイズを合算して見積もれます。

今回は例として AWS EC2 インスタンスの g5.xlarge (GPUメモリ: 24GB) を利用します。g5.xlarge の料金は1時間当たり $1.459 となります(東京リージョン 2024/09/12 時点)。

AWS マネジメントコンソールを開き、下記の設定でインスタンスを起動します。

AMI: Deep Learning Base OSS Nvidia Driver AMI (Amazon Linux 2)

インスタンスタイプ: g5.xlarge

キーペア: 新しく作成

ネットワーク設定: パブリックサブネットに配置して、パブリックIPの自動割り当てを有効化

セキュリティグループ: インバウンドルールで ssh のみ許可、アウトバウンドルールはすべて許可

ストレージ: 100 GB ほど (AMIとモデルのサイズを合わせて 80 ~ 90 GB となるため、余裕をもって設定してください)

キーペアはダウンロードしておきます。

インスタンス起動後、ローカルから ssh で接続できれば OK です。

Python 実行環境の準備

Python の実行環境として uv を使います。

uv は Python のパッケージとプロジェクトを管理するツールです。

ssh で接続したインスタンス上で、次のコマンドで uv をインストールします。

一度ターミナルを閉じて、再度インスタンスに ssh すると、uv コマンドが使えるようになります。

uv でチャットアプリ用のプロジェクトを作ります。

これで Python のプログラムを動かす準備ができました。

Hugging Face の設定

Llama 3.1 を使うにあたり、Hugging Face でモデルの使用許諾を得る必要があります。

Hugging Face にログインしてモデルのページから使用許諾を得てください。承認まで数分かかります。

また、Hugging Face の設定画面からアクセストークンを作成します。インスタンス上の ~/.bashrc に環境変数 HF_TOKEN を追記します。

環境変数 HF_TOKEN を設定することで、後述する vLLM による推論サーバーの初回起動時に Hugging Face からモデルがダウンロードされます。

vLLM で推論サーバー起動

vLLM で Llama 3.1 を動かしていきます。

インスタンス上で、uv にて vLLM をインストールします。

vLLM で OpenAI API 準拠のサーバーを起動します。デフォルトではポート8000でサーバーが起動します。自動起動したい場合は systemd でサービス化するとよいでしょう。

初回起動時に Hugging Face からモデルがダウンロードされます。

別セッションを開き、サーバーにリクエストを投げます。

レスポンスが返ってくることを確認します。

Streamlit で AI チャットアプリ作成

Streamlit で AI チャットアプリを作成していきます。

インスタンス上で、uv にてアプリに必要なパッケージをインストールします。

アプリのソースコードを書きます。

次のソースコードをコピペして保存してください。

ソースコード中の os.environ[“OPENAI_API_KEY”] の値は dummy のまま書き換えなくて大丈夫です。vLLM のサーバーで API キーを設定していないため値はなんでもいいです。

アプリを起動します。デフォルトではポート8501で Streamlit のサーバーが起動します。こちらも自動起動したい場合は systemd でサービス化するとよいでしょう。

ローカルからSSHポートフォワードします。

ブラウザで localhost:8501 にアクセスします。

質問を入力して回答が返ってきたら OK です。おつかれさまでした!

おわりに

Llama 3.1 と、Streamlit を使って AI チャットアプリを作る方法を紹介しました。

クラウドやオンプレミス環境で大規模言語モデルをホスティングする際のとっかかりとして、参考になれば幸いです。

お問い合わせ先

執筆者プロフィール

Yamaguchi Tatsuya
Yamaguchi Tatsuyatdi デジタルイノベーション技術部
AWS上で使えるツールの開発やフロントエンドの調査、生成系AIの調査等を行っています。最近は AWS の CDK やサーバーレスに興味があります。
Pocket

関連記事