Podman AI Lab ：概要とlearning exercise

最近はPodman Desktop上で遊ぶことが多いのですが、ずっと見ないふりしていた`Podman AI Lab`を触ってみました。

## 用語

### Podman
- Podmanはオープンソースのコンテナ管理ツールで、OCI（Open Container Initiative）に準拠したコンテナの作成、管理、運用を行います
- Dockerと互換性があり、DockerのCLIを使用してPodmanを操作することが可能です
- Podmanはデーモンレスで動作し、コンテナはユーザーレベルで実行されるため、システム全体のセキュリティが向上します
- ルートレスコンテナをサポートしており、ユーザー権限でコンテナを実行できるため、セキュリティリスクを低減します
- Kubernetesとの連携も強化されており、Podmanで作成したコンテナをKubernetesクラスターにデプロイすることができます
- Podmanは、単一のコンテナだけでなく、Pod（複数のコンテナのグループ）の管理もサポートしています
- `podman-compose`というツールを使用して、Docker Composeファイルを利用した複数コンテナの一括管理も可能です

### Podman Desktop
- Podman Desktopは、Podmanコンテナを管理するためのGUIツールです
- コンテナの作成、起動、停止、削除などの操作を直感的に行うことができます
- イメージのプル、プッシュ、削除、検索といった操作もGUI上で簡単に行えます
- ローカルのPodmanエンジンとリモートのPodmanエンジンの両方をサポートしており、リモート環境の管理も可能です
- コンテナのリソース使用状況（CPU、メモリ、ネットワーク）をリアルタイムでモニタリングする機能があります
- イメージのビルドや、Kubernetesマニフェストの生成など、開発者向けの機能も搭載されています
- エンタープライズ向けの機能として、アクセス制御や監査ログなども提供されており、企業環境での利用にも適しています

### Podman AI Lab
- **Podman AI Lab**は、ローカル環境でAIアプリケーションを構築・開発するためのRed Hatの拡張機能です
- **レシピカタログ**：AIユースケースやモデルの統合方法を学ぶためのキュレーションされたレシピを提供します
- **モデルカタログ**：利用可能なオープンソースの大規模言語モデル（LLM）の一覧を提供し、独自モデルのインポートも可能です
- **ローカルでのモデル実行**：推論サーバーを用いてモデルをローカルで実行し、OpenAI互換のエンドポイントを提供します
- **プレイグラウンド環境**：モデルの設定やシステムプロンプトを実験し、ユースケースに最適なモデルを選定できます

詳細は[こちら](https://developers.redhat.com/products/podman-desktop/podman-ai-lab)。

## Build your AI application with AI Lab extension in Podman Desktop

以下の内容は、Red Hat　Developer Portal 上の[こちら](https://developers.redhat.com/learning/learn:rhel:build-your-ai-application-ai-lab-extension-podman-desktop/resource/resources:build-your-ai-application-ai-lab-extension-podman-desktop:prerequisites-and-step-step-process)の手順を実行したものです。 

### 準備
#### 前提条件
- Pythonプログラミング言語の基本的な理解
- コンテナ化の概念
- クラウドネイティブの知識
- Podman Desktopの最新バージョンをラップトップにダウンロードしてインストール。インストールしていない場合は[こちら](https://developers.redhat.com/products/podman-desktop)からダウンロード
- Podman Desktopをインストール後、Podman Machineが起動している

#### システムおよびソフトウェアの前提条件
- **ソフトウェア**：Podman Desktop 1.10.3+ および Podman 5.0.1+
- **ハードウェア**：少なくとも12GBのRAM、4以上のCPU（大規模モデルの場合は多い方が良い）

#### 手元の環境情報
- **ソフトウェア**:Podman Desktop 1.11.1、Podman 5.1.1
- **ハードウェア**:16GBのRAM、8以上のCPU

### 1. Podman DesktopのインストールとAI Lab拡張機能の設定

#### Directly from Podman Desktop
Podman Desktopを開きます。インストールされていない場合はダウンロードしてインストールします。`Extensions > Catalog` に移動します。次に、`Podman AI Lab`を検索し、`Install`をクリックします

![スクリーンショット 2024-07-29 22.30.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325101/5e17173e-6192-687e-ca40-fba88b43adb8.png)

#### Verification

インストール後、Podman AI LabのアイコンがPodman Desktopのナビゲーションバーに表示されます。

![スクリーンショット 2024-07-29 22.35.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325101/0077285b-03ce-e6b9-569c-c6956ad40c9d.png)

### 2. AIモデルのダウンロード
Podman AI Labは、一般的なAIユースケースを示すレシピのカタログを提供します。`Recipes Catalog`をクリックすると、各レシピの詳細な説明と、異なる大規模言語モデル（LLM）を使用して実行できるサンプルアプリケーションが含まれていることが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325101/3e77f1a1-3fba-f255-869f-afc213013cd5.png)

次に、`Catalog`をクリックすると、Podman AI Labには、直接使用できるオープンソースAIモデルの厳選されたセットも含まれていることが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325101/0b6dd089-0598-9c19-5619-629d44e34c9d.png)

カタログからモデルを選択し、ローカルにダウンロードします。 GGUF、PyTorch、TensorFlowなど、広く使用されているフォーマットでAIモデルをダウンロードできます。 この例では、Ibm/merlinite-7b-GGUF
をダウンロードしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325101/063a5097-e264-2628-37b9-b0ae5e61ae35.png)

