大規模言語モデルのコード解読:Databricksが教えてくれたこと
大規模言語モデルのコード解読
自分自身のエンドツーエンドの本番対応LLMワークフローを構築する方法を学ぶ
人工知能によって形成される世界において、大規模言語モデル(LLM)は機械学習の領域での宝石として現れました。これらの技術の驚異は、人間のようなテキストを生成し、言語の複雑さを理解する能力を持つことができ、自然言語処理からコンテンツ生成まで、さまざまな分野で応用されています。LLMベースのアプリケーションの需要が急増する中、これらのモデルの潜在能力を引き出すことができる熟練したエンジニアのニーズはこれまで以上に重要となっています。
画期的なビッグデータの進歩で知られるDatabricksという名前は、AIの民主化を追求する中で、先駆的なプログラムである「大規模言語モデル」を発表しました。これらのコースは、初心者からベテランまでの熱心な愛好家に合わせてカスタマイズされ、現代のアプリケーションのためにLLMの構築と利用の技術をマスターするための包括的なロードマップを提供しています。機械学習と自然言語処理の世界に情熱を持つ人にとって、これらのコースは欠かせない資産です。
LLMsプログラムの概要
Databricksの大規模言語モデルプログラムは、「LLMs:アプリケーションを通じたプロダクション」と「LLMs:基礎モデルからの構築」の2つの異なるが相互関係のあるコースで構成されています。これらのコースでカバーされるトピックの範囲は多岐にわたり、包括的です。
コース1:LLMs — アプリケーションを通じたプロダクション
テクノロジーの瞬発的な世界で、このコースの特徴は実践的な焦点です。開発者、データサイエンティスト、エンジニアを対象に、最新のフレームワークを使用してLLM中心のアプリケーションを構築するために必要なスキルを身につけることができます。以下は、掘り下げる内容の一部です。
- 「SMPLitexに会ってください:単一画像からの3D人間テクスチャ推定のための生成AIモデルとデータセット」
- 「AIゴールドラッシュの航海:エンタープライズベンチャーにおけるテクニカルデットの隠れたコストを明らかにする」
- 自然言語処理のための高度なガイド
LLMsのパワーを活用する:Hugging FaceやLangChainなどの人気のあるライブラリを使用して、NLPの実世界の問題にLLMsを適用する方法を学びます。ハンズオンの演習を通じて、これらのライブラリを最大限に活用することに熟練します。
import torchfrom transformers import AutoModelForCausalLM, AutoTokenizertokenizer = AutoTokenizer.from_pretrained("gpt2")model = AutoModelForCausalLM.from_pretrained("gpt2")# GPT-2を使用してテキストを生成するinput_text = "Once upon a time,"input_ids = tokenizer(input_text, return_tensors="pt").input_idsoutput = model.generate(input_ids, max_length=100)generated_text = tokenizer.decode(output[0], skip_special_tokens=True)print(generated_text)
ドメイン知識の追加:埋め込みとベクトルデータベースを使用して、LLMパイプラインをドメイン知識とメモリで強化する方法について深く掘り下げます。この貴重なスキルにより、モデルを特定のアプリケーションに合わせることができます。
from langchain.text_splitter import CharacterTextSplitterfrom langchain.embeddings import HuggingFaceEmbeddingsfrom langchain.vectorstores import Chroma# データを管理可能なチャンクに分割してベクトルとして保存します。# 正確な方法はありません。チャンクが多いほど詳細なコンテキストが得られますが、ベクトルストアのサイズも増えます。text_splitter = CharacterTextSplitter(chunk_size=250, chunk_overlap=10)texts = text_splitter.split_documents(document)# ドキュメントの埋め込みを作成して、ベクトルストアに保存し、LLMにデータを供給します。# 埋め込みには、sentence-transformersモデルを使用します。https://www.sbert.net/docs/pretrained_models.html#sentence-embedding-models/model_name = "sentence-transformers/all-MiniLM-L6-v2"embeddings = HuggingFaceEmbeddings( model_name=model_name, cache_folder=DA.paths.datasets) # 事前キャッシュ済みモデルを使用します。# 最後に、chromadbと埋め込みLLMを使用してインデックスを作成します。chromadb_index = Chroma.from_documents( texts, embeddings, persist_directory=DA.paths.working_dir)from langchain.chains import RetrievalQAfrom langchain.llms import HuggingFacePipeline# 検索機能を持つリトリーバーにするためにインデックスを変換する必要があります。# これにより、ベクトルストア内で類似のドキュメント/チャンクを検索して結果を取得できるようになります。retriever = chromadb_index.as_retriever()# このチェーンは、ドキュメントに対してQAを実行するために使用されます。# 1 - 言語の解釈を行うLLM# 2 - ドキュメントの検索を行うベクトルデータベース# 3 - このデータの取り扱いに関する仕様(後ほど詳細に説明します)hf_llm = HuggingFacePipeline.from_model_id( model_id="google/flan-t5-large", task="text2text-generation", model_kwargs={ "temperature": 0, "max_length": 128, "cache_dir": DA.paths.datasets, },)chain_type = "stuff" # オプション: stuff, map_reduce, refine, map_reranklaptop_qa = RetrievalQA.from_chain_type( llm=hf_llm, chain_type="stuff", retriever=retriever)# 製品についてチェーンに問い合わせてみましょう。laptop_name = laptop_qa.run("What is the full name of the laptop?")display(laptop_name)
ファインチューニングのマスタリー:プレトレーニング、ファインチューニング、プロンプトエンジニアリングのニュアンスを理解します。カスタムのチャットモデルをファインチューニングする専門知識を身につけ、高度に特化したアプリケーションへの道を開きます。
import transformers as trtraining_args = tr.TrainingArguments( local_checkpoint_path, num_train_epochs=1, # デフォルトのエポック数は3 per_device_train_batch_size=16, optim="adamw_torch", report_to=["tensorboard"],)# プレトレーニング済みモデルをロードmodel = tr.AutoModelForSeq2SeqLM.from_pretrained( model_checkpoint, cache_dir=DA.paths.datasets) # 事前キャッシュされたモデルを使用# トレーナーがデータをバッチ化するためのデータコレクタdata_collator = tr.DataCollatorWithPadding(tokenizer=tokenizer)trainer = tr.Trainer( model, training_args, train_dataset=tokenized_dataset["train"], eval_dataset=tokenized_dataset["test"], tokenizer=tokenizer, data_collator=data_collator,)trainer.train()# ローカルチェックポイントにモデルを保存trainer.save_model()trainer.save_state()# ファインチューニング済みモデルをDBFSに永続化final_model_path = f"{DA.paths.working_dir}/llm_fine_tuning/{checkpoint_name}"trainer.save_model(output_dir=final_model_path)fine_tuned_model = tr.AutoModelForSeq2SeqLM.from_pretrained(final_model_path)inputs = tokenizer(reviews, return_tensors="pt", truncation=True, padding=True)pred = fine_tuned_model.generate( input_ids=inputs["input_ids"], attention_mask=inputs["attention_mask"])
効果とバイアスの評価:倫理的な懸念がある時代において、さまざまな方法論を用いて、LLMの効果と潜在的なバイアスを厳密に評価する方法を学びます。
import evaluatetoxicity = evaluate.load("toxicity", module_type="measurement")from transformers import AutoTokenizer, AutoModelForCausalLMimport shaptokenizer = AutoTokenizer.from_pretrained( "gpt2", use_fast=True, cache_dir=DA.paths.datasets)model = AutoModelForCausalLM.from_pretrained("gpt2", cache_dir=DA.paths.datasets)# モデルのデコーダーを有効にするために設定# GPTはデコーダーオンリーモデルmodel.config.is_decoder = True# 出力テキスト生成のための設定を行うmodel.config.task_specific_params["text-generation"] = { "do_sample": True, "max_length": 50, "temperature": 0, # ランダム性をオフにするため "top_k": 50, "no_repeat_ngram_size": 2,}input_sentence = ["晴れた日はビーチに行くのに最適です。だから"]explainer = shap.Explainer(model, tokenizer)shap_values = explainer(input_sentence)shap.plots.text(shap_values)shap.plots.bar(shap_values[0, :, "looking"])
LLMOpsと多段階推論:モデルを大規模に展開し、LLMOpsのベストプラクティスを見つけ、LLMワークフローでの多段階推論のポテンシャルを引き出します。
import mlflow# MLflow Trackingに明示的な実験パスを使用するように指示する# これは、ホームディレクトリ内のWorkspaceブラウザ(左側のサイドバー)の下にあるものです。mlflow.set_experiment(f"/Users/{DA.username}/LLM 06 - MLflow experiment")with mlflow.start_run(): # パラメータのログ記録 mlflow.log_params( { "hf_model_name": hf_model_name, "min_length": min_length, "max_length": max_length, "truncation": truncation, "do_sample": do_sample, } )# モデルの入出力スキーマを示す「シグネチャ」をログ記録することは価値があります。 signature = mlflow.models.infer_signature( xsum_sample["document"][0], mlflow.transformers.generate_signature_output( summarizer, xsum_sample["document"][0] ), ) print(f"Signature:\n{signature}\n") # mlflow.transformersの場合、推論時の設定がある場合、 # ログモデルの呼び出し(下記)でそれらを特別に保存する必要があります。 # これにより、パイプラインが再ロード時に同じ設定を使用することが保証されます。 inference_config = { "min_length": min_length, "max_length": max_length, "truncation": truncation, "do_sample": do_sample, } # モデルのログ記録は、追跡サーバーのモデルメタデータに対するハンドル「model_info」を返します。 # この「model_info」は、後でノートブックでログ記録されたモデルを取得するために便利です。 model_info = mlflow.transformers.log_model( transformers_model=summarizer, artifact_path="summarizer", task="summarization", inference_config=inference_config, signature=signature, input_example="これは、このパイプラインが要約できる長いニュース記事の例です。", )
これらのスキルを持っていると、実世界のLLMアプリケーションの課題に取り組む準備が整います。
このコースの良い点:
- 実践的な焦点: このコースは、実践的な実務家を対象に設計されています。Hugging FaceやLangChainなどの人気のあるフレームワークを使用してLLM中心のアプリケーションを構築するためのスキルを身につけることができます。開発者、データサイエンティスト、実務家が実際のシナリオでLLMを適用するために理想的です。
- 業界の専門知識: このコースは、スタンフォード大学のマテイ・ザハリア教授やDatabricksのDollyモデルの技術チームなど、業界のリーダーや著名な研究者によって指導されています。彼らの洞察と経験は貴重な視点を提供します。
- 実践的なラボ: 実践的なラボの含まれていることにより、理論だけでなく実践的な経験も得ることができます。自分自身で本番向けのLLMワークフローを構築することができます。
- 倫理的な考慮: 今日の世界では、倫理的な懸念が非常に重要です。このコースでは、LLMの使用における社会的、安全性、倫理的な考慮事項に取り組んでおり、AIに対する責任あるアプローチを開発するのに役立ちます。
- LLMOpsのベストプラクティス: LLMを大規模なアプリケーションに統合することを目指す人にとって、LLMOpsのベストプラクティスを学ぶことは重要です。
改善できる点:
- 実務家に限定: 実践的な焦点は実務家にとって優れていますが、LLMのより深い理論的理解を求める人には適していないかもしれません(これはコース2で解決されます)。
- 事前知識が必要: コースの恩恵を十分に受けるためには、機械学習とディープラーニングの基礎知識が必要です。初心者には理想的ではないかもしれません(前提条件に関するリソースは以下を参照してください)。
コース2: LLMs — 基礎モデルの基礎から
より深い知識を求める人には、このコースがLLMの核心に飛び込む機会を提供します。基礎モデルの内部構造に興味を持つデータサイエンティストや愛好家にとって理想的であり、次の内容をカバーしています:
基礎モデルの理解: アテンションメカニズム、エンコーダ、デコーダ、およびそれらの進化(GPT-4まで)を含む、基礎モデルへの道を探る。
class TransformerEncoderBlock(nn.Module): def __init__(self, d_model, num_heads, conv_hidden_dim, dropout=0.1): super(TransformerEncoderBlock, self).__init__() self.attention = nn.MultiheadAttention(d_model, num_heads, dropout=dropout) self.norm1 = nn.LayerNorm(d_model) self.norm2 = nn.LayerNorm(d_model) self.feed_forward = FeedForward(d_model, conv_hidden_dim, dropout) self.dropout = nn.Dropout(dropout) def forward(self, x, mask=None): # Multi-Head Attention attn_output, _ = self.attention(x, x, x, attn_mask=mask) x = x + self.dropout(attn_output) x = self.norm1(x) # Feed Forward Network ff_output = self.feed_forward(x) x = x + self.dropout(ff_output) x = self.norm2(x) return xclass TransformerEncoder(nn.Module): def __init__(self, vocab_size, d_model, num_heads, conv_hidden_dim, num_layers, dropout=0.1): super(TransformerEncoder, self).__init__() self.word_embedding = nn.Embedding(vocab_size, d_model) self.position_embedding = nn.Embedding(1000, d_model) # 最大シーケンス長が1000と仮定 self.layers = nn.ModuleList( [ TransformerEncoderBlock(d_model, num_heads, conv_hidden_dim, dropout) for _ in range(num_layers) ] ) def forward(self, x, mask=None): seq_length = x.shape[1] positions = torch.arange(0, seq_length).expand(x.shape[0], seq_length).to(x.device) out = self.word_embedding(x) + self.position_embedding(positions) for layer in self.layers: out = layer(out, mask) return out# 次のハイパーパラメータを仮定vocab_size = 5000 # 語彙のサイズd_model = 512 # 単語の埋め込みの次元数num_heads = 8 # アテンションヘッドの数conv_hidden_dim = 2048 # フィードフォワードネットワークの隠れ層の次元数num_layers = 6 # Transformerエンコーダブロックの数dropout = 0.1 # ドロップアウト率# モデルのインスタンス化model = TransformerEncoder(vocab_size, d_model, num_heads, conv_hidden_dim, num_layers, dropout)# いくつかの例入力を生成input_tensor = torch.randint(0, vocab_size, (1, 20)) # バッチサイズ1、シーケンス長20# モデルを通しての順伝搬output = model(input_tensor, mask=None)print(f"モデルは{sum(p.numel() for p in model.parameters() if p.requires_grad):,}の訓練可能なパラメータを持っています")
効率的なファインチューニング:ワンショット学習、フューショット学習、知識の蒸留などの高度な転移学習技術、LLMのサイズを縮小しながら性能を維持する方法など、進化した転移学習技術を探索します。Flash AttentionからLoRa、AliBi、PEFTメソッドまで、LLMのランドスケープを形作る現在の研究と開発の洞察を得ます。
import peftfrom peft import LoraConfig, get_peft_modelfrom transformers import AutoModelForCausalLM, AutoTokenizermodel_name = "bigscience/bloomz-560m"tokenizer = AutoTokenizer.from_pretrained(model_name)foundation_model = AutoModelForCausalLM.from_pretrained(model_name)lora_config = LoraConfig( r=<FILL_IN>, lora_alpha=1, # 重み行列の大きさを調整するスケーリングファクター。通常は1に設定 target_modules=["query_key_value"], lora_dropout=0.05, bias="none", # バイアスパラメータを訓練するかどうかを指定する task_type="CAUSAL_LM")peft_model = get_peft_model(foundation_model, lora_config)print(peft_model.print_trainable_parameters())
LLMデプロイメントのベストプラクティス:32ビット浮動小数点数を8ビット整数などの低精度形式に変換することで、モデルの実行速度を向上させ、メモリ使用量を減らすための量子化を学びます。
# 量子化の設定を指定するnet.qconfig = torch.ao.quantization.get_default_qconfig("onednn")# 静的量子化のためにモデルを準備する。これにより、モデルにオブザーバが挿入され、キャリブレーション中にアクティベーションテンソルを観測することができるnet_prepared = torch.quantization.prepare(net)# モデルを量子化バージョンに変換するnet_quantized = torch.quantization.convert(net_prepared)# モデルが量子化されると、非量子化されたモデルと同じように推論に使用できますが、メモリ使用量が少なくなり、推論時間が速くなる可能性があります。ただし、精度が低下する可能性があります。
大規模なスケールでのLLMの実行:エキスパートモデルの領域ごとの異なるデータパターンを処理できる、自分自身の簡略版の専門家モデルの混合(MoE)LLMシステムを構築する方法を探索します。各エキスパートは独自のパラメータを持ち、通常はデータセット全体を効果的にモデル化するために必要なモデルよりも単純なモデルです。
# "ハードゲーティング"関数を定義する# この関数は、入力の長さに基づいてどのモデルを使用するかを決定するdef hard_gating_function(input): if len(input) < 10: # 10文字未満の入力の場合、GPT2モデルを使用する return "gpt2", gpt2, gpt2_tokenizer elif len(input) < 100: # 10文字より大きく100文字未満の入力の場合、T5モデルを使用する return "t5" , t5, t5_tokenizer else: # 100文字以上の入力の場合、BERTモデルを使用する return "bert", bert, bert_tokenizer# "ソフトゲーティング"関数を定義する# この関数は、入力の長さに基づいて各モデルに重みを割り当て、全モデルをある程度使用して出力を生成するdef soft_gating_function(input): # 各モデルの重みは、ソフトマックス関数を使用して計算され、確率分布が出力される weights = F.softmax(torch.tensor([len(input), 100 - len(input), len(input)], dtype=torch.float), dim=0) # 各モデルの重みとモデル、トークナイザを返す return {"gpt2": (gpt2, gpt2_tokenizer, weights[0]), "bert": (bert, bert_tokenizer, weights[1]), "t5": (t5, t5_tokenizer, weights[2])}
LLMの未来はマルチモーダル:ビジョントランスフォーマーの内部動作を学び、提供されたテキストの説明に確率を割り当てるためにX-CLIPを使用してビデオ分類を実行するハンズオンコーディングプロジェクトを通じて、マルチモーダルなLLMの課題に取り組む準備が整います。このモデルは、テキストエンコーダ、クロスフレームビジョンエンコーダ、マルチフレーム統合トランスフォーマー、およびビデオ固有のプロンプトジェネレータで構成されています。
from transformers import XCLIPProcessor, XCLIPModelmodel_name = "microsoft/xclip-base-patch16-zero-shot"processor = XCLIPProcessor.from_pretrained(model_name)model = XCLIPModel.from_pretrained(model_name)
このコースの最後には、基礎モデルの微妙な点に精通し、最新の進歩を理解し、マルチモーダルなLLMの課題に取り組む準備が整います。
このコースの良い点:
- 詳細な理論的知識:LLMの背後にある理論と内部動作を理解したい場合、このコースが理想的です。注意機構、エンコーダ、デコーダなどの基礎モデルの進化、およびそれらがGPT-4などのモデルに与える貢献などをカバーしています。
- 高度な転移学習:ワンショット、フューショット学習、知識蒸留などの高度な転移学習技術を探求します。これらの技術は、LLMのサイズを大幅に削減しながらパフォーマンスを維持することができます。
- 将来志向:このコースでは、Flash Attention、LoRa、AliBi、PEFTなどの最新のLLMの開発についての洞察を提供します。LLMの研究の最前線に立つことができます。
- マルチモーダルな応用:AIアプリケーションがテキスト、音声、視覚の要素を含むようになるにつれて、マルチモーダルなLLMの理解はますます重要になっています。このコースは、そうした課題に備えるための準備をします。
改善できる点:
- 理論的重視:このコースは理論的な内容が豊富ですが、最初のコースほど多くの実践的な体験を提供していないかもしれません。より実践的なアプローチを好む場合、最初の選択肢とはならないかもしれません。
- 推奨前提条件:「LLMs: Application through Production」コースの修了が推奨されていますが、厳密に必要ではありません。ただし、最初のコースを受講していない場合、追加の努力が必要になるかもしれません。
全体的に、両方のコースは独自の利点を提供しており、両方を組み合わせることはLLMとの成功した学習旅行にとって賢明な選択です。
学習体験の解説
DatabricksのLLMコースは単なるオンライン講義のシリーズ以上のものです。業界のリーダーや著名な研究者の知恵によって充実した学習体験が提供されています。これらのコースが特筆すべき特徴:
専門家による指導
AIのような領域では、進化を見守るだけでなく積極的に形作ったメンターを持つことは非常に貴重です。講師の専門知識は、すべての講義や実習に浸透しており、学習者にはアカデミア、スタートアップ、F500企業の視点から生まれた独自の視点を提供します。
実践的な実習
実践がなければ理論は羅針盤のない船のようなものです。Databricksのコースには、実世界のシナリオで新たに獲得した知識を適用することができる実践的な実習が盛り込まれています。これらの実習は、自分自身の実稼働のLLMワークフローを構築するために必要な実践的なスキルを提供します。
無料のコース資料と証明書
DatabricksはAIの民主化を志向しており、誰でもオーディットしたいと思う人には無料でコース資料へのアクセスを提供しています。より深い関与を望む場合、わずかな料金でコース実習のための管理されたコンピューティング環境、評価される演習、修了証明書へのアクセスが可能です。この証明書は、Databricksの名前を背景に持つため、あなたのプロフェッショナルなプロフィールにおいて価値のある追加となります。
無料のリソース
コースに加えて、Databricksはソースコードやノートブックなどの無料リソースも提供しており、学習の旅がコースを超えて続くことを保証しています。提供されるGitHubリポジトリは、コード例や実践的な実装の宝庫となっています。
ビデオ講義
視覚的な学習体験を好む方には、Databricksはコースに付随するビデオ講義シリーズを提供しています。これらの講義は、理解を深めるための追加のリソースとして役立ちます。
将来の展望:LLMとその先へ
探求の終わりに近づくにつれて、LLMの旅に乗り出す人々に待ち受ける巨大なポテンシャルと機会を認識することが重要です。データ駆動型の明日の世界は、AIの補完を受けるものとなり、さまざまな産業の企業はLLMの専門知識を持つ人材を積極的に求めています。
IDCによると、2025年までにエンタープライズアプリケーションの90%がAIによって補完され、Burning Glassによれば、NLPとディープラーニングのスキルを要求する求人は過去3年間で驚異的な105%増加しています。
DatabricksのLLMコースの卒業生の潜在的なキャリアパスは、LLMそのものの応用と同様に多様です。NLP / LLMエンジニアからデータサイエンティスト、機械学習エンジニア、ソフトウェア開発者、研究アナリストまで、可能性は想像力によってのみ制限されます。
結論:LLM Rebellionに参加すべきか?
劇的なドラムロールの雰囲気で、明確に言いますが、DatabricksのLLMコースは、大規模言語モデルの世界を征服することに真剣な人々にとって、貴重な宝箱です。得られる知識、専門知識、経験は、金色に押し出されたラテン語(トレッキーの皆さんには)に値するものです。
では、これらのコースを進めるべきでしょうか?間違いありません!機械学習の愛好家であろうと、レベルアップを図ろうとするデータサイエンティストであろうと、DatabricksのLLMコースは、星々への旅に必要な超光速エンジンです。
故ダグラス・アダムスの言葉を借りれば、「パニックしないで」これらのコースに登録しましょう。LLMがあなたと共にありますように!
結論:旅に参加しましょう
大規模言語モデルの銀河を巡るこの冒険を締めくくるにあたり、皆さん自身の冒険に乗り出すことをお勧めします。DatabricksのLLMコースは、単なる学習体験ではなく、機械学習の未来への航海です。データと言語モデルの広がり続ける宇宙を進む中で、忘れずに次のことを心に留めてください。
「明日を実現する限り、私たちの現在の疑いこそが唯一の制約である。」—フランクリン・D・ルーズベルト
DatabricksのLLMコースに登録し、疑いが新たな日の誕生のように星のように消え去るのを許しましょう。拍手👏、チャンネル登録🔔、そしてもっともっと技術とデータの世界への啓蒙的な旅にご期待ください📡。知識の宇宙が待っていますし、共に、誰も行ったことのない場所に大胆に進みましょう。
リソース
- DatabricksのLLMコース紹介
- LLM認定
- LLMコース1:応用からプロダクションへ
- LLMコース2:基礎モデルの基盤から
- LLMコース1:GitHubリポジトリ、スライド、ビデオ講義
- LLMコース2:GitHubリポジトリ、スライド、ビデオ講義(近日公開予定)
- Transformers-Tutorials
免責事項:私はこの記事を書くためにDatabricks、edX、または他のどの団体からも金銭的な補償や特典を受け取っていません。ここで表明されている意見は、私自身の経験に基づくものです。
Anand Taralikaはソフトウェアエンジニアで、サイバーセキュリティ、金融、医療、持続可能なエネルギーにおけるテクノロジー、データ、機械学習の使用について執筆しています。直接メールでストーリーを受け取ることで、これらを見逃さないようにしましょう!
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