「OpenAIモデルに対するオープンソースの代替手段の探索」

「オープンソースの代替手段を探る:OpenAIモデルに対するアプローチ」

序文

AIの領域では、11月はドラマチックな展開がありました。GPTストアやGPT-4-turboのローンチ、そしてOpenAIの騒動まで、まさに忙しい一ヶ月でした。しかし、ここで重要な問題が浮かび上がります:クローズドモデルとその背後にいる人々はどれだけ信頼できるのでしょうか?自分が実際に運用しているモデルが内部の企業ドラマに巻き込まれて動作停止するのは快適な体験とは言えません。これはオープンソースモデルでは起こらない問題です。展開するモデルには完全な管理権限があります。データとモデルの両方に対して主権を持っています。しかし、OSモデルをGPTと置き換えることは可能でしょうか?幸いなことに、既に多くのオープンソースモデルが、GPT-3.5モデル以上の性能を発揮しています。本記事では、オープンソースのLLM(Large Language Models)およびLMM(Large Multi-modal Models)の最高の代替品をいくつか紹介します。

学習目標

  • オープンソースの大規模言語モデルについての議論。
  • 最新のオープンソース言語モデルとマルチモーダルモデルについての探求。
  • 大規模言語モデルを量子化するための簡易な導入。
  • LLMをローカルおよびクラウド上で実行するためのツールやサービスについて学ぶ。

この記事は、データサイエンスブログマラソンの一環として公開されました。

オープンソースモデルとは何ですか

モデルがオープンソースと呼ばれるのは、モデルの重みとアーキテクチャが自由に利用できる状態にあるからです。これらの重みは、例えばMeta’s Llamaのような大規模言語モデルの事前訓練パラメータです。これらは通常、ファインチューニングされていないベースモデルやバニラモデルです。誰でもこれらのモデルを使用し、カスタムデータでファインチューニングして下流のアクションを実行することができます。

しかし、それらはオープンなのでしょうか?データはどうなっているのでしょうか?多くの研究所は、著作権に関する懸念やデータの機密性の問題などの理由から、ベースモデルの訓練データを公開しません。これはまた、モデルのライセンスに関する部分にも関連しています。すべてのオープンソースモデルは、他のオープンソースソフトウェアと同様のライセンスが付属しています。Llama-1などの多くのベースモデルは非商用ライセンスとなっており、これらのモデルを利用して収益を上げることはできません。しかし、Mistral7BやZephyr7Bなどのモデルは、Apache-2.0やMITライセンスが付属しており、どこでも問題なく使用することができます。

オープンソースの代替品

Llamaのローンチ以来、オープンソースの領域ではOpenAIモデルに追いつこうとする競争が繰り広げられています。そしてその結果は今までにないものでした。GPT-3.5のローンチからわずか1年で、より少ないパラメータでGPT-3.5と同等またはそれ以上のパフォーマンスを発揮するモデルが登場しました。しかし、GPT-4は依然として理性や数学からコード生成までの一般的なタスクには最も優れたモデルです。オープンソースモデルのイノベーションと資金調達のペースを見ると、GPT-4のパフォーマンスに近づくモデルが間もなく登場するでしょう。とりあえず、これらのモデルの素晴らしいオープンソースの代替品について話しましょう。

Meta’s Llama 2

Metaは今年7月にLlama-2という彼らの最高のモデルをリリースし、その印象的な能力により一瞬で人気を集めました。MetaはLlama-7b、Llama-13b、Llama-34b、Llama-70bの4つの異なるパラメータサイズのLlama-2モデルをリリースしました。これらのモデルは、それぞれのカテゴリにおいて他のオープンモデルを上回る性能を発揮しました。しかし、現在ではmistral-7bやZephyr-7bのような複数のモデルが、多くのベンチマークで小さなLlamaモデルを上回る性能を発揮しています。Llama-2 70bはまだそのカテゴリーで最高のモデルの一つであり、要約や機械翻訳などのタスクにおいてGPT-4の代替モデルとして価値があります。