### 3. 推論サーバの起動

左のサイドバーから`Playgrounds`をクリックし、Podman Desktop AI Labインターフェースを開きます。 続いて、`New Playground`をクリックし、新しい実験環境を設定します。 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325101/db26487a-0d97-73f0-8660-2f8f91457246.png)

ここで、新しい環境に名前を付け、利用するダウンロードモデルを選択することができます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325101/83e2c5c0-455a-6fc1-45b2-4d057b0ef26c.png)

`Create playground`をクリックすると、Podman Desktop AI Labはコンテナ化されたモデルサーバーを起動します。 このセットアップには、クエリを送信して応答を表示できるインタラクティブなインターフェースが含まれています。Playgroundは隔離されたPodman Pod内に格納されており、基盤となるインフラストラクチャを簡素化し、OpenAI互換のAPIを使用した簡単なモデル推論を可能にしています。 環境の準備ができたら、Playgroundダッシュボードにアクセスできます。 このダッシュボードは、モデルにプロンプトを送信し、出力を表示するためのインタラクティブなインターフェイスとして機能します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325101/c6a4e74b-7b1a-0e27-2cef-299ccba11047.png)

Playgroundには、特定の開発およびデータサイエンス用途に合わせてモデルの動作を調整するために設計された、いくつかの調整可能なパラメータが用意されています。

* **Temperature:**
    * モデルの応答における確率性の程度を調整する
    * 値が低いと、出力はより決定論的で集中したものになり、高い精度を必要とするタスクに役立つ
    * 値を高くするとランダム性が増し、創造性が高まり、斬新な洞察や解決策につながる可能性がある
* **Max Tokens:**
    * モデルの出力の長さの上限を設定し、冗長性を制御する
    * 回答生成の計算コストと、データ量の多い環境での分析の実用性の両方を管理するために重要
* **Top-p:**
    * 関連性と多様性のトレードオフを調整することにより、モデルのトークン選択プロセスに影響を与える
    * 特に探索的データ分析やコンテンツ生成の際に、回答の正確さと新規性の側面を微調整するための鍵となる

#### Recipes Catalog

コンテナ化されたレシピにより、開発者はAIアプリケーションを素早くセットアップし、ローカルマシン上で直接プロトタイプを作成することができます。レシピは、モデルサーバーとAIアプリケーションという少なくとも2つの基本コンポーネントで構築されます。これらのレシピは、オーディオ処理、コンピュータビジョン、自然言語処理など、幅広いAI機能をカバーしています。サンプルアプリケーションはデフォルトでllamacpp_pythonモデルサーバーに依存しています。ここでは、`ChatBot`をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325101/3cd57b0e-080d-0c31-d7dc-b0566943164a.png)

続いて、`Models`から、先ほどダウンロードしたAIモデルである`ibm/merlinite-7b-GGUF`を選択し、`Start AI App`をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325101/031c6893-5dc6-2033-1ec6-2f3c2ce4d27c.png)

無事に起動し、`RUNNING`となっています。それでは、右上の`Open　AI　App`をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325101/5e164423-3607-33b5-b9a7-f11e08c28387.png)

ローカルで起動したChatアプリにアクセスできました。Podmanについて聞いたら、解説してくれました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325101/2d7f1c80-1912-518b-0b25-975dd70bab4d.png)

## まとめ

もう少しレシピ化されたアプリをいくつか試してみようと思いました。以下、まとめです。

* Podman Desktop AI Labという拡張機能は、ローカルでのAI開発を簡素化します
* AI開発に不可欠なオープンソースツールや、様々なAIのユースケースやモデルをユーザーに案内する「レシピ」の厳選されたセレクションを提供します
* AI Labには、ユーザーがチャットボットなどのAIモデルを実験・評価できる「Playground」も含まれています