LLMの迷宮を辿る:オープンソースLLMとその先への包括的ガイド
Spiral.AI Tech Blog は、膨大な数のオープンソース LLM の命名規則とアーキテクチャを解説し、基礎モデルからインストラクションチューニングに至る技術的進化の背景を包括的にガイドしている。
キーポイント
複雑化する LLM の命名規則と分類
「Goliath-longLORA-120b-rope8–32k-fp16-GPTQ」のような冗長なモデル名が示す通り、マージやファインチューニング技術の組み合わせにより数千もの派生モデルが存在し、その構造を理解する必要性が高まっている。
基礎モデル(Foundation Models)の現状とアーキテクチャ
数十億ドル規模のコストがかかる事前学習プロセスを経て生成されたモデルは、トランスフォーマーアーキテクチャが主流だが、RWKV などの例外もあり、Llama や Mistral シリーズなどが代表的な基盤となっている。
インストラクションチューニングの革命と Alpaca の役割
ChatGPT 3.5 の登場後、Meta の LLaMA をベースに Stanford が低コスト(1,000 ドル未満)で合成データを用いた SFT(教師あり微調整)を行い、Alpaca を開発したことがオープンソース界の転換点となった。
主要なデータセットとモデル開発の生態系
cognitivecomputations や databricks-dolly-15k などのデータセットがインストラクションチューニングに利用され、Meta を含む多様な組織が基礎モデルと指示従属モデルを並行してリリースする体制が確立されている。
RLHFとDPOによる安全性の確保
LLMを有用・誠実・無害にするために、人間のフィードバックに基づく強化学習(RLHF)や直接選好最適化(DPO)が用いられ、有害な指示への従順性を抑制します。
LoRAとQLoRAによる低コスト微調整
パラメータの1%未満のみを更新するLoRAや、その拡張であるQLoRAを用いることで、消費者用GPUでも大規模モデルのファインチューニングが可能になり、研究コストが劇的に低下しました。
量子化による推論効率化
モデル重みを8ビットや4ビットに圧縮する量子化技術により、メモリ使用量が大幅に削減され、CPU上での実行やエッジデバイスへの展開が可能になります。
影響分析・編集コメントを表示
影響分析
この記事は、急激に増殖しているオープンソース LLM の生態系を整理し、開発者や技術者が膨大なモデルの中から適切なものを選択・理解するための重要な指針となる。特に、高コストな学習プロセスを経ずに低予算で高性能なチャットボットを構築する手法(SFT)の普及背景を解説することで、次世代 AI 開発の民主化の流れを明確に示している。
編集コメント
LLM の命名規則が複雑化している現状を、具体的なモデル名例を用いて解説しており、初心者から中級者までがモデル選定を行う際の重要なコンテキストを提供しています。特に低コストで SFT を行う手法の歴史的意義に言及している点は、オープンソースコミュニティの成長を理解する上で非常に有益です。
AI
OpenAI
llm
生成 AI tech こんにちは、@raksparadox です。AI の開発速度が非常に速いため、全てのトレンドを追いかけることはほぼ不可能に思えます。数十の新しいオープンソースの基盤モデルがあり、さらにこれらのモデルを基にして、マージング、ファインチューニング、コンテキスト拡張など様々な技術を用いて数千の洗練されたバージョンが構築されています。Hugging Face はオープンソースモデルのハブとして、現在 500,000 以上のモデルをホストしています!
この記事では、次に「Goliath-longLORA-120b-rope8–32k-fp16-GPTQ」のようなものに出会ったとき、その特徴を理解できるように、さまざまなオープンソース LLM(大規模言語モデル)についてのクラッシュコースを提供します。
大規模言語モデル(LLM:Large Language Model)は、膨大なデータセット(数テラバイト)に基づいて学習された重要なディープラーニングモデルで、このプロセスは事前学習と呼ばれています。これらの学習セッションには数百万ドルの費用がかかるため、これらのプロジェクトを実施できるリソースを持つ企業や組織はほんのわずかです。現在、これらのモデルのほとんどは、文脈を与えられた次のトークンを予測するために学習されています(因果的言語モデリング:Causal Language Modeling)、これにより、特に補完タスクで効果的になります。この費用のかかる学習フェーズが完了すると、自然言語を理解し、世界モデルとして機能する強力なモデルが得られます。こちらはイリヤ・スツケーヴァーさんが世界モデルの概念と LLM がそれをどのように学習するかを説明するビデオです。https://youtu.be/NT9sP4mAWEg
一度学習されると、基本モデル(ファンデーションモデルとしても知られています)は、文を完成させたり、コードを生成するのが得意になります。現在、様々な組織によってリリースされた数十のオープンソース基本モデルがあります。しかし、これらのモデルのほとんどはトランスフォーマーアーキテクチャに基づいています(RWKV のような例外も存在します)。さらに、トランスフォーマーベースのモデルのほとんどは、EleutherAI の GPT-Neo や Meta の LLaMA コードベースを使用してモデルを学習します。ここに、いくつかの注目すべき基本モデルとそれらをリリースした組織の非網羅的なリストがあります:
Sizes (in Billion)
Llama and Llama2 series
Mistral and Mixtral
Pythia suite and GPTxNeo
これらのモデルは優れた基盤として機能するため、基本モデルとして知られています。一つの使用例は、特定の言語のために LLM の性能を向上させることを目指す場合、これらのモデルを出発点として使用することです。
したがって、Mistral-7B-OpenOrca-oasst_top1_2023–08–25-v2-GPTQ という名前のモデルに出会った場合、そのモデルは Mistral 7B を基礎として使用して構築されたことを示しています。
前のセクションでは、基本的な大規模言語モデル(LLM: Large Language Model)の学習方法について説明しました。現在、これらの基本モデルが人間の方法に合わせられる方法を探ります。これにより、指示に従ったり、会話に参加したり、私たち人間に魅力的な反応を生成することができます。
2022 年末に ChatGPT 3.5 がリリースされた後、世界中で大きな話題となり、多くの組織がオープンソースの方法で類似のモデルを作成しようとしました。Meta が先導して、2023 年 2 月に LLaMA と呼ばれる LLM をリリースしました。これは事前学習されたモデルで、4 つのサイズ(7B、13B、33B、65B)で利用可能でした。これらは完成タスクには対応できる基本モデルでしたが、ChatGPT のようにチャットや指示に従う機能は備えていませんでした。しかし、LLaMA のリリースから 1 ヶ月以内に、スタンフォード大学が LLaMA を指示に従う学習を施した論文を発表し、ChatGPT 3.5 に似たモデルを作成しました。それは Alpaca と名付けられ、方法は ChatGPT を使用して合成指示データセットを作成し、基本モデルを合わせるために教師あり微調整(Supervised Fine-Tuning: SFT)を利用することでした。プロジェクトのホームページで技術的な詳細を読むことができます。
これは、オープンソースの指示に従う/チャット LLM に向けた重要な進歩でした。Alpaca プロジェクトは、ChatGPT に似たモデルを作成するために 1,000 ドル未満を費やしたと報じられています。このプロジェクトで使用されたデータセットは Alpaca として知られるようになり、多くのモデルを学習して指示に従わせるのに使用されました。その後、モデル開発組織(Meta を含む)は、基本モデルと指示にチューニングされたモデルの両方をリリースし始めました。
Alpaca の後、指示/チャットチューニングのためにいくつかの他のデータセットが作成されました。以下はその中のいくつかの注目すべきものです:
cognitivecomputations
databricks-dolly-15k
現在、様々な組織は基本モデルをファインチューニングして、指示に従う/チャットモデルを作成することができます。先に述べたデータセット以外にも、いくつかの組織は上記の方法を使用して無検閲/ロールプレイング LLM を学習しています。しかし、彼らが使用しているデータセットをまだオープンソース化していません。これらの有名な例の一つが、Nous-Hermes シリーズのモデルです。
実用的な使用例として、QA や指示データセットを持っている場合、指示に従う/チャット用に監視されたファインチューニング(SFT: Supervised Fine-Tuning)を使用して既に学習されたモデルから始めることを検討すべきです。チャット/指示に従うデータセットを使用して任意の LLM をファインチューニングする方法についてガイダンスを探している場合、プロセスを詳細に説明している素晴らしいブログ投稿があります。
最終的に、dolphin-2.0-mistral-7B-GGUF という名前のモデルに出会った場合、それは誰かが Dolphin データセットで Mistral 7B モデルをファインチューニングしたことを示しています。
指示に従うモデルを持つと、性的または暴力的な内容を含む任意のことに対して簡単に指示に従うことができます。したがって、賢明な人々は LLM を有用で、誠実で、無害であるように調整すべきだと考えました。AI の安全性と倫理についての全体的な議論がありますが、その螺旋には降りません。これは、RLHF(人間のフィードバックからの強化学習)または人間のフィードバックからの強化学習と呼ばれるプロセスを通じて行われます。
OpenAI からのこの有名な図は、事前学習から RLHF へのプロセスを説明しています
OpenAI は PPO を使用しました
RLHF には 2 つの有名な方法があります。OpenAI によって使用された近位方策最適化(PPO: Proximal Policy Optimization)と、この論文で紹介されたより最近の直接選好最適化(DPO: Direct Preference Optimization)です(スタンフォードに感謝!)。DPO と PPO はアルゴリズムは異なりますが、LLM の出力を人間が好むものに合わせるという同じタスクを実行します。
以下は RLHF 用のいくつかの有名なデータセットです。
stack-exchange-preferences
summarize_from_feedback
例として、hh-rlhf データセットからの一例を紹介します。
RLHF データの例
ちなみに、これの影響で ChatGPT が DPO や PPO を使用して RLHF(Reinforcement Learning from Human Feedback:人間のフィードバックによる強化学習)を行った後、私たちは人間の好みに合わせたモデルを持っています。ですので、次に dolphin-2.6-mistral-7B-dpo-laser-GPTQ という名前のモデルを見かけたとき、それは誰かが mistral 7b を dolphin で学習し、最終モデルを合わせるために DPO(Direct Preference Optimization:直接選好最適化)を使用したことを意味します。
スタンフォードによるアルパカの論文の後でも、LLM の指示チューニングには数百ドルかかり、それは依然として独立研究者、改造愛好家、趣味の人々にとって禁じ手の高価さです。そのため、2021 年の古い論文が名声を得ました。この論文では、1% 未満のパラメータを使用してモデルを微調整する方法を紹介し、LoRA(Low-Rank Adaptation:低ランク適応)を使用した微調整を、消費者用 GPU 上で LLM を微調整する安価で有名な方法としています。
時間が経つにつれて、他のパラメータ効率的な微調整方法が開発されましたが、LoRA は最も有名な方法の一つとして残っています。PEFT(Parameter-Efficient Fine-Tuning:パラメータ効率型ファインチューニング)ライブラリを使用して、さまざまな方法を探索することができます。
したがって、llama-2–7B-Guanaco-QLoRA-AWQ のようなモデルに出会った場合、このモデルは llama2–7B に基づいており、QLoRA(LoRA のバージョン)を使用して Guanaco データセットで微調整されていることを意味します。
効率的なトレーニングと同時に、コミュニティは LLM のサイズを縮小し、推論を高速化しようとしていました。そうすることで、最終的にエッジデバイス上で実行できるようになります。ここで、量子化が非常に有用な技術として登場しました。研究者たちは、モデルを 8 ビットや 4 ビットでロードしても、性能が著しく低下しないことを発見しました。しかし、モデルのサイズはそれぞれ半分と四分の一に縮小されました。
量子化の基本的な考え方はかなりシンプルです:高精度表現(通常は標準の 32 ビット浮動小数点)から、8 ビットや 4 ビットなどの低精度データ型への重みとアクティベーションの変換を含みます。これを行うことで、LLM は 2 倍から 4 倍小さくなり、推論速度は数倍に増加します。
以下は、最も使用されている量子化方法のリストです。GPU ではなく CPU 上で量子化されたモデルを実行するのに役立つ方法も含んでいます。さらに、これらの方法の一部は、Hugging Face を使用してトランスフォーマーをロードする際にオンザフライで使用できますが、他の方法では、使用する前にモデルを量子化されたバージョンに変換する必要があります。
bitsandbytes ライブラリは、Hugging Face によって公式にサポートされているカスタム CUDA 関数(CUDA function)を包む軽量な Python ラッパーであり、モデルを別途変換することなく 4 ビットおよび 8 ビットでモデルを読み込むために使用できます。これは QLoRA と共に利用されます。QLoRA を使用すれば、A100 40GB GPU 上で最大 65B の LLM(大規模言語モデル)をファインチューニングすることが可能です!QLoRA と bitsandbytes を併用することで、単一の A100 を用いて Mixtral8x7B をファインチューニングすることもできます。
model = AutoModelForCausalLM.from_pretrained(
model_name,
load_in_8bit=True)
以下は、Hugging Face の LLM を 8 ビットで初期化する方法を示すシンプルなスニペットです。load_in_8bit=True
load_in_4bit=True
GPTQ と AWQ はモデルを量子化するために異なるアルゴリズムを使用します。しかし、GPTQ または AWQ で量子化されたモデルを使用するには、まずモデルをそれぞれの形式に変換する必要があり、これには計算リソースが必要になります。しかし、これらの方法は単に bitsandbytes を使用するよりも効率的です。GPTQ と AWQ の両方がモデルを 4 ビットに量子化することができます。GPTQ は 2 ビット、3 ビット、8 ビットの量子化もサポートしています。しかし、GPTQ と比較して、AWQ はより新しく、より効率的な方法です。したがって、「llama-2–7B-Guanaco-QLoRA-AWQ」と名付けられたモデルは、llama2–7B を基盤とし、Guanaco データセットを使用して QLoRA でファインチューニングされ、AWQ を用いて 4 ビットに量子化されていることを示しています。
GGUF | GGML and llama.cpp
Georgi Gerganov 氏によって開発された GGML は、機械学習用に設計されたテンソルライブラリであり、GGUF の前身です。llama.cpp は純粋に C++ で書かれたライブラリで、LLM の推論(推論処理)を実行します(「llama.cpp」という名前は当初、C++ で Llama を実行するプロジェクトとして始まりましたが、現在では他の多くのモデルもサポートしています)。llama.cpp を使用すると、Hugging Face 上の任意のモデルを GGML|GGUF 形式に変換できます。当初、llama.cpp は CPU 上での推論に最適化されていましたが、現在では CPU、GPU、シリコン上での高速推論をサポートしています。これは、iPad やラップトップを含むエッジデバイス上で LLM を実行するための最も有名なライブラリと言えるかもしれません。
llama.cpp は 1.5/2/3/4/5/8 ビットへの量子化を提供します。モデルは llama.cpp で使用するために学習後に量子化する必要があります。したがって、「dolphin-2_6-phi-2-GGUF」という名前のモデルを見かけた場合、それは phi-2 基本モデルが dolphin データセットを使用してファインチューニングされ、GGUF 形式に量子化されたことを意味します。
ここで、TheBloke に注目したいと思います。彼はオープンソースソフトウェア(OSS)コミュニティのために素晴らしい仕事をしており、私たちが使用するために 3500 以上のモデルを量子化してくれました。特定のモデルを量子化された形式で使用したい場合、TheBloke がすでに希望する形式(GGUF、AWQ、または GPTQ あれ)でそれを量子化している可能性が高いです。
Context Length Extension
当初、LLM はキー値(KV)キャッシュの二次的な増加のために、短いコンテキスト長、2~4k トークンを持っていました。したがって、オープンソースコミュニティはコンテキスト長を増やすために懸命に働きました。コンテキスト長が増えると、モデルははるかに有用になります。これを達成するための最も有名な方法は、Rotary Positional Embedding (RoPE) スケーリングとして知られています。LLM は各トークンに対して位置埋め込みを持っているため、4096 コンテキスト長のモデルでは、最初のトークンが ID 1 を持ち、次に 2...4096 まで続きます。KaiokenDev(素晴らしい OSS 貢献者)は、これらの位置埋め込みを因子でスケーリングダウンすることにより、簡単に LLM のコンテキスト長を増やすことができることを発見しました。実際には、たった 2 行のコードで実現しました!
class ScaledRotaryEmbedding(torch.nn.Module):
def __init__(self, dim, max_position_embeddings=2048, base=10000, device=None):
super().__init__()
inv_freq = 1.0 / (base ** (torch.arange(0, dim, 2).float().to(device) / dim))
self.register_buffer("inv_freq", inv_freq)
max_position_embeddings = 8192 # Build here to make `torch.jit.trace` work.
self.max_seq_len_cached = max_position_embeddings
t = torch.arange(
self.max_seq_len_cached, device=self.inv_freq.device, dtype=self.inv_freq.dtype,
)
# These two lines:
self.scale = 1 / 4
t *= self.scale現在、この方法の多くの変種があります。それには、NTK-Aware Scaled RoPE や YaRN が含まれますが、それらはすべて上記の考えから派生しています。
コンテキストの長さを増やす別の方法は、LongLoRA と呼ばれる下記の論文で紹介されています。これは、モデルのために特別な LoRA をファインチューニングすることで機能します。
ですから、Yarn-Llama-2–7B-128K-AWQ という名前のモデルに出会った場合、それは Llama-2–7B に基づき、そのコンテキスト長を Yarn を使用して 128K に拡張し、AWQ を使用して量子化されたことを意味します。
コンピュータビジョンの世界では、2 つのモデルを統合してより良いものを作る技術が広く使用されています。LLM にとって、これは最新かつかなり有望な開発です。LLM を統合するに関する研究論文は 2023 年 6 月以来存在していますが、実装は挑戦的でした。これは MergeKit ライブラリで簡素化されました。LLM を統合するための主要なアルゴリズムには、SLERP、TIES、DARE、および Passthrough があります。これらの方法のいくつかは、複数のモデルを統合して、異国的な数のパラメータを持つモデル(例えば、2 つの 7B パラメータモデルから 9B パラメータモデルを作成する)を生成することができ、しばしばフランケンシュタインモデルと呼ばれます。Hugging Face には、すべての方法を説明する優れた記事があります。
これらのモデルの統合は非常に強力なものとなるため、最近では統合されたモデルが LLM のリーダーボードを支配しています。
さて、最終的に、名前だけを見て Goliath-LongLoRA-120B-RoPE8–32K-FP16-GPTQ が何を意味するかを判断できます。120B のサイズの基礎モデルが存在しないため、このモデルはいくつかのモデルを統合し、LongLoRA と RoPE を使用してコンテキスト長を 32K に増加させ、GPTQ を使用して量子化されたものです。
オープンソースの大規模言語モデルを通じた私たちの探検を締めくくるにあたり、LLM を通じた旅は、まるで巨大で多次元のジグソーパズルを組み立てるようなものであることが明らかです。事前学習、ファインチューニング、量子化、そしてモデルの統合の芸術といった概念を表す各ピースと共に、私たちは略語の森を抜け、データの海を渡り、計算の複雑さの山を登ってきました。しかし恐れることはありません、勇敢な探検家よ。このガイドからの知識を武器に、今やあなたは世界の Goliath-longLORA-120b-rope8–32k-fp16-GPTQ に立ち向かうために、より良く装備されています。
ですので、次に技術の驚異よりも秘密のコードのように聞こえる LLM と直面したとき、その難解な名前の背後には、理解され、習得され、そしておそらくは友達になることを待っているただのツールがあることを思い出してください。これからの多くの発見に乾杯し、あなたの AI の冒険が啓蒙的であると同時に楽しいものであることを願っています。ハッピーモデリング!
結論を書くのが面倒だったので、結論は GPT4 で生成しました。
読んでいただきありがとうございます!
もしこのガイドが役に立ったと思われたら、X(ツイッター)や Github、LinkedIn(または全部!)でフォローしてください。
SpiralAI テックブログPublication 実在する芸能人との会話ができる日本初の AI サービス「NaomiAI」やカスタム ChatGPT を作れる「Spiralbot」を提供する SpiralAI 株式会社のテックブログです。