Llama-2はGPT-3.5よりも多くのベンチマークで優れたパフォーマンスを発揮し、GPT-4に迫ることもできました。以下のグラフは、AnyscaleによるLlamaとGPTモデルのパフォーマンス比較です。

Llama-2に関する詳細は、HuggingFaceのブログを参照してください。これらのLLMは、カスタムデータセットでの微調整を行うとよいパフォーマンスを発揮することが示されています。モデルを特定のタスクでより優れたパフォーマンスを発揮するように微調整することができます。

さまざまな研究所では、Llama-2の微調整済みバージョンもリリースされています。これらのモデルは、多くのベンチマークで元のモデルよりも優れた結果を示しています。Nous Researchのこの微調整済みのLlama-2モデル、Nous-Hermes-Llama2-70bは、30万以上のカスタム指示で微調整されており、元のmeta-llama/Llama-2-70b-chat-hfよりも優れています。

HuggingFaceのリーダーボードをチェックしてください。元のモデルよりも優れた結果を示す微調整済みのLlama-2モデルを見つけることができます。これはOSモデルの利点の一つです。要件に応じて多くのモデルから選ぶことができます。

Mistral-7B

Mistral-7Bのリリース以来、これはオープンソースコミュニティの愛される存在となりました。他のモデルを凌ぐ優れたパフォーマンスを発揮し、GPT-3.5の能力に近づいています。このモデルは、要約、言い換え、分類など、様々な場合においてGpt-3.5の代替となることができます。

少ないモデルのパラメータにより、より小さいモデルが作成でき、大きなものよりも低コストでローカルで実行するか、ホストすることができます。以下は、Mistral-7bの元のHuggingFaceスペースです。Mistral-7bの特筆すべき点は、何の検閲も受けていない生のモデルであることです。ほとんどのモデルは、重いRLHFによって前処理されており、多くのタスクには適していませんが、これはMistral-7Bを実世界の特定のタスクに向いているものにしています。

活気あるオープンソースコミュニティのおかげで、元のMistral7bモデルよりも優れたパフォーマンスを発揮するいくつかの微調整済みの代替モデルが存在します。

OpenHermes-2.5

OpenHermes-2.5は、Mistralを微調整したモデルです。GPT4ALL、TruthfullQA、AgiEval、BigBenchなどの評価指標で顕著な結果を示しています。多くのタスクでは、これはGPT-3.5と区別できません。OpenHermesに関する詳細は、次のHFリポジトリを参照してください:teknium/OpenHermes-2.5-Mistral-7B

Zephyr-7B

Zephyr-7Bは、HuggingFaceによってMistral-7Bを微調整したもう一つのモデルです。Huggingfaceは、Mistral-7BをDPO(Direct Preference Optimization)を使用して完全に微調整しました。Zephyr-7b-betaは、ライティング、人文科学の科目、ロールプレイを含む多くのタスクでGPT-3.5やLlama-2-70bなどの大規模なモデルと同等のパフォーマンスを発揮します。以下は、Zephyr-7Bと他のモデルとのMTbenchでの比較です。これは多くの点でGPT-3.5の代替となります。

公式のHuggingFaceリポジトリはこちらです:HuggingFaceH4/zephyr-7b-beta

Intel Neural Chat

ニューラルチャットは、インテルによってMistral-7Bから微調整された7BのLLMモデルです。これは、すべての7Bモデルの中でHuggingfaceリーダーボードのトップを獲得しました。NeuralChat-7bは、AIタスクの高速化に使用されるインテルのチップであるGaudi-2上で微調整とトレーニングされています。NeuralChatの優れたパフォーマンスは、監督付き微調整と直接最適化優先度(DPO)によるOrcaとSlim-Orcaデータセットを使用した結果です。

NeuralChatのHuggingFaceリポジトリはこちらです:Intel/neural-chat-7b-v3-1

オープンソースの大規模マルチモーダルモデル

