機械学習エンジニアのためのLLMOps入門ガイド
『LLMOps入門ガイド:機械学習エンジニア向け』
イントロダクション
OpenAIのChatGPTのリリースは、大規模言語モデル(LLM)への関心を高め、人工知能について誰もが話題にしています。しかし、それは単なる友好的な会話だけではありません。機械学習(ML)コミュニティは、LLMオプスという新しい用語を導入しました。私たちは皆、MLOpsについて聞いたことがありますが、LLMOpsとは何でしょうか。それは、これらの強力な言語モデルをライフサイクル全体で扱い管理する方法に関するものです。
LLMは、AI駆動の製品の作成と維持方法を変えつつあり、この変化が新しいツールやベストプラクティスの必要性を引き起こしています。この記事では、LLMOpsとその背景について詳しく解説します。また、LLMを使用してAI製品を構築する方法が従来のMLモデルと異なる点も調査します。さらに、これらの相違によりMLOps(機械学習オペレーション)がLLMOpsと異なる点も見ていきます。最後に、LLMOpsの世界で今後期待されるエキサイティングな展開について討論します。
学習目標:
- LLMOpsとその開発についての理解を深める。
- 例を通じてLLMOpsを使用してモデルを構築する方法を学ぶ。
- LLMOpsとMLOpsの違いを知る。
- LLMOpsの将来の展望を一部垣間見る。
この記事はデータサイエンスブロガソンの一環として公開されました。
LLMOpsとは何ですか?
LLMOpsは、Large Language Model Operationsの略であり、MLOpsと似ていますが、特に大規模言語モデル(LLM)向けに設計されたものです。開発から展開、継続的なメンテナンスまで、LLMを活用したアプリケーションに関連するすべての要素を処理するために、新しいツールとベストプラクティスを使用する必要があります。
これをよりよく理解するために、LLMとMLOpsの意味を解説します:
- LLMは、人間の言語を生成できる大規模言語モデルです。それらは数十億のパラメータを持ち、数十億のテキストデータで訓練されます。
- MLOps(機械学習オペレーション)は、機械学習によって動力を得るアプリケーションのライフサイクルを管理するために使用されるツールやプラクティスのセットです。
これで基本的な説明ができたので、このトピックをもっと詳しく掘り下げましょう。
LLMOpsについての話題とは何ですか?
まず、BERTやGPT-2などのLLMは2018年から存在しています。しかし、ChatGPTが2022年12月にリリースされたことで、LLMOpsのアイデアにおいて著しい盛り上がりを目の当たりにするのは、ほぼ5年後のことです。
それ以来、私たちはLLMのパワーを活用したさまざまなタイプのアプリケーションを見てきました。これには、ChatGPTなどのお馴染みのチャットボットから(ChatGPTなど)、編集や要約のための個人用のライティングアシスタント(Notion AIなど)やコピーライティングのためのスキルを持ったもの(Jasperやcopy.aiなど)まで含まれます。また、コードの書き込みやデバッグのためのプログラミングアシスタント(GitHub Copilotなど)、コードのテスト(Codium AIなど)、セキュリティのトラブルの特定(Socket AIなど)も含まれます。
LLMパワードのアプリケーションを開発し、プロダクションに導入している多くの人々が経験を共有しています。
「LLMで何かを作るのは簡単ですが、それをプロダクションに対応させるのは非常に難しいです。」 – Chip Huyen
明らかなことは、プロダクションに対応したLLMパワードのアプリケーションの構築には、古典的なMLモデルを使用したAI製品の構築とは異なる困難が伴うということです。LLMアプリケーションライフサイクルを管理するために、これらの課題に対処するための新しいツールやベストプラクティスを開発する必要があります。したがって、「LLMOps」という用語の使用が広がっているのです。
LLMOpsの手順は何ですか?
LLMOpsの手順は、MLOpsと少なくとも似ています。ただし、LLM(Language Model)を活用したアプリケーションの構築手順は、基盤モデルの開始によって異なります。ゼロからLLMをトレーニングする代わりに、事前にトレーニングされたLLMを次のタスクに合わせて利用します。
もう1年以上前、Andrej KarpathyはAI製品の構築プロセスが将来どのように変わるかを話していました:
「ただし、最も重要なトレンドは、何らかのターゲットタスクに対してニューラルネットワークをゼロからトレーニングする方法が、素晴らしい調整(finetuning)によって速く陳腐化していることです。具体的には、GPTのような基盤モデルの登場により、これらの基盤モデルのトレーニングは、大量の計算リソースを持つわずかな機関によってのみ行われ、ほとんどのアプリケーションは、ネットワークの一部を軽量化する使い回し、プロンプトエンジニアリング、またはデータやモデルをより小さな特殊な推論ネットワークに変換するオプションの手順によって達成されます。」 - Andrej Karpathy
この引用は、最初に読んだ際には驚くかもしれません。しかし、最近進行しているすべてのことを的確にまとめていますので、以下のサブセクションでステップバイステップで説明してみましょう。
ステップ1:ベースモデルの選択
基盤モデルまたはベースモデルは、さまざまなタスクに使用できる大量のデータで事前トレーニングされたLLMです。ベースモデルをゼロからトレーニングすることは困難で、時間がかかり、非常に高価ですので、必要なトレーニングリソースを持つ機関はわずかです。
2020年のLambda Labsの調査によると、OpenAIのGPT-3(1750億のパラメータを持つ)をトレーニングするには、Tesla V100クラウドインスタンスを使用して355年と4.6百万ドルが必要です。
AIは現在、コミュニティが「Linux Moment」と呼ぶ時期を経ています。現在、開発者はパフォーマンス、コスト、利用の容易さ、プロプライエタリなモデルまたはオープンソースモデルの柔軟性、および交換に基づいて2つのタイプのベースモデルから選択する必要があります。
専用またはプロプライエタリなモデルは、大規模な専門チームと大きなAI予算を持つ企業が保有する閉源の基盤モデルです。通常、オープンソースモデルよりも大きく、パフォーマンスも良いです。これらのモデルは購入され、一般的に利用が比較的容易です。専用モデルの主な欠点は、高価なAPI(アプリケーションプログラミングインターフェース)です。さらに、閉源の基盤モデルは、開発者のための適応性が少ないか全くありません。
専用モデルの例:
オープンソースモデルは、HuggingFaceでコミュニティハブとして頻繁に組織化され、ホストされます。通常、これらのモデルは専用モデルよりも能力が低く、サイズも小さいです。しかし、反面、オープンソースモデルは専用モデルよりも経済的で、開発者に対してより柔軟性を提供します。
オープンソースモデルの例:
- Stability AIによるStable Diffusion
- BigScienceによるBLOOM
- Meta AIによるLLaMAまたはOPT
- GoogleによるFlan-T5
コード:
このステップでは、必要なライブラリをすべてインポートします。
from transformers import GPT2LMHeadModel, GPT2Tokenizer# 事前トレーニング済みのGPT-3モデルとトークナイザをロードできるか確認model = GPT2LMHeadModel.from_pretrained("gpt2")tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
上記コードの出力:
ステップ2:次のタスクへの適応
ベースモデルを選んだら、APIを介してLLMにアクセスできます。他のAPIと一緒に作業する場合、LLM APIとの作業は最初は少し奇妙に感じるかもしれません。なぜなら、以前は入力によってどのような出力が引き起こされるかが常に明確ではないからです。任意のテキストプロンプトを与えると、APIはテキストの補完を返し、パターンに一致しようとします。
以下は、OpenAI APIの使用方法の例です。プロンプトを入力としてAPIに与えます。例:prompt = "正しい英語に訂正してください:\n\n彼 no went to the market."
import openai
openai.api_key = ...
response = openai.Completion.create(
engine = "text-davinci-003",
prompt = "正しい英語に訂正してください:\n\n彼 no went to the market.",
# ...
)
APIは、返された応答の中にコンプリーション結果[‘choices’][0][‘text’]に含まれる返信を出力します。例えば、response['choices'][0]['text'] = "彼はマーケットに行きませんでした。"
主な課題は、強力であるにも関わらずLLMが小気味良くないことです。したがって、重要な問題は、どのようにすればLLMが望む出力を生成できるかということです。
LLMの投入段階の調査で回答者が指摘した懸念事項の一つは、モデルの正確性と幻想です。つまり、LLMのAPIから出力を所望の形式で取得するには、何度も試行錯誤が必要であり、また、LLMは必要な特定の知識を持っていない場合に幻覚を見ることがあります。これらの懸念に対処するために、以下のタスクにベースモデルを適応させることができます:
- プロンプトエンジニアリングは、入力を改善して出力が期待通りになるようにするテクニックです。様々なテクニックを使ってプロンプトを改善することができます(OpenAI Cookbookを参照)。1つの方法は、期待される出力形式のいくつかの例を提供することです。これはゼロショット学習やフューショット学習に似ています。 LangChainやHoneyHiveなどのツールは、すでにプロンプトテンプレートの管理とバージョン管理をサポートしています。
- ファインチューニングは、MLで見られるテクニックです。これにより、特定のタスクでモデルのパフォーマンスと精度を向上させることができます。これにはトレーニングの努力が増えますが、インファレンスのコストを低減することができます。LLM APIのコストは、入力と出力のシーケンス長に依存します。したがって、入力トークンの数を減らすことでAPIのコストを減らすことができます。
- 外部データ:ベースモデルには多くの場合、短い文脈情報(例:特定のドキュメントへのアクセス)しかなく、すぐに古くなる可能性があります。たとえば、GPT-4は2021年9月までのデータで訓練されています。LLMは十分な情報を持っていない場合に物事を想像することができるため、重要な外部データにアクセスできるようにする必要があります。
- 埋め込み:もう少し複雑な方法は、LLM APIから情報(例:製品の説明)を埋め込みとして抽出し、それらの上にアプリケーション(例:検索、比較、推奨)を構築することです。
- 代替手段:この領域は急速に進化しているため、AI製品におけるLLMsのさまざまな応用例があります。その一部は指示の調整/プロンプトの調整やモデルの改善です。
コード:
from transformers import GPT2LMHeadModel, GPT2Tokenizer, TextDataset, Trainer, TrainingArguments
# データセットの読み込み
dataset = TextDataset(tokenizer=tokenizer, file_path="your_dataset.txt")
# モデルのファインチューニング
training_args = TrainingArguments(
output_dir="./your_fine_tuned_model",
overwrite_output_dir=True,
num_train_epochs=3,
per_device_train_batch_size=4,
)
trainer = Trainer(
model=model,
args=training_args,
data_collator=data_collator,
train_dataset=dataset,
)
trainer.train()
trainer.save_model()
ステップ3:モデルの評価
古典的なMLOpsでは、MLモデルはホールドアウトバリデーションセットでデモンストレーションされ、モデルのパフォーマンスを示すメトリックが使用されます。しかし、LLMの実行を評価するにはどうすればよいのでしょうか?出力が良いものか悪いものかを判断するにはどうすればよいのでしょうか?現在、組織はA/Bテストを行っているようです。
HoneyHiveやHumanLoopなどのツールは、LLMの評価を支援するために登場しています。
コード:
from transformers import pipeline# テキスト生成パイプラインを作成generator = pipeline("text-generation", model="your_fine_tuned_model")# テキストを生成して評価するgenerated_text = generator("Prompt text")print(generated_text)
ステップ4:デプロイとモニタリング
LLMの成果は、リリース間で非常に変化する可能性があります。たとえば、OpenAIはモデルを更新して不適切なコンテンツの生成を緩和しました(例:憎悪表現)。その結果、Twitterでフレーズ「AI言語モデルとして」をスキャンすると、無数のボットが見つかるようになりました。
WhylabsやHumanLoopなどのLLMの監視ツールがすでに登場しています。
コード:
# 必要なライブラリをインポートfrom flask import Flask, request, jsonifyfrom transformers import GPT2LMHeadModel, GPT2Tokenizerimport logging# Flaskアプリを初期化app = Flask(__name__)# ファイントゥーンされたGPT-2モデルとトークナイザーを読み込むmodel = GPT2LMHeadModel.from_pretrained("./your_fine_tuned_model")tokenizer = GPT2Tokenizer.from_pretrained("gpt2")# ロギングのセットアップlogging.basicConfig(filename='app.log', level=logging.INFO)# テキスト生成用のルートを定義@app.route('/generate_text', methods=['POST'])def generate_text(): try: data = request.get_json() prompt = data['prompt'] # テキストを生成 generated_text = model.generate( tokenizer.encode(prompt, return_tensors='pt'), max_length=100, # 必要に応じて最大長を調整 num_return_sequences=1, no_repeat_ngram_size=2, top_k=50, top_p=0.95, )[0] generated_text = tokenizer.decode(generated_text, skip_special_tokens=True) # リクエストとレスポンスをログする logging.info(f"生成テキストのプロンプト:{prompt}") logging.info(f"生成テキスト:{generated_text}") return jsonify({'generated_text': generated_text}) except Exception as e: # 例外が発生した場合はログに記録する logging.error(f"エラー:{str(e)}") return jsonify({'error': 'エラーが発生しました'}), 500if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)
上記のコードの動作
- 必要なライブラリをインポート: 必要なライブラリとモジュールをインポートします。FlaskはWebアプリケーションの構築に使用され、transformersはGPT-2モデルを扱うために使用され、loggingは情報を記録するために使用されます。
- Flaskアプリを初期化:
- モデルを読み込む: ファインチューンされたGPT-2モデルと対応するトークナイザーを読み込むことができます。./your_fine-tuned_modelを実際のファインチューニング済みGPT-2モデルへのパスに置き換えることができます。
- ロギングのセットアップ: アプリケーションへのログインを示します。ログファイル名をapp.logに設定し、ログレベルをINFOに設定します。
- Flaskを使用したルートスケッチのセットアップ: /generate_textエンドポイントにPOSTリクエストが行われた場合、generate_text関数が呼び出されるように指定します。
- テキストの生成: このコードは、着信POSTリクエストからJSONデータを抽出します。JSONデータには「prompt」というフィールドが含まれていることを想定しており、これは追加のテキストを生成するために使用されます。
- GPT-2を使用したテキスト生成: このセクションでは、読み込まれたGPT-2モデルとトークナイザーを使用して、提供されたプロンプトに基づいてテキストを生成します。生成のパラメータ(最大長の生成テキスト、生成するシリーズの数、サンプリングパラメータなど)を設定します。
- 生成されたテキストのデコードと返却: テキストを生成した後、生成されたシリーズをデコードし、特殊トークンを削除します。その後、生成されたテキストをJSON応答として返します。
- リクエストとレスポンスのログ: ログファイルにリクエストのプロンプトと生成されたテキストを記録します。
- 例外の処理: テキスト生成プロセス中に例外が発生した場合、それらはキャプチャされてエラーとしてログに記録されます。エラーメッセージ付きのJSON出力と、サーバーエラーを示す500ステータスコードが返されます。
- Flaskアプリの実行: スクリプトが直接実行されるときにのみ、Flaskアプリが実行されることを保証します。appをホスト「0.0.0.0」およびポート5000で実行します。これにより、どのIPアドレスからでも便利に利用できます。
上記コードの出力:
入力プロンプト:
#{ "prompt": "昔々あるところに"}出力プロンプト:{ "generated_text": "昔々、遠い遠い国に、一人の..."}import csv
LLMOpsはMLOpsとどう違うのか?
MLOpsとLLMOpsの違いは、クラシカルなMLモデルとLLMのAI製品を構築する方法の違いに由来しています。この違いは主にデータ管理、実験、評価、コスト、遅延に影響を与えます。
データ管理
通常のMLOpsでは、データを大量に必要とするMLモデルを使用します。ニューラルネットワークをゼロからトレーニングするには、ラベル付きの大量のデータが必要であり、事前にトレーニングされたモデルの調整にさえ少なくとも数百のサンプルが必要となります。ただし、大容量のデータセットには欠陥があることを知り、受け入れるためにはデータクリーニングがML開発プロセスで重要です。
LLMOpsでは、ファインチューニングはMLOpsと似ていますが、プロンプトエンジニアリングはゼロショットまたはフューショットの学習状況です。つまり、手pickedサンプルは少ないですが、存在します。
実験
MLOpsでは、モデルをゼロからトレーニングするか、事前にトレーニングされたモデルを微調整するかに関わらず、調査は似たようなものとなります。両方の場合、モデルのアーキテクチャ、ハイパーパラメータ、およびデータ拡張などの入力や、メトリクスなどの出力をルートします。
しかし、LLMOpsでは、エンジニアリングするプロンプトかファインチューニングかという問題があります。ただし、LLMOpsではファインチューニングがMLOpsと似て見えますが、プロンプトエンジニアリングはプロンプトの管理を含む異なる実験設定が必要です。
評価
クラシカルなMLOpsでは、評価メトリックを使用したモデルの性能評価のために、ホールドアウト検証セットが使用されます。LLMのパフォーマンスを評価するのはより難しいため、現在のところ、組織ではA / Bテストを使用しているようです。
コスト
通常のMLOpsのコストは、データ収集とモデルトレーニングにかかりますが、LLMOpsのコストは推論にかかります。実験中に高価なAPIを使用することからいくらかのコストが予想されますが、Chip Huyen氏の研究によると、長いプロンプトのコストは推論にかかります。
速度
LLMの制作調査で回答者が指摘したもう一つの懸念事項はレイテンシーです。LLMの完成長はレイテンシーに大きく影響します。MLOpsでもレイテンシーに関する懸念が存在しますが、開発中の実験速度やユーザーエクスペリエンスにおいて、LLMOpsではより顕著な問題となります。
LLMOpsの未来
LLMOpsは新興の分野です。この領域が進化するスピードを考えると、予測することは困難です。さらに、「LLMOps」という用語が定着するかどうかさえ疑問です。ただし、LLMやツールの新しい使用例、LLMライフサイクルの管理のための最良の試行がたくさん見られることは確かです。
AIの分野は急速に成長しており、今私たちが書いていることは数か月後には古くなる可能性があります。LLMパワードアプリケーションを本番環境に持ち込むという課題には、まだ答えのない多くの質問があり、時間だけがそれがどのように進展するかを教えてくれるでしょう:
- 「LLMOps」という用語は定着するのでしょうか?
- MLOpsに基づくLLMOpsはどのように進化するのでしょうか? それらは一緒に変わるのか、別々の操作セットになるのか?
- AIの「Linux Moment」はどのように進展するのでしょうか?
私たちは確実に、まもなく多くの進展や新しいツール、そして最良の実践を見るでしょう。また、ベースモデルのコストとレイテンシーの削減に向けた取り組みもすでに見られます。これは間違いなく興味深い時代です!
結論
OpenAIのChatGPTのリリース以来、LLMはAIの分野で注目されるトピックとなりました。これらの深層学習モデルは人間の言語で出力を生成することができ、会話型AI、プログラミングアシスタント、ライティングアシスタントなどのタスクに強力なツールとなっています。
しかし、LLMパワードアプリケーションを本番環境に持ち込むことは、その独自の課題を抱えており、新たな用語である「LLMOps」の登場につながりました。これは、開発、展開、およびメンテナンスを含むLLMパワードアプリケーションのライフサイクルを管理するためのツールやベストプラクティスのセットを指します。
LLMOpsは、MLOpsの一部と見なされることがあります。ただし、LLMを使用したアプリケーションの構築には、ベースのMLモデルを使用したアプリケーションの構築とは異なる手順があります。ゼロからLLMをトレーニングする代わりに、事前にトレーニングされたLLMを以下のタスクに適応することに重点が置かれます。これには、基礎モデルの選択、LLMの使用、評価、モデルの展開とモニタリングが含まれます。LLMOpsはまだ比較的新しい分野ですが、AI業界でのLLMの人気が高まるにつれて、さらに発展し進化することは間違いありません。
キーポイント:
- LLMOps(大規模言語モデルの運用)は、ChatGPTなどのパワフルな言語モデルのライフサイクルを管理する科学分野であり、AI駆動製品の作成とメンテナンスを変革することを重視しています。
- GPT-3、GPT-3.5、GPT-4などの大規模言語モデル(LLM)を利用するアプリケーションの増加により、LLMOpsの台頭が見られます。
- LLMOpsのプロセスには、ベースモデルの選択、特定のタスクに適応させること、A/Bテストによるモデルのパフォーマンスの評価、LLMを使用したアプリケーションに関連するコストとレイテンシーの分析が含まれます。
- データ管理(フューショット学習)、検討(プロンプトエンジニアリング)、評価(A/Bテスト)、コスト(推論に関連するコスト)、速度(レイテンシー反映)の観点で、LLMOpsは従来のMLOpsとは異なります。
全体的に、LLMとLLMOpsの台頭は、AI駆動製品の構築とメンテナンスにおける重要な変革を述べています。この記事がお気に入りになっていただければ幸いです。こちらのLinkedInで私とつながることもできます。
よくある質問
この記事に表示されているメディアはAnalytics Vidhyaの所有ではなく、著者の裁量で使用されています。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- ビジネスにおけるAIパワードのテキストメッセージングの台頭
- このAI論文は、RetNetとTransformerの融合であるRMTを紹介し、コンピュータビジョンの効率と精度の新しい時代を開拓しています
- 「マイクロソフトのこのAI論文では、生物医学、ファイナンス、法律のパフォーマンス向上のため、人間の読解能力を模倣した言語モデルのトレーニングに新しいアプローチが紹介されています」
- NVIDIAの創設者兼CEO、ジェンセン・ファンが、NVIDIAがもたらした兆ドル規模のビジョンの創造の舞台となったデニーズに戻ってきました
- 検索の未来:ChatGPT、音声検索、画像検索がデジタルランドスケープを革新している方法
- ラングチェーン101:パート2ab (大規模な言語)モデルについて知っておくべきすべて
- Amazon SageMakerを使用して、ML推論アプリケーションをゼロから構築し、展開する