llama-stackを試す
llama-3.2の裏でこんなものが。
GitHubレポジトリ
Llama Stack
このリポジトリには、Llama Stack API仕様、APIプロバイダー、Llama Stackディストリビューションが含まれています。
Llama Stackは、生成型AIアプリケーションを市場に投入するために必要なビルディングブロックを定義し、標準化します。これらのブロックは、モデルのトレーニングや微調整から、製品評価、本番環境でのAIエージェントの構築と実行まで、開発ライフサイクル全体にわたります。定義にとどまらず、私たちはLlama Stack API用のプロバイダーを構築しています。これらはオープンソース版を開発し、プロバイダーと提携することで、開発者がプラットフォーム全体で一貫性のある相互連携するパーツを使用してAIソリューションを構築できるようにしています。最終的な目標は、AI分野におけるイノベーションを加速させることです。
Stack APIは急速に改善されていますが、まだ開発途上の部分も多く、フィードバックや直接的な貢献を歓迎しています。
API
Llamaスタックは以下のAPIセットで構成されています。
- Inference(推論)
- Safety(安全性)
- Memory(メモリ)
- Agentic System(エージェントシステム)
- Evaluation(評価)
- Post Training(事後学習)
- Synthetic Data Generation(合成データ生成)
- Reward Scoring(報酬スコアリング)
各API自体はRESTエンドポイントの集合体です。
APIプロバイダ
プロバイダはAPIを現実のものとするものです。APIを裏付ける実際の実装を提供します。
例えば、推論の場合、可能なオプションとして、[
torch | vLLM | TensorRT ]
のようなオープンソースライブラリを実装に利用することができます。プロバイダは、リモートRESTサービスへのポインタのみである場合もあります。例えば、クラウドプロバイダや推論専用のプロバイダがこれらのAPIを提供することができます。
Llamaスタックのディストリビューション
ディストリビューションは、APIとプロバイダを組み合わせて、一貫した全体をエンドアプリケーション開発者に提供するものです。プロバイダーは、ローカルコードでバックアップされているものもあれば、リモートにあるものもあります。 趣味で使用する場合は、小規模なモデルをローカルで実行し、大規模なモデルにはクラウドプロバイダーを選択することができます。 いずれにしても、アプリケーションが動作するために必要な上位レベルの API は一切変更する必要はありません。 また、サーバーとモバイルデバイスの境界を越えて、ジェネレーティブAIアプリケーションの開発に常に同じ統一されたAPIセットを使用することも可能です。
サポートされている Llama Stackの実装
APIプロバイダー
APIプロバイダービルダー 環境 エージェント 推論 メモリ 安全性 テレメトリ Meta Reference シングルノード ✔️ ✔️ ✔️ ✔️ ✔️ Fireworks ホスティング ✔️ ✔️ ✔️ AWS Bedrock ホスティング ✔️ ✔️ Together ホスティング ✔️ ✔️ ✔️ Ollama シングルノード ✔️ TGI ホスティングおよびシングルノード ✔️ Chroma シングルノード ✔️ PG Vector シングルノード ✔️ PyTorch ExecuTorch オンデバイス iOS ✔️ ✔️ ディストリビューション
ディストリビューションプロバイダー Docker 推論 メモリ 安全性 テレメトリ Meta Reference ローカルGPU、ローカルCPU ✔️ ✔️ ✔️ ✔️ Dell-TGI ローカルTGI+Chroma ✔️ ✔️ ✔️ ✔️
んー、デカすぎてピンとこないけど、以下のページの下にあるアニメーションと図をみたほうがわかりやすいかも。
Getting Started
以下にGetting Startedのドキュメントがある
そして、notebookがある。
notebookの内容的にはDockerでLlama Stackのサーバを起動することになるようなので、Colaboratoryよりはローカルでやったほうが良さそう。
ローカルのUbuntuサーバでやってみる。
まず最初にLLama Stack Serverをセットアップする。
作業ディレクトリ内に仮想環境を用意する
$ mkdir llama-stack-test && cd llama-stack-test
$ python -m venv .venv
$ source .venv/bin/activate
レポジトリをクローンしてパッケージインストール。PyPIからもインストールできるのだけど、その場合は後の箇所でエラーになったので、レポジトリからインストールしている。結構更新頻度は高そうなのでソースからのほうが良さそうである。
$ git clone https://github.com/meta-llama/llama-stack llama-stack-repo && cd llama-stack-repo
$ pip install -e .
これで、Llama StackのモジュールがインストールされるとともにCLIが使えるようになる。
$ llama -h
usage: llama [-h] {download,model,stack} ...
Welcome to the Llama CLI
options:
-h, --help show this help message and exit
subcommands:
{download,model,stack}
一つ上の階層に戻る。
$ cd ..
ではディストリビューションを作成する。ディストリビューションを作成することにより、APIエンドポイントが用意されるらしい。デフォルトだとMetaのリファレンスアーキテクチャで作成されるらしい。
$ llama stack build
対話形式で設定する。以下のようにDockerを指定しただけでほぼデフォルト。1つだけ罠だなと思ったのは、一番最初のstack名は入力しないとダメ(Enterでデフォルト値が入ると思いきや、何も言われずに進んで最後でエラーになる)
> Enter a name for your Llama Stack (e.g. my-local-stack): my-local-stack
> Enter the image type you want your Llama Stack to be built as (docker or conda): docker
> Enter provider for the inference API: (default=meta-reference): meta-reference
> Enter provider for the safety API: (default=meta-reference): meta-reference
> Enter provider for the agents API: (default=meta-reference): meta-reference
> Enter provider for the memory API: (default=meta-reference): meta-reference
> Enter provider for the telemetry API: (default=meta-reference): meta-reference
> (Optional) Enter a short description for your Llama Stack: my first stack
Dockerコンテナがビルドされる。
Dockerfile created successfully in /tmp/tmp.CpsrrGxSIg/DockerfileFROM python:3.10-slim
WORKDIR /app
(snip)
[+] Building 131.6s (9/13) docker:default
=> => extracting sha256:a2318d6c47ec9cac5acc500c47c79602bcf953cec711a18b 0.5s
=> => extracting sha256:ddee35dfe011992ed9d752dc61e7dc4377fda83f63e03c0e 0.1s
=> => extracting sha256:8a7a13810b7d60799d98f4a85010c5343a11ce82bf99a2a9 0.3s
=> => extracting sha256:cd4054fd866013877f7664cf997a9b812814d226ee5f3d83 0.0s
=> [2/8] WORKDIR /app 0.5s
=> [3/8] RUN apt-get update && apt-get install -y iputils-ping n 10.3s
=> [4/8] RUN pip install llama-stack 21.0s
=> [5/8] RUN pip install fastapi fire httpx uvicorn accelerate blobfile 90.3s
()
以下のような感じで表示されればOK。
You can run it with: podman run -p 8000:8000 llamastack-my-local-stack
Checking image builds...
name: my-local-stack
distribution_spec:
description: my first stack
docker_image: null
providers:
inference: meta-reference
safety: meta-reference
agents: meta-reference
memory: meta-reference
telemetry: meta-reference
image_type: docker
Build spec configuration saved at /SOMEWHERE/llama-stack-test/llama-stack-repo/tmp/configs/my-local-stack-build.yaml
You can now run `llama stack configure llamastack-my-local-stack`
dockerのイメージが作成されていることを確認できた。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
llamastack-my-local-stack latest 25b0bacb0f1e 3 minutes ago 11GB
(snip)
次に作成したディストリビューションの設定を行うのだが、まず使用するモデル名を先に確認しておく。ただし全部が使えるというわけではなさそう(後でモデルを定義するところで怒られた)
$ llama model list
+----------------------------------+------------------------------------------+----------------+
| Model Descriptor | Hugging Face Repo | Context Length |
+----------------------------------+------------------------------------------+----------------+
| Llama3.1-8B | meta-llama/Llama-3.1-8B | 128K |
+----------------------------------+------------------------------------------+----------------+
| Llama3.1-70B | meta-llama/Llama-3.1-70B | 128K |
+----------------------------------+------------------------------------------+----------------+
| Llama3.1-405B:bf16-mp8 | meta-llama/Llama-3.1-405B | 128K |
+----------------------------------+------------------------------------------+----------------+
| Llama3.1-405B | meta-llama/Llama-3.1-405B-FP8 | 128K |
+----------------------------------+------------------------------------------+----------------+
| Llama3.1-405B:bf16-mp16 | meta-llama/Llama-3.1-405B | 128K |
+----------------------------------+------------------------------------------+----------------+
| Llama3.1-8B-Instruct | meta-llama/Llama-3.1-8B-Instruct | 128K |
+----------------------------------+------------------------------------------+----------------+
| Llama3.1-70B-Instruct | meta-llama/Llama-3.1-70B-Instruct | 128K |
+----------------------------------+------------------------------------------+----------------+
| Llama3.1-405B-Instruct:bf16-mp8 | meta-llama/Llama-3.1-405B-Instruct | 128K |
+----------------------------------+------------------------------------------+----------------+
| Llama3.1-405B-Instruct | meta-llama/Llama-3.1-405B-Instruct-FP8 | 128K |
+----------------------------------+------------------------------------------+----------------+
| Llama3.1-405B-Instruct:bf16-mp16 | meta-llama/Llama-3.1-405B-Instruct | 128K |
+----------------------------------+------------------------------------------+----------------+
| Llama3.2-1B | meta-llama/Llama-3.2-1B | 128K |
+----------------------------------+------------------------------------------+----------------+
| Llama3.2-3B | meta-llama/Llama-3.2-3B | 128K |
+----------------------------------+------------------------------------------+----------------+
| Llama3.2-11B-Vision | meta-llama/Llama-3.2-11B-Vision | 128K |
+----------------------------------+------------------------------------------+----------------+
| Llama3.2-90B-Vision | meta-llama/Llama-3.2-90B-Vision | 128K |
+----------------------------------+------------------------------------------+----------------+
| Llama3.2-1B-Instruct | meta-llama/Llama-3.2-1B-Instruct | 128K |
+----------------------------------+------------------------------------------+----------------+
| Llama3.2-3B-Instruct | meta-llama/Llama-3.2-3B-Instruct | 128K |
+----------------------------------+------------------------------------------+----------------+
| Llama3.2-11B-Vision-Instruct | meta-llama/Llama-3.2-11B-Vision-Instruct | 128K |
+----------------------------------+------------------------------------------+----------------+
| Llama3.2-90B-Vision-Instruct | meta-llama/Llama-3.2-90B-Vision-Instruct | 128K |
+----------------------------------+------------------------------------------+----------------+
| Llama-Guard-3-11B-Vision | meta-llama/Llama-Guard-3-11B-Vision | 128K |
+----------------------------------+------------------------------------------+----------------+
| Llama-Guard-3-1B:int4-mp1 | meta-llama/Llama-Guard-3-1B-INT4 | 128K |
+----------------------------------+------------------------------------------+----------------+
| Llama-Guard-3-1B | meta-llama/Llama-Guard-3-1B | 128K |
+----------------------------------+------------------------------------------+----------------+
| Llama-Guard-3-8B | meta-llama/Llama-Guard-3-8B | 128K |
+----------------------------------+------------------------------------------+----------------+
| Llama-Guard-3-8B:int8-mp1 | meta-llama/Llama-Guard-3-8B-INT8 | 128K |
+----------------------------------+------------------------------------------+----------------+
| Prompt-Guard-86M | meta-llama/Prompt-Guard-86M | 128K |
+----------------------------------+------------------------------------------+----------------+
| Llama-Guard-2-8B | meta-llama/Llama-Guard-2-8B | 4K |
+----------------------------------+------------------------------------------+----------------+
では、ディストリビューションの設定。ここは最初に定義したstack名ではなく、Dockerの場合はイメージ名になるみたい。
$ llama stack configure llamastack-my-local-stack
対話形式で入力していく。
Could not find llamastack-my-local-stack. Trying conda build name instead...
Could not find llamastack-my-local-stack. Trying docker image name instead...
+ docker run -it -v /home/kun432/.llama/builds/docker:/app/builds llamastack-my-local-stack llama stack configure ./llamastack-build.yaml --output-dir /app/builds
Configuration already exists at `/app/builds/my-local-stack-run.yaml`. Will overwrite...
Configuring API `inference`...
=== Configuring provider `meta-reference` for API inference...
Enter value for model (default: Llama3.1-8B-Instruct) (required): Llama3.2-3B-Instruct
Do you want to configure quantization? (y/n): n
Enter value for torch_seed (optional):
Enter value for max_seq_len (default: 4096) (required):
Enter value for max_batch_size (default: 1) (required):
Configuring API `safety`...
=== Configuring provider `meta-reference` for API safety...
Do you want to configure llama_guard_shield? (y/n): y
Entering sub-configuration for llama_guard_shield:
Enter value for model (default: Llama-Guard-3-8B) (required): Llama-Guard-3-8B
Enter value for excluded_categories (default: []) (required):
Enter value for disable_input_check (default: False) (required):
Enter value for disable_output_check (default: False) (required):
Do you want to configure prompt_guard_shield? (y/n): y
Entering sub-configuration for prompt_guard_shield:
Enter value for model (default: Prompt-Guard-86M) (required): Prompt-Guard-86M
Configuring API `agents`...
=== Configuring provider `meta-reference` for API agents...
Enter `type` for persistence_store (options: redis, sqlite, postgres) (default: sqlite):
Configuring SqliteKVStoreConfig:
Enter value for namespace (optional):
Enter value for db_path (existing: /root/.llama/runtime/kvstore.db) (required):
Configuring API `memory`...
=== Configuring provider `meta-reference` for API memory...
> Please enter the supported memory bank type your provider has for memory: vect
or
Configuring API `telemetry`...
=== Configuring provider `meta-reference` for API telemetry...
> YAML configuration has been written to `/app/builds/my-local-stack-run.yaml`.
You can now run `llama stack run my-local-stack --port PORT`
YAML configuration has been written to /home/kun432/.llama/builds/docker/my-local-stack-run.yaml. You can now run `llama stack run /home/kun432/.llama/builds/docker/my-local-stack-run.yaml`
実行方法が2つ表示される・・・どっちなんだろうか?
とりあえず作成されたYAMLはこんな感じ。
built_at: '2024-09-26T17:46:01.915092'
image_name: my-local-stack
docker_image: my-local-stack
conda_env: null
apis_to_serve:
- memory
- agents
- models
- inference
- memory_banks
- shields
- safety
api_providers:
inference:
providers:
- meta-reference
safety:
providers:
- meta-reference
agents:
provider_id: meta-reference
config:
persistence_store:
namespace: null
type: sqlite
db_path: /root/.llama/runtime/kvstore.db
memory:
providers:
- meta-reference
telemetry:
provider_id: meta-reference
config: {}
routing_table:
inference:
- provider_id: meta-reference
config:
model: Llama3.2-3B-Instruct
quantization: null
torch_seed: null
max_seq_len: 4096
max_batch_size: 1
routing_key: Llama3.2-3B-Instruct
safety:
- provider_id: meta-reference
config:
llama_guard_shield:
model: Llama-Guard-3-8B
excluded_categories: []
disable_input_check: false
disable_output_check: false
prompt_guard_shield:
model: Prompt-Guard-86M
routing_key: llama_guard
- provider_id: meta-reference
config:
llama_guard_shield:
model: Llama-Guard-3-8B
excluded_categories: []
disable_input_check: false
disable_output_check: false
prompt_guard_shield:
model: Prompt-Guard-86M
routing_key: code_scanner_guard
- provider_id: meta-reference
config:
llama_guard_shield:
model: Llama-Guard-3-8B
excluded_categories: []
disable_input_check: false
disable_output_check: false
prompt_guard_shield:
model: Prompt-Guard-86M
routing_key: injection_shield
- provider_id: meta-reference
config:
llama_guard_shield:
model: Llama-Guard-3-8B
excluded_categories: []
disable_input_check: false
disable_output_check: false
prompt_guard_shield:
model: Prompt-Guard-86M
routing_key: jailbreak_shield
memory:
- provider_id: meta-reference
config: {}
routing_key: vector
次にモデルをダウンロードする。ダウンロード元は
- Meta
- Metaの公式サイトで利用申請して、後で送られてくるメールにあるURLが必要
- HuggingFace
- HuggingFaceで利用申請して、かつ、HF_TOKENが必要
から選択できるが、どうもHuggingFaceから行うと後のプロセスでうまくいかず、現状はMetaのサイトから利用申請してから、ダウンロードする必要がありそう。
$ llama model download --source meta --model-id Llama3.2-3B-Instruct
ダウンロードコマンドを叩くと以下のようにURLの入力を求められるので、申請後にMetaから飛んでくるメールのURLを貼り付ける。
Please provide the signed URL you received via email (e.g., https://llama3-1.llamameta.net/*?Policy...):
同様にして、今回使用する他のモデルもダウンロードする。バージョンによって入力するURLが異なるので注意。
$ llama model download --source meta --model-id Llama-Guard-3-8B
$ llama model download --source meta --model-id Prompt-Guard-86M
ではLlama Stack Distribution Serverを起動。llama stack configure
の最後に起動コマンドが複数出力されていて、どっちが正しいのかよくわからないが、シンプルな方で。
$ llama stack run my-local-stack
AssertionError: Could not find checkpoint dir: /root/.llama/checkpoints/Llama3.2-3B-Instruct/original.Please download model using `llama download Llama3.2-3B-Instruct`
++ error_handler 55
++ echo 'Error occurred in script at line: 55'
Error occurred in script at line: 55
++ exit 1
エラー。確認してみたところ、パスはちょっと違うがディレクトリはある。おそらくメッセージにでているパスはDockerから見たパスなんだろうと思う。
$ ls -lt ~/.llama/checkpoints/Llama3.2-3B-Instruct
合計 6277136
-rw-rw-r-- 1 kun432 kun432 6425585114 9月 27 20:00 consolidated.00.pth
-rw-rw-r-- 1 kun432 kun432 220 9月 27 19:48 params.json
-rw-rw-r-- 1 kun432 kun432 2183982 9月 27 19:48 tokenizer.model
-rw-rw-r-- 1 kun432 kun432 209 9月 27 19:48 checklist.chk
もう一つのコマンドの方でやってみても同じ。
$ llama stack run /home/kun432/.llama/builds/docker/my-local-stack-run.yaml
んー、わからん。全体的にcondaを使うのが基本になっているっぽく思えるので、Dockerの場合はちょっとよくわからない。
なぜうまくいかないのかは置いといて、ちょっと用語と概念がまだ理解できてなくて混乱中。
基本的には、開発サイクルのいろんなフェーズで必要になる各種LLM APIのエンドポイントを用意してくれるのがLlama Stackで、それのデプロイ先がクラウドだったりローカルだったり、っていう箱がディストリビューション、その設定の1つ1つがスタック、という理解。
LLMを「使う」アプリが絡んだ場合にどうなるかはまだイメージできていないけど、多分Getting Startedを進めていくとわかるんだと思う。現時点ではLangChainとかLlamaIndexみたいなLLMを使う「アプリ」のフレームワークではなくて、もう少し下のレイヤーも含めた包括的な仕組みというイメージを持った。
とりあえずIssue上げたので返信あれば再度進める。
Issueに回答もらった。環境変数LLAMA_CHECKPOINT_DIR
でモデルパスを指定すると、そこをDockerコンテナがマウントするとのこと。(というかドキュメントに書いてないよぅ・・・)
$ export LLAMA_CHECKPOINT_DIR=~/.llama
$ llama stack run my-local-stack
どうやら今回はマウントできている模様
+ docker run -it -p 5000:5000 -v /home/kun432/.llama/builds/docker/my-local-stack-run.yaml:/app/config.yaml -v /home/kun432/.llama:/root/.llama --gpus=all llamastack-my-local-stack python -m llama_stack.distribution.server.server --yaml_config /app/config.yaml --port 5000
が、残念・・・
torch.OutOfMemoryError: CUDA out of memory. Tried to allocate 64.00 MiB. GPU 0 has a total capacity of 23.41 GiB of which 44.44 MiB is free
今回選択したモデルは以下なのだが、んー、Llama-Guard-3-8Bが多分でかいのかなぁ?
- inference: Llama3.2-3B-Instruct
- safety: Llama-Guard-3-8B
- prompt_guard_shield: Prompt-Guard-86M
で、inferenceで使用するモデルはllama stack configure
で量子化オプションがあったけども、safetyにはそういうオプションがない。あと、Llama-Guardにはもっと小さいモデルがあるのだけども、llama stack configure
でそれを指定すると対応していないと言われて怒られてしまう。。。。
RTX4090でも難しいとなると、safety自体をそもそも無効するしかなさそうだけど、バージョン上げてみるかなあ・・・
llama stack run
で、最初のエラーのように起動前にコケた場合は問題ないけど、"CUDA out of memory"になった場合は少なくともコンテナは上がっている。なのでCtrl+Cで止めても、コンテナ自体は消えないので手動で終了させる必要がある(stack stopみたいなコマンドは見当たらない)
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab7d9fbd1f08 llamastack-my-local-stack "python -m llama_sta…" 7 minutes ago Up 7 minutes 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp vibrant_yonath
(snip)
$ docker ps | grep "my-local-stack" | awk '{ print $1 }' | xargs docker stop
$ docker ps -a | grep "my-local-stack" | awk '{ print $1 }' | xargs docker rm
llama-stack自体のアップデートは特になかった。
あと、Llama-Guardにはもっと小さいモデルがあるのだけども、
llama stack configure
でそれを指定すると対応していないと言われて怒られてしまう。。。。
llama stack configure
でsafetyに設定できるモデルは現時点では以下だけの様子。
Value error, Invalid model: Llama-Guard-3-1B:int4-mp1. Must be one of ['Llama-Guard-3-11B-Vision', 'Llama-Guard-3-8B', 'Llama-Guard-3-8B:int8-mp1'] [type=value_error, input_value='Llama-Guard-3-1B:int4-mp1', input_type=str]
いけそうなのはLlama-Guard-3-8B:int8-mp1
かなぁ。とりあえずダウンロード。
$ llama model download --source meta --model-id Llama-Guard-3-8B:int8-mp1
$ llama stack configure llamastack-my-local-stack
llama stack configure
のやり直し。safetyにLlama-Guard-3-8B:int8-mp1
を使うようにして、あと、Prompt-Guard-86M
はやめた。
Could not find llamastack-my-local-stack. Trying conda build name instead...
Could not find llamastack-my-local-stack. Trying docker image name instead...
+ docker run -it -v /home/kun432/.llama/builds/docker:/app/builds llamastack-my-local-stack llama stack configure ./llamastack-build.yaml --output-dir /app/builds
Configuration already exists at `/app/builds/my-local-stack-run.yaml`. Will overwrite...
Configuring API `inference`...
=== Configuring provider `meta-reference` for API inference...
Enter value for model (default: Llama3.1-8B-Instruct) (required): Llama3.2-3B-Instruct
Do you want to configure quantization? (y/n): n
Enter value for torch_seed (optional):
Enter value for max_seq_len (default: 4096) (required):
Enter value for max_batch_size (default: 1) (required):
Configuring API `safety`...
=== Configuring provider `meta-reference` for API safety...
Do you want to configure llama_guard_shield? (y/n): y
Entering sub-configuration for llama_guard_shield:
Enter value for model (default: Llama-Guard-3-8B) (required): Llama-Guard-3-8B:int8-mp1
Enter value for excluded_categories (default: []) (required):
Enter value for disable_input_check (default: False) (required):
Enter value for disable_output_check (default: False) (required):
Do you want to configure prompt_guard_shield? (y/n): n
Configuring API `agents`...
=== Configuring provider `meta-reference` for API agents...
Enter `type` for persistence_store (options: redis, sqlite, postgres) (default: sqlite):
Configuring SqliteKVStoreConfig:
Enter value for namespace (optional):
Enter value for db_path (existing: /root/.llama/runtime/kvstore.db) (required):
Configuring API `memory`...
=== Configuring provider `meta-reference` for API memory...
> Please enter the supported memory bank type your provider has for memory: vect
or
Configuring API `telemetry`...
=== Configuring provider `meta-reference` for API telemetry...
> YAML configuration has been written to `/app/builds/my-local-stack-run.yaml`.
You can now run `llama stack run my-local-stack --port PORT`
YAML configuration has been written to /home/kun432/.llama/builds/docker/my-local-stack-run.yaml. You can now run `llama stack run /home/kun432/.llama/builds/docker/my-local-stack-run.yaml`
で、あと--disable-ipv6
が必要っぽい。
$ llama stack run my-local-stack --disable-ipv6
起動したー!
Serving GET /healthcheck
Serving GET /shields/get
Serving GET /shields/list
Serving GET /shields/get
Serving GET /shields/list
Serving GET /memory_banks/get
Serving GET /memory_banks/list
Serving POST /memory/create
Serving DELETE /memory/documents/delete
Serving DELETE /memory/drop
Serving GET /memory/documents/get
Serving GET /memory/get
Serving POST /memory/insert
Serving GET /memory/list
Serving POST /memory/query
Serving POST /memory/update
Serving POST /safety/run_shield
Serving POST /agents/create
Serving POST /agents/session/create
Serving POST /agents/turn/create
Serving POST /agents/delete
Serving POST /agents/session/delete
Serving POST /agents/session/get
Serving POST /agents/step/get
Serving POST /agents/turn/get
Serving GET /models/get
Serving GET /models/list
Serving POST /inference/chat_completion
Serving POST /inference/completion
Serving POST /inference/embeddings
Serving GET /models/get
Serving GET /models/list
Serving GET /memory_banks/get
Serving GET /memory_banks/list
Listening on 0.0.0.0:5000
INFO: Started server process [1]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:5000 (Press CTRL+C to quit)
Prompt-Guard-86M
がデカかったのかなぁ?わからん。。。。
とりあえずAPIにアクセスしてみる。
$ python -m llama_stack.apis.inference.client localhost 5000
User>hello world, write me a 2 sentence poem about the moon
{"error": {"message": "400: Invalid value: Could not find provider for Llama3.1-8B-Instruct"}}
むーん・・・なぜ今更Llama3.1-8B-Instruct
がでてくるのだろうか。。。
INFO: 172.17.0.1:34618 - "POST /inference/chat_completion HTTP/1.1" 200 OK
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/llama_stack/distribution/server/server.py", line 231, in sse_generator
async for item in event_gen:
File "/usr/local/lib/python3.10/site-packages/llama_stack/distribution/routers/routers.py", line 117, in chat_completion
async for chunk in self.routing_table.get_provider_impl(model).chat_completion(
File "/usr/local/lib/python3.10/site-packages/llama_stack/distribution/routers/routing_tables.py", line 38, in get_provider_impl
raise ValueError(f"Could not find provider for {routing_key}")
ValueError: Could not find provider for Llama3.1-8B-Instruct
メモリ量下げようと思って、Llama3.2-3B-Instructにしたのが失敗だったか?
llama stack configure
でinferenceにLlama3.1-8B-Instruct
を指定し直してやり直してみたら行けた。
$ python -m llama_stack.apis.inference.client localhost 5000
User>hello world, write me a 2 sentence poem about the moon
Assistant> Here's a 2-sentence poem about the moon:
The moon glows softly in the midnight sky,
A beacon of wonder, as it passes by.
ただこちらはダメだった。モデル変えてもダメだった。
$ python -m llama_stack.apis.safety.client localhost 5000
User>hello world, write me a 2 sentence poem about the moon
Error: HTTP 400 {"detail":"Invalid value: Trying to set a tensor of shape torch.Size([128256, 4096]) in \"weight\" (which has shape torch.Size([32000, 4096])), this looks incorrect."}
とりあえず、現時点ではまだまだ時期尚早で、自分のスキル的にもきちんと動かすにはもっといろいろ理解してからじゃないと難しいなと感じた。
まだ推論しか動かせなかったけども、多分Llama Stackのメリットはそれだけじゃないはずで、各APIを一通り動かしてみないことには判断できないと思う。