GPT-4 Visionのリリース後、マルチモーダルモデルに対する関心が高まっています。ビジョンを持つ大規模な言語モデルは、画像に関する質問応答やビデオのナレーションなど、多くの実世界のユースケースで優れたパフォーマンスを発揮することができます。そのようなユースケースの1つで、TldrawがGPT-4Vの画像をコードに変換する能力を活かし、AIホワイトボードをリリースしました。

しかし、オープンソースのモデルが急速に拡大しています。LlavaやBaklava、Fuyu-8bなど、多くの研究所が大規模なマルチモーダルモデルをリリースしています。

Llava

Llava(Large language and vision Assistant)は、130億のパラメータを持つマルチモーダルモデルです。LlavaはVicuna-13b LLMと事前学習された視覚エンコーダCLIP ViT-L/14を接続しています。Visual ChatとScience QAデータセット上でファインチューニングされ、多くの場面でGPT-4Vと同等のパフォーマンスを実現しています。これは視覚に関わるQAタスクに使用することができます。

BakLlava

SkunkWorksAIのBakLlavaは、もう1つの大規模なマルチモーダルモデルです。これはMistral-7bを基にしたLLMで、Llava-1.5のアーキテクチャを付加しています。Llava-13bと同等の優れたパフォーマンスを持つにも関わらず、サイズが小さいため、必要なときにこのモデルを利用することをお勧めします。

Fuyu-8b

もう1つオープンソースの代替案として挙げられるのがFuyu-8bです。これはAdeptの優れたマルチモーダル言語モデルです。Fuyuはビジュアルエンコーダを持たないデコーダ専用のトランスフォーマーです。これは、CLIPを使用するLlavaとは異なります。

他のマルチモーダルモデルが画像エンコーダを使用してLLMに画像データを供給するのに対し、Fuyuは画像の部分をトランスフォーマーの最初のレイヤーに直線的に投影します。トランスフォーマーデコーダを画像トランスフォーマーとして扱います。以下はFuyuアーキテクチャのイラストです。

Fuyu-8bの詳細については、記事を参照してください。HuggingFaceリポジトリadept/fuyu-8b

オープンLLMの使用方法

オープンソースのLLMやLMMの中でも最高のパフォーマンスを発揮するものについては既に紹介しましたが、オープンモデルから推論を得る方法についての質問が残ります。オープンソースのモデルから推論を得る方法は2つあります。個人のハードウェアにモデルをダウンロードするか、クラウドプロバイダに登録する方法です。これは使用ケースによります。これらのモデルは、小さなものであっても計算資源を多く必要とし、高いRAMとVRAMを要求します。商用ハードウェア上でこれらのモデルを推論することは非常に困難です。この問題を解決するために、モデルは量子化される必要があります。モデル量子化とは何かを理解しましょう。

量子化

量子化は、浮動小数点数の精度を低下させる技術です。通常、ラボでは、高い浮動小数点精度のウェイトとアクティベーションを使用して、最新のパフォーマンス(SOTA)を達成するモデルをリリースします。これにより、モデルの計算には高い要求がかかり、ローカルで実行するかクラウド上でホストするのには理想的ではありません。そのため、ウェイトと埋め込みの精度を低下させる解決策が必要となります。これが量子化と呼ばれるものです。

SOTAモデルは通常、float32の精度を持ちます。量子化には、fp32 -> fp16、fp32 -> int8、fp32 -> fp8、fp32 -> fp4など、さまざまなケースがあります。このセクションでは、int8または8ビット整数量子化についてのみ議論します。

int8への量子化

int8表現は256文字しか収容することができません(符号つき[-128,127]、符号なし[0,256])。一方、fp32では多くの数字を扱うことができます。アイデアは、fp32値の[a,b]での等価な射影をint8形式に見つけることです。

もしXが[a,b]の範囲内のfp32の数であるなら、量子化スキームは以下の通りです。

X = S*(X_q – z)

  • X_q = Xに関連する量子化された値
  • Sはスケーリングパラメータです。正のfp32の数値です。
  • zはゼロポイントです。これはfp32の値0に対応するint8の値です。

