DSPyを使用してスタンフォードOVALのSTORM Mistralデモを実行する
紹介
大規模言語モデルの約束はますます明らかになり、技術が進歩するにつれて、その使用もますます一般的になっています。LLaMA 3のリリースにより、オープンソースの言語モデルがChatGPTのリリース以来、シーンを支配してきたクローズドガーデンのリリースに品質でかなり近づいているのがようやく見えてきました。
これらのモデルの魅力的な利用ケースの一つは、執筆補助としての役割です。たとえ最高の大規模言語モデル(LLM)であっても、幻覚や誤解に悩まされることがありますが、よく知られたトピックに関して迅速に執筆素材を生成できることは、多くの理由で有用です。これらのLLMモデルのトレーニングデータの範囲が堅牢性とサイズで増加するにつれて、この可能性はさらに高まります。
この潜在能力を活用した最新かつ最もエキサイティングなアプリケーションの一つが、スタンフォードOVALのSTORMパイプラインです。STORM(テーマのアウトラインの合成を通じた情報の取得と多角的な質問)は、多様な専門家エージェントの集合を使用して、テーマについて互いに会話をシミュレーションする事前執筆段階を実行し、その後、集約された情報をエージェントの視点を全体的に考慮したアウトラインに統合します。これにより、STORMはそのアウトラインを使用して、ほぼ任意のトピックについてゼロから完全なウィキペディアのような記事を生成することができます。STORMは、組織や資料のカバレッジの観点で、情報取得を強化した生成に基づく記事生成器を印象的に上回ります。
この記事では、VLLMホストのHuggingFaceモデルを使用して、STORMを使って記事を生成する方法を示します。コーディングデモに入る前に、STORMの仕組みについての短い概要を見ていきましょう。
前提条件
- Python 環境: Python 3.8 以降がインストールされていることを確認してください。依存関係には仮想環境を使用してください。
- 依存関係: デモの
requirements.txtに指定されているDSPy、transformersなどの必要なライブラリをインストールします。 - ミストラルモデル: Hugging Faceまたは提供されたソースからミストラルモデルのチェックポイントとトークナイザーをダウンロードしてください。
- ハードウェア: 効率的な実行のためにGPUへのアクセスが必要で、理想的にはCUDAサポートがあること。
- STORM コードベース: スタンフォード OVAL の GitHub から STORM デモリポジトリをクローンします。
- 構成: モデルやデータセットのパスなど、必要に応じて構成ファイルを調整してください。
STORMは何をするのですか?
STORMは、一連のLLMエージェントを使用し、WikipediaとYou.comの検索APIを活用して、任意のテーマに関する高品質のWikipediaのような記事を生成するパイプラインです。これを達成するために、パイプラインは最初に提出されたトピックに関連するWikipediaの記事を検索し、そこから目次を抽出してそのトピックに関する新しいアウトラインを生成します。これらの情報は、主題マスターの会話エージェントの一連を設定するために使用され、迅速に情報を持ったWikipediaの作家を準備します。その情報を持った作家は、アウトラインを足場として記事を執筆します。
STORMはどのように機能しますか?
まず、STORMはyou.com検索APIを使用してLLMのWikipedia記事にアクセスします。STORMを始めるには、APIキーを設定し、ノートブックのsecrets.tomlに追加してください。LLMライターエージェントについては、HuggingFace.coからキャッシュにダウンロードされたモデルを実行するためにVLLMを活用します。具体的には、MistralのMistral-7B-Instruct-v0.2を使用します。
(ソース)
STORMの記事から、Wikipediaのような記事を生成するという課題に対するさまざまなアプローチの高レベルの概要を示します。これを行うために、ほとんどのアプローチは「事前執筆」と呼ばれる技術を使用します。これは、大規模言語モデル(LLM)が、トピックに関する資料を別々のソースから集めて解析する発見の段階です。
彼らが最初に考えたのは、おそらく最も直接的で明白な方法です:LLMエージェントが大量の質問を生成し、それぞれをモデルに問いかけます。それらはその後、エージェントによって記録され、サブヘッダーを付けて整理され、アウトラインが作成されます。
彼らが言及した第二の方法は、視点に基づいた質問の作成です。このプロセスでは、モデルがまず異なるが関連性のあるウィキペディアの記事を分析することで多様な視点を発見します。そして、LLMはこれらの視点によって擬人化され、記事のアウトラインを生成する直接的な質問をより正確に形成することができます。
(ソース)
第三の方法は、STORMリリースのために開発されたものです:会話型質問投げかけです。この方法は、視点ガイド付き質問投げかけの拡張型を含みます。このパイプラインは、「プロンプトによりLLMが関連トピックのリストを生成し、その後、対応するWikipedia記事から目次を抽出します。これらの記事は、Wikipedia APIを通じて取得可能な場合に限ります」(出典)。その後、記事は各自で設定された数の視点を提供し、Wikipediaライターエージェントとしてトピック専門家と対話します。各視点ごとに、Wikipediaライターとトピック専門家は会話をシミュレートします。設定された数のインタラクションの後、視点と会話の履歴の文脈を持つトピック関連の質問が生成されます。 質問は単純な検索用語に分解され、検索結果は信頼できない情報源を除外するために使用されます。信頼できる検索結果は合成され、質問への最終的な答えが生成されます。最終的な質問応答のインタラクションは、LLMが執筆段階で参照するためのリファレンスガイドに集約されます。最終的なアウトラインは、固有の知識を使用して、リファレンスから集められた知識を高品質な記事にまとめます。
プレライティング段階が完了し、執筆前に、LLMは最初にトピックから記事の一般的な概要を生成するように促されます。この一般的な概要は、その後、入力トピックとシミュレーションされた会話を再度使用して、元の概要から改善された概要を生成するために使用されます。これにより、Wikipediaのライターを導くために執筆中に使用されます。記事は概要の各セクションから徐々に生成されます。最終的な出力は連結されて、完全な記事が生成されます。
STORM デモ
STORMを実行するためには、まずいくつかのことを処理する必要があります。
デモを実際に実行するには、You.comにサインアップしてWeb+News Search APIを利用する必要があります。無料トライアルにサインアップするためのリンクを使用し、APIキーを取得してください。そのキーは後で使用するために保存しておいてください。
その準備が整ったら、ノートブックを起動できます。STORMを実行するためにはA6000またはA100-80G GPUをお勧めします。これにより、合理的な時間内に結果を得ることができ、メモリエラーを回避できます。
ノートブックが起動したら、デモを続けるためにipynbファイルを開いてください。
デモの設定
デモの設定は非常に簡単です。始めるために、VLLMとSTORMの要件をインストールする必要があります。最初のコードセルを実行するか、各行の先頭にある感嘆符なしで、これを対応するターミナルに貼り付けてください。
!git pull
!pip install -r requirements.txt
!pip install -U huggingface-hub anthropic
!pip uninstall jax jaxlib tensorflow -y
!pip install vllm==0.2.7
このプロセスには少し時間がかかることがあります。完了したら、次のコードセルを実行してHuggingFace.coにログインし、APIアクセストークンを取得してください。トークンは、出力で与えられたリンクを使用してアクセスまたは作成できます。トークンを出力に提供されたセルに単純にコピーして貼り付けて追加してください。
import huggingface_hub
huggingface_hub.notebook_login()
これが完了すると、使用したいHuggingFaceモデルにアクセスできるようになります。これは、mistral_kwargs変数の35行目にあるrun_storm_wiki_mistral.pyファイルのモデルIDを編集することで変更でき、さらにVLLMクライアントに呼び出すモデルIDを変更することもできます。
VLLMクライアントの実行
STORMを実行するために、PythonスクリプトはAPI呼び出しを利用してLLMから入力を受け取り、出力を得ます。デフォルトでは、これがOpenAIの使用に設定されていました。最近数日間で、彼らはスクリプトと連携できるDSPY VLLMエンドポイントを有効にする機能を追加しました。
これを設定するには、次のコードセルを実行するだけです。これにより、私たちが直接対話できるインタラクティブAPIエンドポイントとしてMistralが起動します。
!python -m vllm.entrypoints.openai.api_server --port 6006 --model 'mistralai/Mistral-7B-Instruct-v0.2'
APIが立ち上がったら、STORMを実行できます。次のセクションを使って、どのように設定するかを確認してください。
STORMを運営する
すべての設定が整ったので、私たちが行うべきことはSTORMを実行するだけです。このデモでは、彼らの例である run_storm_wiki_mistral.py を使用します。以下のコマンドをターミナルウィンドウに貼り付けてください。
python examples/run_storm_wiki_mistral.py \
--url "http://localhost" \
--port 6006 \
--output-dir '/notebooks/results/' \
--do-research \
--do-generate-outline \
--do-generate-article \
--do-polish-article
ここから、あなたの選んだトピックを入力するよう求められます。これが私たちの新しい記事の主題になります。私たちは「NVIDIA GPU」という入力されたトピックでテストしました。以下に生成された記事からのサンプルセクションを読むことができます。ご覧の通り、フォーマットはWikipediaの記事を完璧に模倣しています。このトピックは元のモデルの訓練ではあまり重視されていなかったと思われる、皮肉なニッチさを考えると、生成されたテキストに提示された正しい情報はすべてSTORMリサーチ手続きによって確認されたと推測できます。それでは、見てみましょう。
## Ampere Architecture (2020)
Ampere is the newer of the two architectures and is employed in the latest generation of NVIDIA graphics cards, including the RTX 30 Series [6]. It offers up to 1.9X Performance per Watt improvement over the Turing architecture [6]. Another great addition to the Ampere is the support for HDMI 2.1, which supports ultra-high resolution and refresh rates of 8K@60Hz and 4K@120Hz [6].
Both Turing and Ampere architectures share some similarities. They are employed in the latest generation of NVIDIA graphics cards, with Turing serving the RTX 20 Series and Ampere serving the RTX 30 Series [6]. However, Ampere comes with some newer features and improvements over the Turing GPU architecture [6].
[6] The Ampere architecture offers up to 1.9X Performance per Watt improvement over the Turing architecture. Another great addition to the Ampere is the support for HDMI 2.1 which supports the ultra-high resolution and refresh rates which are 8K@60Hz and 4K@120Hz.
[7] Look for new applications built from scratch on GPUs rather than porting of existing large simulation applications.
[8] In 2007, NVIDIA’s CUDA powered a new line of NVIDIA GPUs that brought accelerated computing to an expanding array of industrial and scientific applications.
[1] Opens parallel processing capabilities of GPUs to science and research with the unveiling of CUDA® architecture.
[9] RAPIDS, built on NVIDIA CUDA-X AI, leverages more than 15 years of NVIDIA® CUDA® development and machine learning expertise.
[10] Modeling and simulation, the convergence of HPC and AI, and visualization are applicable in a wide range of industries, from scientific research to financial modeling.
[11] PhysX is already integrated into some of the most popular game engines, including Unreal Engine (versions 3 and 4), Unity3D, and Stingray.
[12] NVIDIA Omniverse™ is an extensible, open platform built for virtual collaboration and real-time physically accurate simulation.
これを見る限り、これは利用可能な情報の非常に印象的な要約です。この非常に複雑で技術的なテーマに関する具体的な点でいくつかの小さな間違いがあるものの、パイプラインはその生成した文章において、このテーマの現実に対してほぼ完全に正確でした。
締めくくりの考え
この記事で紹介したSTORMのアプリケーションは本当に素晴らしいです。このようなLLMsを用いることで、教育やドライコンテンツの制作プロセスを超強化する可能性が非常に多くあります。関連技術がさらに進化するにつれて、この発展を見るのが待ちきれません。


