Closed8

llama-stackを試す

kun432kun432

llama-3.2の裏でこんなものが。

https://twitter.com/minamijoyo/status/1839295301666091384

GitHubレポジトリ
https://github.com/meta-llama/llama-stack

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 ✔️ ✔️ ✔️ ✔️

んー、デカすぎてピンとこないけど、以下のページの下にあるアニメーションと図をみたほうがわかりやすいかも。

https://www.llama.com/

kun432kun432

Getting Started

以下にGetting Startedのドキュメントがある
https://github.com/meta-llama/llama-stack/tree/main/docs/getting_started.md

そして、notebookがある。
https://github.com/meta-llama/llama-stack/tree/main/docs/getting_started.ipynb

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はこんな感じ。

my-local-stack-run.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  927 20:00 consolidated.00.pth
-rw-rw-r-- 1 kun432 kun432        220  927 19:48 params.json
-rw-rw-r-- 1 kun432 kun432    2183982  927 19:48 tokenizer.model
-rw-rw-r-- 1 kun432 kun432        209  927 19:48 checklist.chk

もう一つのコマンドの方でやってみても同じ。

$ llama stack run /home/kun432/.llama/builds/docker/my-local-stack-run.yaml

んー、わからん。全体的にcondaを使うのが基本になっているっぽく思えるので、Dockerの場合はちょっとよくわからない。

kun432kun432

なぜうまくいかないのかは置いといて、ちょっと用語と概念がまだ理解できてなくて混乱中。

基本的には、開発サイクルのいろんなフェーズで必要になる各種LLM APIのエンドポイントを用意してくれるのがLlama Stackで、それのデプロイ先がクラウドだったりローカルだったり、っていう箱がディストリビューション、その設定の1つ1つがスタック、という理解。

LLMを「使う」アプリが絡んだ場合にどうなるかはまだイメージできていないけど、多分Getting Startedを進めていくとわかるんだと思う。現時点ではLangChainとかLlamaIndexみたいなLLMを使う「アプリ」のフレームワークではなくて、もう少し下のレイヤーも含めた包括的な仕組みというイメージを持った。

とりあえずIssue上げたので返信あれば再度進める。

kun432kun432

Issueに回答もらった。環境変数LLAMA_CHECKPOINT_DIRでモデルパスを指定すると、そこをDockerコンテナがマウントするとのこと。(というかドキュメントに書いてないよぅ・・・)

https://github.com/meta-llama/llama-stack/issues/125#issuecomment-2378520084

$ 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自体をそもそも無効するしかなさそうだけど、バージョン上げてみるかなあ・・・

kun432kun432

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
kun432kun432

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にしたのが失敗だったか?

kun432kun432

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."}
kun432kun432

とりあえず、現時点ではまだまだ時期尚早で、自分のスキル的にもきちんと動かすにはもっといろいろ理解してからじゃないと難しいなと感じた。

まだ推論しか動かせなかったけども、多分Llama Stackのメリットはそれだけじゃないはずで、各APIを一通り動かしてみないことには判断できないと思う。

このスクラップは2ヶ月前にクローズされました