したがって、X_q = round(X/S + z) ∀ X ∈ [a,b]

fp3,2に対して、[a,b]を超える値は最も近い表現にクリップされます

X_q = clip( X_q = round(a/S + z) + round(X/S + z) + X_q = round(b/S + z)  )

  • round(a/S + z)は、その数値形式で最小の値であり、round(b/S + z)は最大の値です。

これがアフィンまたはゼロポイント量子化の方程式です。これは8ビット整数量子化に関するものであり、8ビットfp8、4ビット(fp4、nf4)、2ビット(fp2)の量子化スキームもあります。量子化に関する詳細は、HuggingFaceの記事を参照してください。

モデルの量子化は複雑な作業です。LLMの量子化には多くのオープンソースツールがあります。例えば、Llama.cppAutoGPTQllm-awqなどがあります。Llama cppはGGUFを使用してモデルを量子化し、AutoGPTQはGPTQを使用し、llm-awqはAWQ形式を使用します。これらはモデルサイズを小さくするための異なる量子化手法です。

したがって、推論にオープンソースモデルを使用したい場合、量子化されたモデルを使用することは合理的です。ただし、高額ではないより小さなモデルを得るためにいくらかの推論品質を犠牲にすることになります。

量子化されたモデルについては、以下のHuggingFaceリポジトリをご覧ください: https://huggingface.co/TheBloke

ローカルでのモデルの実行

さまざまなニーズに応じて、ローカルでモデルを実行する必要があることがよくあります。ローカルでモデルを実行する際には、多くの自由度があります。機密文書のためのカスタムソリューションの構築や実験目的の場合など、クローズドソースのモデルよりもローカルのLLMは自由度が高く安心感があります。

ローカルでモデルを実行するためのさまざまなツールが存在します。最も人気のあるものは、vLLM、Ollama、LMstudioです。

VLLM

vLLMは、Pythonで書かれたオープンソースの代替ソフトウェアで、LLMをローカルで実行することができます。vLLMでモデルを実行するには、通常、vRAM計算能力が7以上、RAMが16 GB以上のハードウェア仕様が必要です。テスト用にはCollabで実行できるはずです。vLLMは現在、AWQ量子化形式をサポートしています。以下は、vLLMで使用できるモデルです。そして、ここではモデルをローカルで実行する方法を説明します。

from vllm import LLM, SamplingParams
prompts = [
    "こんにちは、私の名前は",
    "アメリカ合衆国の大統領は",
    "フランスの首都は",
    "AIの未来は"
]
sampling_params = SamplingParams(temperature=0.8, top_p=0.95)
llm = LLM(model="mistralai/Mistral-7B-v0.1")
outputs = llm.generate(prompts, sampling_params)
for output in outputs:
    prompt = output.prompt
    generated_text = output.outputs[0].text
    print(f"プロンプト: {prompt!r}, 生成されたテキスト: {generated_text!r}")

vLLMはOpenAIエンドポイントもサポートしています。そのため、既存のOpenAIの実装にドロップイン置換としてこのモデルを使うことができます。

import openai
# APIキーとAPIベースを変更し、vLLMのAPIサーバーを使用します。
openai.api_key = "EMPTY"
openai.api_base = "http://localhost:8000/v1"
completion = openai.Completion.create(model="mistralai/Mistral-7B-v0.1", prompt="サンフランシスコは")
print("Completion結果:", completion)

ここでは、OpenAI SDKを使用してローカルモデルから推論します。

Ollama

Ollamaは、Go言語で記述された別のオープンソースの代替CLIツールで、オープンソースのモデルをローカルのハードウェアで実行することができます。OllamaはGGUF形式のモデルをサポートしています。

ディレクトリにモデルファイルを作成して実行します

FROM ./mistral-7b-v0.1.Q4_0.gguf

モデルファイルからOllamaモデルを作成します。

ollama create example -f モデルファイル

それでは、モデルを実行します。

ollama run example "Pythonのプロセスを終了する方法は?"