原文を表示
AI
OpenAI
llm
生成 AI techこんにちは、@raksparadoxです。 AIの開発速度が非常に速いため、全てのトレンドを追いかけることはほぼ不可能に思えます。数十の新しいオープンソースの基盤モデルがあり、さらにこれらのモデルを基にして、マージング、ファインチューニング、コンテキスト拡張など様々な技術を用いて数千の洗練されたバージョンが構築されています。Hugging Face、オープンソースモデルのハブでは、現在500,000以上のモデルをホストしています!
この記事では、次に「Goliath-longLORA-120b-rope8–32k-fp16-GPTQ」のようなものに出会ったとき、その特徴を理解できるように、さまざまなオープンソースLLMについてのクラッシュコースを提供します。
大規模言語モデル(LLM)は、膨大なデータセット(数テラバイト)に基づいて学習された重要なディープラーニングモデルで、このプロセスは事前学習と呼ばれています。これらの学習セッションには数百万ドルの費用がかかるため、これらのプロジェクトを実施できるリソースを持つ企業や組織はほんのわずかです。現在、これらのモデルのほとんどは、文脈を与えられた次のトークンを予測するために学習されています(因果的言語モデリング)、これにより、特に補完タスクで効果的になります。この費用のかかる学習フェーズが完了すると、自然言語を理解し、世界モデルとして機能する強力なモデルが得られます。こちらはイリヤ・スツケーヴァーさんが世界モデルの概念とLLMがそれをどのように学習するかを説明するビデオです。 https://youtu.be/NT9sP4mAWEg
一度学習されると、基本モデル(ファンデーションモデルとしても知られています)は、文を完成させたり、コードを生成するのが得意になります。現在、様々な組織によってリリースされた数十のオープンソース基本モデルがあります。しかし、これらのモデルのほとんどはトランスフォーマーアーキテクチャに基づいています(RWKVのような例外も存在します)。さらに、トランスフォーマーベースのモデルのほとんどは、EleutherAIのGPT-NeoやMetaのLLaMAコードベースを使用してモデルを学習します。ここに、いくつかの注目すべき基本モデルとそれらをリリースした組織の非網羅的なリストがあります:
Sizes (in Billion)
Llama and Llama2 series
Mistral and Mixtral
Pythia suite and GPTxNeo
これらのモデルは優れた基盤として機能するため、基本モデルとして知られています。一つの使用例は、特定の言語のためにLLMの性能を向上させることを目指す場合、これらのモデルを出発点として使用することです。
したがって、Mistral-7B-OpenOrca-oasst_top1_2023–08–25-v2-GPTQという名前のモデルに出会った場合、そのモデルはMistral 7Bを基礎として使用して構築されたことを示しています。
前のセクションでは、基本的な大規模言語モデル(LLM)の学習方法について説明しました。現在、これらの基本モデルが人間の方法に合わせられる方法を探ります。これにより、指示に従ったり、会話に参加したり、私たち人間に魅力的な反応を生成することができます。
2022年末にChatGPT 3.5がリリースされた後、世界中で大きな話題となり、多くの組織がオープンソースの方法で類似のモデルを作成しようとしました。Metaが先導して、2023年2月にLLaMAと呼ばれるLLMをリリースしました。これは事前学習されたモデルで、4つのサイズ(7B、13B、33B、65B)で利用可能でした。これらは完成タスクには対応できる基本モデルでしたが、ChatGPTのようにチャットや指示に従う機能は備えていませんでした。しかし、LLaMAのリリースから1ヶ月以内に、スタンフォード大学がLLaMAを指示に従う学習を施した論文を発表し、ChatGPT 3.5に似たモデルを作成しました。それはAlpacaと名付けられ、方法はChatGPTを使用して合成指示データセットを作成し、基本モデルを合わせるためにSupervised Fine-Tuning(SFT)を利用することでした。プロジェクトのホームページで技術的な詳細を読むことができます。
プロジェクトのホームページからの図
これは、オープンソースの指示に従う/チャットLLMに向けた重要な進歩でした。Alpacaプロジェクトは、ChatGPTに似たモデルを作成するために1,000ドル未満を費やしたと報じられています。このプロジェクトで使用されたデータセットはAlpacaとして知られるようになり、多くのモデルを学習して指示に従わせるのに使用されました。その後、モデル開発組織(Metaを含む)は、基本モデルと指示にチューニングされたモデルの両方をリリースし始めました。
MistralAIによるBaseとInstructモデル
Alpacaの後、指示/チャットチューニングのためにいくつかの他のデータセットが作成されました。以下はその中のいくつかの注目すべきものです:
cognitivecomputations
databricks-dolly-15k
現在、様々な組織は基本モデルをファインチューニングして、指示に従う/チャットモデルを作成することができます。先に述べたデータセット以外にも、いくつかの組織は上記の方法を使用して無検閲/ロールプレイングLLMを学習しています。しかし、彼らが使用しているデータセットをまだオープンソース化していません。これらの有名な例の一つが、Nous-Hermesシリーズのモデルです。
実用的な使用例として、QAや指示データセットを持っている場合、指示に従う/チャット用に監視されたファインチューニング(SFT)を使用して既に学習されたモデルから始めることを検討すべきです。チャット/指示に従うデータセットを使用して任意のLLMをファインチューニングする方法についてガイダンスを探している場合、プロセスを詳細に説明している素晴らしいブログ投稿があります。
最終的に、dolphin-2.0-mistral-7B-GGUFという名前のモデルに出会った場合、それは誰かがDolphinデータセットでMistral 7Bモデルをファインチューニングしたことを示しています。
指示に従うモデルを持つと、性的または暴力的な内容を含む任意のことに対して簡単に指示に従うことができます。したがって、賢明な人々はLLMを有用で、誠実で、無害であるように調整すべきだと考えました。AIの安全性と倫理についての全体的な議論がありますが、その螺旋には降りません。これは、RLHFまたは人間のフィードバックからの強化学習と呼ばれるプロセスを通じて行われます。
OpenAIからのこの有名な図は、事前学習からRLHFへのプロセスを説明しています
OpenAIはPPOを使用しました
RLHFには2つの有名な方法があります。OpenAIによって使用された近位方策最適化(PPO)と、この論文で紹介されたより最近の直接選好最適化(DPO)です(スタンフォードに感謝!)。DPOとPPOはアルゴリズムは異なりますが、LLMの出力を人間が好むものに合わせるという同じタスクを実行します。
以下はRLHF用のいくつかの有名なデータセットです。
stack-exchange-preferences
summarize_from_feedback
例として、hh-rlhfデータセットからの一例を紹介します。
RLHFデータの例
ちなみに、これの影響でChatGPTが
DPOやPPOを使用してRLHFを行った後、私たちは人間の好みに合わせたモデルを持っています。ですので、次にdolphin-2.6-mistral-7B-dpo-laser-GPTQという名前のモデルを見かけたとき、それは誰かがmistral 7bをdolphinで学習し、最終モデルを合わせるためにDPOを使用したことを意味します。
スタンフォードによるアルパカの論文の後でも、LLMの指示チューニングには数百ドルかかり、それは依然として独立研究者、改造愛好家、趣味の人々にとって禁じ手の高価さです。そのため、2021年の古い論文が名声を得ました。この論文では、1%未満のパラメータを使用してモデルを微調整する方法を紹介し、LoRAを使用した微調整を、消費者用GPU上でLLMを微調整する安価で有名な方法としています。
時間が経つにつれて、他のパラメータ効率的な微調整方法が開発されましたが、LoRAは最も有名な方法の一つとして残っています。PEFTライブラリを使用して、さまざまな方法を探索することができます。
したがって、llama-2–7B-Guanaco-QLoRA-AWQのようなモデルに出会った場合、このモデルはllama2–7Bに基づいており、QLoRA(LoRAのバージョン)を使用してGuanacoデータセットで微調整されていることを意味します。
効率的なトレーニングと同時に、コミュニティはLLMのサイズを縮小し、推論を高速化しようとしていました。そうすることで、最終的にエッジデバイス上で実行できるようになります。ここで、量子化が非常に有用な技術として登場しました。研究者たちは、モデルを8ビットや4ビットでロードしても、性能が著しく低下しないことを発見しました。しかし、モデルのサイズはそれぞれ半分と四分の一に縮小されました。 量子化の基本的な考え方はかなりシンプルです:高精度表現(通常は標準の32ビット浮動小数点)から、8ビットや4ビットなどの低精度データ型への重みとアクティベーションの変換を含みます。これを行うことで、LLMは2倍から4倍小さくなり、推論速度は数倍に増加します。以下は、最も使用されている量子化方法のリストです。GPUではなくCPU上で量子化されたモデルを実行するのに役立つ方法も含んでいます。さらに、これらの方法の一部は、Hugging Faceを使用してトランスフォーマーをロードする際にオンザフライで使用できますが、他の方法では、使用する前にモデルを量子化されたバージョンに変換する必要があります。
bitsandbytesライブラリは、Hugging Faceによって公式にサポートされているカスタムCUDA関数を周りの軽量Pythonラッパーであり、モデルを別途変換する必要なく4ビットおよび8ビットでモデルをロードするために使用できます。これはQLoRAと共に利用されます。QLoRAを使用して、A100 40GB GPU上で最大65BのLLMをファインチューニングすることが可能です!QLoRAとbitsandbytesを使用して、単一のA100を使用してMixtral8x7Bをファインチューニングすることもできます。
model = AutoModelForCausalLM.from_pretrained( model_name, load_in_8bit=True)
以下は、Hugging FaceのLLMを8ビットで初期化する方法を示すシンプルなスニペットです。load_in_8bit=True
load_in_4bit=True
GPTQとAWQはモデルを量子化するために異なるアルゴリズムを使用します。しかし、GPTQまたはAWQで量子化されたモデルを使用するには、まずモデルをそれぞれの形式に変換する必要があり、これには計算リソースが必要になります。しかし、これらの方法は単にbitsandbytesを使用するよりも効率的です。GPTQとAWQの両方がモデルを4ビットに量子化することができます。GPTQは2ビット、3ビット、8ビットの量子化もサポートしています。しかし、GPTQと比較して、AWQはより新しく、より効率的な方法です。 したがって、llama-2–7B-Guanaco-QLoRA-AWQと名付けられたモデルは、llama2–7Bに基づき、Guanacoデータセットを使用してQLoRAでファインチューニングされ、AWQを使用して4ビットに量子化されていることを示しています。
GGUF | GGML and llama.cpp
Georgi Gerganovさんによって開発されたGGMLは、機械学習用に設計されたテンソルライブラリであり、GGUFの前身です。llama.cppは純粋にC++で書かれたライブラリで、LLMの推論を実行します(llama.cppという名前は最初、C++でLlamaを実行するプロジェクトとして始まりましたが、現在では他の多くのモデルもサポートしています)。llama.cppを使用すると、Hugging Face上の任意のモデルをGGML|GGUF形式に変換できます。当初、llama.cppはCPU上での推論に最適化されていましたが、現在ではCPU、GPU、シリコン上での高速推論をサポートしています。これは、iPadやラップトップを含むエッジデバイス上でLLMを実行するための最も有名なライブラリと言えるかもしれません。
llama.cppは1.5/2/3/4/5/8ビットへの量子化を提供します。モデルはllama.cppで使用するために学習後に量子化する必要があります。したがって、dolphin-2_6-phi-2-GGUFという名前のモデルを見かけた場合、それはphi-2基本モデルがdolphinデータセットを使用してファインチューニングされ、GGUF形式に量子化されたことを意味します。
ここで、TheBlokeに注目したいと思います。彼はオープンソースソフトウェア(OSS)コミュニティのために素晴らしい仕事をしており、私たちが使用するために3500以上のモデルを量子化してくれました。特定のモデルを量子化された形式で使用したい場合、TheBlokeがすでに希望する形式(GGUF、AWQ、またはGPTQであれ)でそれを量子化している可能性が高いです。
Context Length Extension
当初、LLMはキー値(KV)キャッシュの二次的な増加のために、短いコンテキスト長、2~4kトークンを持っていました。したがって、オープンソースコミュニティはコンテキスト長を増やすために懸命に働きました。コンテキスト長が増えると、モデルははるかに有用になります。これを達成するための最も有名な方法は、Rotary Positional Embedding (RoPE) スケーリングとして知られています。LLMは各トークンに対して位置埋め込みを持っているため、4096コンテキスト長のモデルでは、最初のトークンがID 1を持ち、次に2...4096まで続きます。KaiokenDev(素晴らしいOSS貢献者)は、これらの位置埋め込みを因子でスケーリングダウンすることにより、簡単にLLMのコンテキスト長を増やすことができることを発見しました。実際には、たった2行のコードで実現しました!
class ScaledRotaryEmbedding(torch.nn.Module): def __init__(self, dim, max_position_embeddings=2048, base=10000, device=None): super().__init__() inv_freq = 1.0 / (base ** (torch.arange(0, dim, 2).float().to(device) / dim)) self.register_buffer("inv_freq", inv_freq) max_position_embeddings = 8192 # Build here to make torch.jit.trace work. self.max_seq_len_cached = max_position_embeddings t = torch.arange( self.max_seq_len_cached, device=self.inv_freq.device, dtype=self.inv_freq.dtype, ) # These two lines: self.scale = 1 / 4 t *= self.scale
現在、この方法の多くの変種があります。それには、NTK-Aware Scaled RoPEやYaRNが含まれますが、それらはすべて上記の考えから派生しています。
コンテキストの長さを増やす別の方法は、LongLoRAと呼ばれる下記の論文で紹介されています。これは、モデルのために特別なLoRAをファインチューニングすることで機能します。
ですから、Yarn-Llama-2–7B-128K-AWQという名前のモデルに出会った場合、それはLlama-2–7Bに基づき、そのコンテキスト長をYarnを使用して128Kに拡張し、AWQを使用して量子化されたことを意味します。
コンピュータビジョンの世界では、2つのモデルを統合してより良いものを作る技術が広く使用されています。LLMにとって、これは最新かつかなり有望な開発です。LLMを統合するに関する研究論文は2023年6月以来存在していますが、実装は挑戦的でした。これはMergeKitライブラリで簡素化されました。LLMを統合するための主要なアルゴリズムには、SLERP、TIES、DARE、およびPassthroughがあります。これらの方法のいくつかは、複数のモデルを統合して、異国的な数のパラメータを持つモデル(例えば、2つの7Bパラメータモデルから9Bパラメータモデルを作成する)を生成することができ、しばしばフランケンシュタインモデルと呼ばれます。Hugging Faceには、すべての方法を説明する優れた記事があります。
これらのモデルの統合は非常に強力なものとなるため、最近では統合されたモデルがLLMのリーダーボードを支配しています。
さて、最終的に、名前だけを見てGoliath-LongLoRA-120B-RoPE8–32K-FP16-GPTQが何を意味するかを判断できます。120Bのサイズの基礎モデルが存在しないため、このモデルはいくつかのモデルを統合し、LongLoRAとRoPEを使用してコンテキスト長を32Kに増加させ、GPTQを使用して量子化されたものです。
オープンソースの大規模言語モデルを通じた私たちの探検を締めくくるにあたり、LLMを通じた旅は、まるで巨大で多次元のジグソーパズルを組み立てるようなものであることが明らかです。事前学習、ファインチューニング、量子化、そしてモデルの統合の芸術といった概念を表す各ピースと共に、私たちは略語の森を抜け、データの海を渡り、計算の複雑さの山を登ってきました。しかし恐れることはありません、勇敢な探検家よ。このガイドからの知識を武器に、今やあなたは世界のGoliath-longLORA-120b-rope8–32k-fp16-GPTQに立ち向かうために、より良く装備されています。
ですので、次に技術の驚異よりも秘密のコードのように聞こえるLLMと直面したとき、その難解な名前の背後には、理解され、習得され、そしておそらくは友達になることを待っているただのツールがあることを思い出してください。これからの多くの発見に乾杯し、あなたのAIの冒険が啓蒙的であると同時に楽しいものであることを願っています。ハッピーモデリング!
結論を書くのが面倒だったので、結論はGPT4で生成しました。
読んでいただきありがとうございます!
もしこのガイドが役に立ったと思われたら、X(ツイッター)やGithub、LinkedIn(または全部!)でフォローしてください。
SpiralAIテックブログPublication実在する芸能人との会話ができる日本初のAIサービス「NaomiAI」やカスタムChatGPTを作れる「Spiralbot」を提供するSpiralAI株式会社のテックブログです。

関連記事
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み