Open-Assistant v0.0.3 : ガイド : 開発者のためのイントロダクション

Open-Assistant v0.0.3 : ガイド : 開発者のための Open Assistant へのイントロダクション (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 06/27/2023 (v0.0.3-alpha32)

* 本ページは、LAION-AI / Open-Assistant の以下のドキュメントを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

クラスキャット 人工知能 研究開発支援サービス

クラスキャット は人工知能・テレワークに関する各種サービスを提供しています。お気軽にご相談ください :

◆ 人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。スケジュール
  • お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。

お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。

  • 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
  • sales-info@classcat.com  ;  Web: www.classcat.com  ;   ClassCatJP

 

 

Open-Assistant v0.0.3 : ガイド : 開発者のための Open Assistant へのイントロダクション

これは、ChatGPT に代わるコミュニティ主導のオープンソースの代替を目指すプロジェクト、Open Assistant の目標、ツール、技術とチームを理解するためのガイドです。それはプロジェクトに貢献したい開発者のために意図されています。貢献する方法の詳細な手順については contributing ガイド をご覧ください。

 

Open Assistant プロジェクトの概要

プロジェクトの主要な目標は、大規模言語モデル (LLM) を指示により良く従うように適応させ、質問に応えられるチャットボットを持つことです。このため、プロジェクトは InstructGPT 論文 により提案されたアプローチを使用しています、これは 人間のフィードバックからの強化学習 (RLHF, Reinforcement Le arning with Human Feedback) に基づきます。InstructGPT の提案は基本的には 3 つのステップから構成されます (下図参照) :

  1. デモデータを収集して教師ありポリシーを訓練します。このアイデアはアシスタントと指示を与える人間の間の会話の多くのサンプルを持つことで、それらは、教師あり微調整 (SFT, Supervised Fine-Tuning) と呼ばれる、教師あり学習により既存の LLM を訓練するサンプルとして使用できます。こうして、この訓練は「SFT 訓練」と呼ばれ、得られたモデルを「SFT モデル」と呼びます。
     
    これらのサンプルの会話はプロンプターとして行動する人間とアシスタントとして行動する人間により生成されます。プロンプトは別の人間により答えることが可能であることに注意することは重要です、その結果アシスタントが与えられたプロンプトにどのように回答するかの多様なサンプルがあり、それは次のステップへの基礎になります。初期プロンプトから、アシスタントの答えが作成され、それからこの答えへの新しいプロンプトが作成され、等々。これが「会話ツリー」を生成します。
     
    LLM はまた「指示データセット (instruction datasets)」を使用して更に微調整することもできます、これは StackOverflow や Reddit のような web サイトから取得される指示とレスポンスの形式の会話のサンプルのセットです。

  2. 比較データを収集して報酬モデルを訓練します。ここでは、会話は前のステップで得られた会話 (集) からサンプリングされ、そして前のステップで様々な人間により作成された各プロンプトに対する様々なアシスタントの答えを人間が ランク付け します。このデータは良い答えを好む 報酬モデル (RM) を訓練するために使用され、対応するタスクは「RM 訓練」と呼ばれます。
     
    将来的には、このランク付けステップはステップ 1 からの人間が生成した答えに対してだけでなく、SFT モデルにより生成されたサンプルに対しても成されます。

  3. 強化学習 (RL) を使用して報酬モデルに対してポリシーを最適化します。proximal ポリシー最適化 (PPO) アルゴリズムが使用されて微調整モデルから新しいモデルを生成します。この PPO を最適化するため、前のステップで得られた報酬モデルが SFT モデルと共に使用されますので、生成された RL モデル は指示に従う点でより良いです。このタスクは「RL 訓練」と呼ばれます。

これらすべてにより、アシスタントを作成するために使用できる RL モデルを持ちます。この RL モデルによりプロンプトに答えるプロセスを「推論 (the inference)」と呼びます。 

Open Assistant 全体のアプローチはこの図で要約されます :

プロジェクトの目標の一つはこの RL モデルをコンシューマー向けハードウェアで実行できるようにすることです : 現在のモデルは通常のユーザには手の届かない非常に強力な GPU を必要とします。プロジェクトは高い目標を設定しています : 基本的なアシスタントが得られた後、プロジェクトはさらに多くのことを行ない、それを外部ツールと接続できるようにしたいです。これは Augmented (拡張・増強) 言語モデル と呼ばれる研究分野です。更に、ユーザがカスタムアシスタントを作成できるように、独自のモデルを微調整できる機能を加えたいです。

 

ツール

web アプリケーションが作成されました、通常は「web フロントエンド」として言及されます。それは前のセクションで概説されたプロセスの最初の 2 ステップをサポートします、これは人間が会話を作成して (ステップ 1) 回答をランク付けします (ステップ 2)。それはまたチャットインターフェイスも作成して、推論ステップもサポートします。

データ収集のため、 2 つの discord ボットが作成されました、一つは Python を使用し、他方は Javascript を使用しています。後者はまた推論プロセスもサポートします。

推論を行うため、「推論サービス」が作成されました。

更に、指示データセットを収集するため、スクリプトとノートブック のセットが開発されています。

会話ツリーとそのメタデータ (ラベルとランキング) をストアする FastAPI バックエンド もあります。

 

テクノロジー

web フロントエンド

web フロントエンドは Next.js アプリケーションですので、Typescript, HTML, CSS と node.js を使用しています。

それが使用する幾つかのライブラリは UI 要素のための Chakra UI と国際化のための i18-next です。
そのソースコードは website ディレクトリ にあります。そのディレクトリの README はフロントエンドについての詳細を含みます。

The container in the dockerfile is called web with a comment that refers to it as the “oassist web service”. node.js は「フロントエンドのバックエンド」です、後で説明される「FastAPI バックエンド」と混同しないでください。

web フロントエンドはまた認証とキャッシング用に Postgres データベースも使用します。これは Dockerfile では webdb と呼ばれます。Prisma がこの Postgres データベース用の ORM として使用されます。

website ディレクトリで “npm run dev” を実行すると、それは node サーバで Next.js アプリケーションを開始します。Next.js アプリケーションは http://localhost:3000 で利用可能です。

Dockerfile には maildev コンテナもあり、これは登録者に電子メールを送れるように使用されます、ローカル開発については事前作成された fake ユーザがありこれは必要ではありませんが。dev という fake ユーザがあり、それはログインの間にロールを割り当てることができます。

ディレクトリ scripts/frontend-development にはフロントエンドに関連する他のスクリプトがあります。

開発の間に有用な別のツールは storybook です : それはアプリケーション全体を実行する必要なく UI コンポーネントをテストすることを可能にします。

 

Discord ボット

これらは上記の Discord ボットです。それらのソースコードは discord-bots ディレクトリにあります。

 

FastAPI backend

これは、会話ツリーとメタデータをストアするために web フロントエンドと Discord ボットにより使用される API を提供します。それはフレームワークとして FastAPI を使用して Python で書かれ、そのソースコードは backend ディレクトリ にあります。Dockerfile では backend と呼称されます。

それは別の Postgres データベース “backend database” を持ち、Dockerfile では単に “db” と呼ばれます。

API リクエストをキャッシュするための、Dockerfile で “redis” と呼ばれる、Redis データベースもあります。

Dockerfile では、データベースの開発サポートツールを含む 2 つのコンテナもあります、Postgres データベースを調査するために使用できる “adminer” と、Redis データベースを調べるための “redis-insights” です。

Postgres backend データベースには既に何某かのデータがありますが、より多くのデータが auto_main.py と呼ばれる自動化スクリプトを使用して生成できます。

backend で使用される主要なデータ構造を説明する プレゼンテーション があり、基本的には、会話ツリーと work パッケージです。

 

推論サービス

推論サービスはモデルを使用してプロンプトに回答するコンポーネントです、つまり、それはアシスタント自体です。それは Python で書かれ、そのソースコードは inference ディレクトリにあります。それはサーバと幾つかのワーカーを持ちます。それはまた Dockerfile で “inference-db” と呼ばれる、それ自身のコンテナの Postgres データベースと “redis-inference” コンテナの Redis データベースを持ちます。”inference-safety” という安全性のための別のコンテナもあります。

サーバは、推論を実行するためにモデルを使用するワーカーと websocket で通信する FastAPI アプリケーションです。

 

モデル訓練ツール

別のモデルを訓練するツールは model ディレクトリにあります。これらは Python で書かれたスクリプトで、Hugging Face の PyTorch や Transformers のようなライブラリを使用しています。

 

指示データセットのスクリプトとノートブック

指示 (instruction) データセットのコレクションは data ディレクトリに体系化されています。このガイド は新しいデータセットに貢献する方法を説明しています。

データスクレイピングと増強用の様々なノートブックを含む notebooks ディレクトリもありますが、ディレクトリ data/datasets のために deprecated になっています。

 

ドキュメント

ドキュメントは docs ディレクトリにあります。Markdown で書かれ、静的サイト・ジェネレータとして Docosaurus 2 を使用しています。

 

配備

配備は docker compose (ハイフンを含む docker-compose と混同しないでください、この FAQ 参照) の V2 を使用してコンテナで行われます。それは profiles に基づいています。これらは現在利用可能なものです :

  • frontend-dev. これらのコンテナを含みます :
    • db, redis, webdb, adminer, maildev, backend

oassist web サービス (web コンテナ) を含まないことに注意してください : フロントエンド開発中は、website ディレクトリで “npm run dev” によりそれを起動することが想定されています。

  • backend-dev. これらのコンテナを含みます :
    • db, redis, redis-insights, adminer, backend
  • ci. 基本的には開発ツールなしのバックエンドとフロントエンドの両方です。これらのコンテナを含みます :
    • db, redis, webdb, maildev, backend, web
  • inference. これらのコンテナを含みます :
    • inference-db, inference-server, inference-worker, inference-redis
  • inference-dev. これらのコンテナを含みます :
    • db, web-db, backend
  • inference-safety. これらのコンテナを含みます :
    • inference-safety
  • observability. アプリケーションを監視するツールを含みます。これらのコンテナを含みます :
    • prometheus, grafana, netdata

Notice that you can combine profiles, for example, ci and observability.

以下の図は、実際のプロファイルではなく、ロールに対応するボックスでグループ化された、サークルのコンテナを示しています :

ansible ディレクトリに ansible playbooks があります。

プロジェクト web サイト https://open-assistant.io/ で利用可能なプロダクション配備に加えて、https://web.staging.open-assistant.io/ で staging 配備もあります。

 

The teams

(訳注: 原文 参照)

 

以上