OllamaはPyTorchやHuggingFaceモデルも実行することができます。詳細は、彼らの公式リポジトリを参照してください。

LMstudio

LMstudioは、自分のPC上で任意のモデルを簡単に実行できるクローズドソースのソフトウェアです。モデルを実行するための専用ソフトウェアが必要な場合に最適です。ローカルモデルを使用するための素敵なUIを備えています。これはMac(M1、M2)、Linux(ベータ版)、およびWindowsで利用可能です。

また、GGUF形式のモデルもサポートしています。詳細は、彼らの公式ページをご覧ください。ハードウェアの仕様をサポートすることを確認してください。

クラウドプロバイダーからのモデル

ローカルでモデルを実行することは、実験やカスタムの使用ケースには素晴らしいですが、それらをアプリケーションで使用するには、クラウド上にモデルをホストする必要があります。ReplicateやBrev Devなどの専用LLMモデルプロバイダーを経由して、モデルをクラウド上にホストすることができます。ホスティング、ファインチューニング、およびモデルからの推論を行うことができます。彼らはLLMのホスティングに向けた柔軟でスケーラブルなサービスを提供します。トラフィックに応じてリソースの割り当ては変化します。

結論

オープンソースモデルの開発は、疾風のように進んでいます。ChatGPTの1年後には、多くのベンチマークでそれを凌ぐより小さなモデルが登場しました。これは始まりに過ぎず、GPT-4に匹敵するモデルが近くにあるかもしれません。最近、クローズドソースモデルを後ろ盾とする組織の信頼性についての問題が提起されています。開発者として、モデルとそれを利用したサービスを危険にさらしたくないでしょう。オープンソースはこれを解決します。あなたは自分のモデルを知っていて、モデルを所有しています。オープンソースモデルは多くの自由を提供します。OSモデルとOpenAIモデルのハイブリッド構造を持つことで、コストと依存性を削減することもできます。したがって、この記事では、優れたパフォーマンスを発揮するいくつかの優れたOSモデルと、これらを実行するための概念について紹介しました。

以下に、主なポイントをまとめます。

  • オープンモデルは主権を意味します。オープンソースモデルは、クローズドモデルが提供しない必要な信頼性要素を提供します。
  • Llama-2やMistralなどの大規模な言語モデルとそのFine-tuningは、多くのタスクでGPT-3.5を上回っており、理想的な代替品となっています。
  • Llava、BakLlava、Fuyu-8bなどの大規模なマルチモーダルモデルは、多くのQAや分類タスクで有用性を示しています。
  • LLMは大規模で計算量が多いため、ローカルで実行するには量子化が必要です。
  • 量子化は、重みとアクティベーションの浮動小数点数をより小さいビットにキャストするための手法です。
  • オープンソースのモデルをローカルでホストして推論するには、LMstudio、Ollama、vLLMなどのツールが必要です。クラウドに展開するためには、ReplicateやBrevなどのサービスを使用します。

よくある質問

この記事で表示されているメディアはAnalytics Vidhyaによって所有されておらず、著者の裁量で使用されています。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

機械学習

マルチモーダル医療AI

Google ResearchのHealth AI部門の責任者であるGreg Corradoと、Engineering and ResearchのVPであるYossi Matiasによって投...

AIニュース

「企業がGoogle Cloud AIを利用する7つの方法」

「Google Cloud Next 2023では、数千人がサンフランシスコに集まり、Google Cloudの最新アップデートについて学びました」

人工知能

私たちの早期警戒システムへのサポート

GoogleのYossi MatiasさんとWMOのインフラストラクチャー部門ディレクターであるAnthony Reaさんが「Early Warnings For All ...

データサイエンス

「生成AIにおけるバイアスの軽減」

イントロダクション 現代の世界では、生成型AIは創造性の限界を押し広げており、機械が人間のようなコンテンツを作り出すこと...

機械学習

「BentoML入門:統合AIアプリケーションフレームワーク」

この記事では、統合されたAIアプリケーションフレームワークであるBentoMLを使用して、機械学習モデルの展開を効率化する方法...