Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Transformer系機械学習モデルを取り巻くライブラリや用語を整理する

bobfromjapan
November 11, 2023

 Transformer系機械学習モデルを取り巻くライブラリや用語を整理する

mishima.syk #20

bobfromjapan

November 11, 2023
Tweet

More Decks by bobfromjapan

Other Decks in Science

Transcript

  1. • 名前: bobfromjapan • 出身: 東京都 ◦ 某大学の生化学専攻で修士卒です • 所属:

    某製薬企業 ◦ 研究所のIT技術活用の企画・推進をしています • 担当領域: クラウド・機械学習 • 趣味: 機械学習・自作PC・読書・ゲーム ◦ Kaggleで活動中です 自己紹介 https://www.kaggle.com/bobfromjapan
  2. この発表の目的 • 1GPUしかないけど独自のデータセットで特定のタスクに特化した Llama2-7Bをトレーニン グしたい! • ChatGPTのAPIで社内文書をもとにした質問応答を行えるデモ用Webアプリを作りたい! • ローカルで70Bモデルを試しに動かしてみたい! ✔

    最近流行りの大規模言語モデルを利用して、こんな感じのタスクをこなすには何を 使えば良いのか? ✔ HuggingFace, LangChain, RAG, CoT, llama.cpp, Gradioなどなど、最近よく聞く 単語たちは何を示しているのか? ❌ 詳しい使い方の説明、原理の説明は行いません!
  3. 扱うトピック一覧 量子化・学習/推論効率化 • DeepSpeed • ZeRO • LoRA • bitsandbytes

    • GGML • llama.cpp Nvidia以外のGPU使う系 • ROCm • DirectML HuggingFace関連 • transformers • accelerate • datasets • peft LLM活用ライブラリ • LangChain • Semantic kernel • Guidance プロンプトエンジニアリング関連 • RAG • CoT LLMの名前とか • Anthropic • Amazon Titan • Bard などなど Pythonの簡易ウェブアプリ作成 • Gradio • Streamlit
  4. HuggingFace系ライブラリ • HuggingFace社: オープンソースで機械学習モデルを構築、デプロイ、およびトレー ニングするためのツールとリソースを開発 ◦ transformers ◦ accelerate ◦

    datasets ◦ peft など ▪ 一般名詞と被っているライブラリ名が多く若干検索性が悪い ……。 • また、多くの人がお世話になっているであろう機械学習モデルのリポジトリである HuggingFace Hubを運営しているのもここ 参考リンク • https://github.com/huggingface • https://huggingface.co/
  5. HuggingFace系まとめて利用例 from peft import prepare_model_for_kbit_training from peft.utils.config import TaskType model

    = prepare_model_for_kbit_training(model) peft_config = LoraConfig( lora_alpha=16, lora_dropout=0.1, r=32, bias="none", task_type=TaskType.SEQ_CLS, inference_mode=False, # target_modules=["self_attn"] target_modules=['q_proj', 'out_proj', 'k_proj', 'v_proj'], ) lora_model = get_peft_model(model, peft_config) lora_model.print_trainable_parameters() from transformers import AutoTokenizer from transformers import AutoModelForMultipleChoice, TrainingArguments, Trainer model_name= "mistralai/Mistral-7B-v0.1" tokenizer = AutoTokenizer.from_pretrained(model_name, truncation_side='left') bnb_config = transformers.BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_use_double_quant=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16 ) model = AutoModelForSequenceClassification.from_pretrain ed(model_name, num_labels=5, quantization_config=bnb_config) training_args = TrainingArguments( do_train = True, do_eval=True, warmup_ratio=0.8, learning_rate=5e-6, per_device_train_batch_size=2, per_device_eval_batch_size=4, num_train_epochs=3, report_to='none', output_dir='.', ) trainer = Trainer( model=model, args=training_args, train_dataset=tokenized_train_dataset, eval_dataset=tokenized_val_dataset, tokenizer=tokenizer, compute_metrics=compute_metrics, )
  6. DeepSpeed 主な特徴 • マイクロソフトが開発している機械学習の実行最適化ライブラリ • 分散学習/推論を行ったり、RAM使用量の節約を行ったりできる ◦ ここで使われている手法の名前が後述の ZeRO 用途

    • 少ないVRAMのGPUでLLMのトレーニングをしたい ◦ 24GBでも7Bくらいまでなら行ける • 複数マシンで大量のGPUを使ってLLMをトレーニングしたい 参考リンク • https://github.com/microsoft/DeepSpeed • https://github.com/microsoft/DeepSpeed/tree/master/examples
  7. ZeRO 主な特徴 • マイクロソフトが開発している機械学習の実行最適化手法 • いくつかの最適化ステージが提案されている。 • ZeRO Stage 1:

    ◦ オプティマイザの状態(たとえば、Adamオプティマイザの32ビットの重み、モーメント)がプロセス間で分割され、各プロセスは自分の分割だけを 更新します 。 • ZeRO Stage 2: ◦ モデルの重みを更新するための縮小された32ビットの勾配も分割され、各プロセスはオプティマイザの状態の一部に対応する勾配のみを保持し ます 。 • ZeRO Stage 3 (ZeRO-3): ◦ 16ビットのモデルパラメータがプロセス間で分割され、ZeRO-3は前方および後方のパス中にそれらを自動的に収集および分割します。また、 ZeRO-3は、CPUとNVMeメモリの両方にオフロードできるインフィニティオフロードエンジンを含み、これにより巨大なメモリ節約が可能になりま す 。 用途 • DeepSpeed上で実装されており、大規模言語モデルの分散学習・推論を行うために利用される 参考リンク • https://dl.acm.org/doi/10.5555/3433701.3433727
  8. llama.cpp 主な特徴 • Georgi Gerganov氏が開発 • C言語で記述されたLLMの実行ソフトウェア • 量子化されたLLMモデルをCPUのみ、CPU+GPUなどの様々な実行環境で動か すことができる

    ◦ モデルの一部のレイヤーのみを GPU、残りをCPUで実行することもでき、 VRAMに乗り切らないモ デルを動かすこともできる 用途 • ローカルPCで大きなモデルを実行するために利用→デモ 参考リンク • https://github.com/ggerganov/llama.cpp
  9. bitsandbytes 主な特徴 • Tim Dettmers氏が開発 • PyTorch用のCUDAカスタム関数の軽量ラッパーで、特に8ビットの最適化関数、行 列の乗算、および量子化関数をサポート ◦ torch.nn.Linearのサブクラスとして実装されており、基本的にこれを含む任意のモデルの量子化を

    行うことが可能 用途 • HuggingFace Transformersから利用するのが一番簡単 ◦ 対応するモデルであれば、 HuggingFaceモデルの読み込み時に `load_in_8bit=True`とするだけで BitsandBytesによる量子化が適応される 参考リンク • https://github.com/TimDettmers/bitsandbytes
  10. LLMを使った開発用ツール群 • 一番有名なのはLangChainだが、他にもSemantic KernelやGuidanceなど 項目
 補足
 guidance
 semantic kernel
 langchain


    githubスター数
 人気度(2023年6月3日時点) 
 9.1k
 9.7k
 44.5k
 抽象度
 ユーザ側でどれだけプロンプトを書くか 
 低い(=自分でプロンプトを書く) 
 中間
 高い
 機能の多さ
 提供される機能の幅 
 少なめ(?)
 普通
 多め
 自由度の高さ
 自分好みのプロンプトにできるかどうか 
 高い
 高め
 低め(?)
 エージェント機能
 複数の処理を自動実行するやつ 
 ユーザ側で作り込みが必要 
 ライブラリで提供
 ライブラリで提供(多種 類)
 エージェント制御
 エージェントの制御のしやすさ 
 制御しやすい
 制御しやすい
 制御しにくい
 プロンプトの管理
 複数のプロンプトを管理しやすいか 
 ユーザ側で工夫
 機能として提供
 ユーザ側で工夫
 ハードル
 理解/習得の難易度 
 普通
 高め(ドキュメント/実装例 少) 
 高め (機能多すぎ...) 
 https://qiita.com/sakue_103/items/6ffee0bc267e71eafd60 より引用
  11. LangChainでできること • プロンプトテンプレート: 様々な種類のプロンプトのテンプレートを提供 • LLM: GPT、Llama、Bedrockなどの大規模な言語モデルを利用 • エージェント: LLMを使用してどのようなアクションを実行するかを決定し、Web検索

    や計算機などのツールを利用させる • メモリ: 会話の履歴を保存する記憶機能を提供 • インデックス: 外部データの利用をサポート • ドキュメントローダー: テキスト、CSV、PDFなどの様々なフォーマットのデータを ロード • チェーン: 複数の処理を一連の処理として実行 • https://github.com/langchain-ai/langchain
  12. Chain of Thought(CoT) 主な特徴 • 言語モデルに「思考過程」を生成させる手法 。 • 問題を解決するための中間的な推論ステップを連続して生成する能力を言語モデルに付与する 。

    具体的な説明 利点 • モデルが段階的な推論を必要とする問題に対して、途中の推論を追加で学習することができる 。 • 推論ステップを分割することで、どの推論で間違えたのかが分かるようになる 。 • 数学の文章問題、常識問題などの人間が言語を介して解くことができるあらゆるタスクに適用可能 。 https://www.promptingguide.ai/jp/techniques/cot
  13. Retrieval Augmented Generation(RAG) • 外部の知識源を利用してLLM出力の質を向上させる手法 ◦ ハルシネーションの低減策としても有効 • リトリーバの実装方法も色々 ◦

    LLMのデコーダで埋め込みベクトルを取るほか、従来の NLP手法であるTFIDFやWord2Vecなどを 使っても良い。サービスであれば ElasticSearchやAmazon Kendra等もあり。 ◦ ベクトル間の類似度評価には FAISSというライブラリを使うことが多い印象。 https://cs.stanford.edu/~myasu/blog /racm3/
  14. Nvidia以外のGPU使う系 • 最近よく取り沙汰されるNVIDIAのGPU不足 • AMDやIntel等の他のGPUを機械学習に利用しやすくする手法として目にする頻度 が増えてきているので名前だけ紹介 • ROCm: AMD GPUを汎用計算に用いるためのドライバ、SDK、APIを提供。簡単

    に言えばAMD版CUDAだが、オープンソースで開発されている • DirectML: WindowsにおけるGPUを使った機械学習の実行 ◦ グラフィック用のAPI(DirectX)を行列計算に利用しているため、基本的に DirectX 12が動くGPUで あれば全てで使える ◦ 最近ではWindowsのTensorFlowでCUDAのNativeビルドが配布されなくなったので、 DirectMLを利用することがある
  15. Pythonの簡易ウェブアプリ作成 • GradioとStreamlitが最近よく使われている印象 ◦ 特にGradioに関しては最近Stable DiffusionやLLMのウェブUI作成に使われており人気 ▪ AUTOMATIC1111/stable-diffusion-webui ▪ oobabooga/text-generation-webui

    ◦ Gradioは機械学習のデモに特化しており、 Streamlitのほうがより汎用的 特徴 Gradio Streamlit 用途 Gradioは機械学習モデルのために特化しており、簡単に学ぶこ とができます 。 Streamlitはより汎用的で、機械学習モデル専用でないWebアプリケー ションを作成する場合に適しています 。 カスタマイズ Gradioは情報が限られていますが、簡単な視覚化を提供しま す。 Streamlitは、アプリの外観と感じを微調整することができるより多くの カスタマイズオプションを提供します 。 サポートとドキュ メント Gradioは簡単な視覚化に適していますが、Streamlitに比べてサ ポートベースとドキュメントが少ないかもしれません 。 Streamlitは、より大きなサポートベースと詳細なドキュメントおよび例 を提供します 。
  16. モデル名 開発元 提供プラットフォーム パラメータ数 最大コンテク スト長 言語 ライセンス GPT-4-Turbo OpenAI

    Azure, OpenAI ? 128K multilingual プロプライエタリ Llama2 Meta AWS, Azure, GCP, HuggingFaceなど 7B, 13B, 70B 4K 英 独自OSライセンス Titan AWS Amazon Bedrock 45B? 4K 英 プロプライエタリ PaLM2 Google GCP 8B? 62B? 8K multilingual プロプライエタリ Claude 2 Anthropic Amazon Bedrock, Anthropic ? 100K 日含む95カ国語 プロプライエタリ Jurassic-2 Ultra AI21 Amazon Bedrock, AI21 Studio ? 8K 英仏独伊蘭葡 西 プロプライエタリ Mistral-7B-v0.1 Mistral AI HuggingFace 7B 32K 英 Apache 2.0 Yi 01.AI Hugging Face 6B, 34B 200K 英中 独自OSライセンス CALM2 CyberAgent HuggingFace 7B 32K 英日 Apache 2.0 2023/11/11現在よさげなLLM