(調査記録) HuggingFaceのライブラリ
HuggingFaceのライブラリの雑多な調査記録
Transformers
Q. model = transformers.CLIPModel.from_pretrained("openai/clip-vit-large-patch14")でPyTorch, or TensorFlow or Jax or Safetensorsのモデルのどれがロードされるの?
- (cite): https://huggingface.co/openai/clip-vit-large-patch14/blob/main/README.md
- README.mdによると 次のようにしてpretrainedモデルのロードする。
from PIL import Image import requests from transformers import CLIPProcessor, CLIPModel model = CLIPModel.from_pretrained("openai/clip-vit-large-patch14")
- (cite): https://huggingface.co/openai/clip-vit-large-patch14/tree/main
- しかしながら、HuggingFace Hub Modelsで配布されているファイル PyTorch(pytorch_model.bin), or TensorFlow(tf_model.h5) or Jax(flax_model.msgpack) or Safetensors(model.safetensors) のどれがロードされるかわからない
A. from_tf=Trueを渡せばTensorflow、from_flax =Trueを渡せばJax、use_safetensors=Trueを渡せばSafetensors、デフォルトはPyTorch
class CLIPModel(CLIPPreTrainedModel):(cite): https://github.com/huggingface/transformers/blob/91d155ea92da372b319a79dd4eef69533ee15170/src/transformers/models/clip/modeling_clip.py#L938- ↓
class CLIPPreTrainedModel(PreTrainedModel):(cite): https://github.com/huggingface/transformers/blob/91d155ea92da372b319a79dd4eef69533ee15170/src/transformers/models/clip/modeling_clip.py#L399C1-L399C44- ↓
class PreTrainedModel(nn.Module, ModuleUtilsMixin, GenerationMixin, PushToHubMixin, PeftAdapterMixin):(cite): https://github.com/huggingface/transformers/blob/91d155ea92da372b319a79dd4eef69533ee15170/src/transformers/modeling_utils.py#L1223- ↓
def from_pretrained((cite): https://github.com/huggingface/transformers/blob/91d155ea92da372b319a79dd4eef69533ee15170/src/transformers/modeling_utils.py#L2724- コメント:
from_tf(cite): https://github.com/huggingface/transformers/blob/91d155ea92da372b319a79dd4eef69533ee15170/src/transformers/modeling_utils.py#L2793C13-L2793C20from_flax(cite): https://github.com/huggingface/transformers/blob/91d155ea92da372b319a79dd4eef69533ee15170/src/transformers/modeling_utils.py#L2796use_safetensors(cite): https://github.com/huggingface/transformers/blob/91d155ea92da372b319a79dd4eef69533ee15170/src/transformers/modeling_utils.py#L2907C13-L2907C29
- コード:
- コメント:
参考までにhuggingface/transformersが想定するファイル名は下記の通り。(cite): src/transformers/utils/__init__.py#L220C1-L234C35
WEIGHTS_NAME = "pytorch_model.bin" WEIGHTS_INDEX_NAME = "pytorch_model.bin.index.json" TF2_WEIGHTS_NAME = "tf_model.h5" TF2_WEIGHTS_INDEX_NAME = "tf_model.h5.index.json" TF_WEIGHTS_NAME = "model.ckpt" FLAX_WEIGHTS_NAME = "flax_model.msgpack" FLAX_WEIGHTS_INDEX_NAME = "flax_model.msgpack.index.json" SAFE_WEIGHTS_NAME = "model.safetensors" SAFE_WEIGHTS_INDEX_NAME = "model.safetensors.index.json"
用語解説集-計算機科学-アーキテクチャ-シミュレータ
アーキテクチャシミュレータ | Architecture Simulator
- プロセッサの動作をモデル化し、実際のハードウェアを使わずにその性能や動作を予測・分析するツール
- 目的:
- プロセッサの設計空間探索:
- プロセッサ設計における目標や制約(=性能、電力、面積、コスト)を満たす設計を見つけ出すこと。
- 具体例なシミュレータは、対象の命令セットやシミュレーションの抽象度により様々。
- パラメータはコア数、キャッシュ、バス幅、SIMD幅など
- ソフトウェア開発環境の提供: 新しいプロセッサの開発中にソフトウェア開発を行う
- プロセッサの設計空間探索:
- 具体例なシミュレータには以下のようなものがある。
- シミュレーションの抽象度には以下のようなものがある。
gem5
- OSSのシミュレータ
- https://github.com/gem5/gem5/
- BSD 3-Clause
- 様々な命令セットをサポート(x86、ARM、MIPS、Alpha、PPC、SPARC)
- Full-system simulation 、 サイクルアキュレート
- マルチコアサポート
- アカデミアで設計空間探索に広く利用されている
MARSSx86
- 命令セットはx86-64
- User-level simulation 、 Functional simulation だが一部は サイクルアキュレート
- マルチコアサポート
- 現代のマルチコアx86プロセッサの詳細なモデリングをサポート
Multi2Sim
- 様々な命令セットをサポート(x86、AMD、ARM、MIPS32、Evergreen、NVIDIA Fermi)
- User-level simulation 、粒度は不明
- マルチコアサポート
- CPU-GPUシミュレーションに用いられる
Sniper
- 命令セットはx86、RISC-V
- User-level simulation 、粒度は不明
- マルチコアサポート
PTLsim
- 命令セットはx86
- Full-system simulation 、 サイクルアキュレート
- マルチコアサポート
- AMDプロセッサのシミュレーションに用いられる
ZSim
- 命令セットはx86-64
- User-level simulation 、粒度は不明
- マルチコアサポート
McPAT
- 様々な命令セットをサポート(x86、ARM、Alpha、SPARC)
- 電力、面積の評価に用いられる サイクルアキュレート
- マルチコアサポート
- Multi-core Power, Area, and Timingの略
SimpleScalar
- 様々な命令セットをサポート(x86、ARM、Alpha、Pisa)
- User-level simulation 、粒度は様々
- マルチコア非対応
Full-system simulation
- コンピュータシステムの全体をシミュレーションする
- 主にオペレーティングシステムなどシステムソフトウェアの研究に用いられる
User-level simulation
- オペレーティングシステムのカーネルやデバイスドライバーを含まない、ユーザーランドで動作するプログラムのみを対象とするシミュレーション
- いわゆるOSなどシステムソフトウェアではなく、アプリケーションの性能やアルゴリズムの良し悪しに関心がる場合に使う
Functional simulation
- 正確さが劣っても良いので高速なシミュレーションを行いたい場合に用いる。
- 特定の入力に対する出力が期待どおりであるかどうかを確認することに焦点を当てていますが、実行にかかる時間やサイクル数は考慮しない。
- CPUが対象の場合は、 Instruction-Level simulation とほぼ同義。
Instruction-Level simulation
- 対象とする命令セットアーキテクチャの各命令の動作を再現することに重点を置く。
- サイクル数等詳細な情報は提供しない。
- 新しい命令セットアーキテクチャを開発する際やに用いる。
- あるプログラムで実行された命令毎の総数やメモリアクセスの局所性を調べるのに使う。
サイクルアキュレート | Cycle accurate simulation
- 対象の動作をクロックサイクル単位で正確にモデル化する。
- OS全体やコンピュータシステム全体を対象とすると、シミュレーションが現実的な時間で完了しない。
Event-driven simulation
- コンピュータシステム内で発生するイベントを用いる方法
- イベントとは、命令のフェッチ、メモリアクセス、I/Oアクセスなど
Trace-driven simulation
- 実機や他のシミュレータから採取したトレースデータを用いる方法
- トレースデータとは、命令シーケンスやメモリアクセスパターン
- 特定のアプリケーション、ワークロードの性能分析や、コンピュータシステムの挙動の分析に用いる
VLSI設計の文脈における、シミュレーションの抽象度には下記の3つがある。
ビヘイビアレベル | Behaivioral-level
- VLSI設計の文脈における、シミュレーションの抽象度の1つ
- 回路が何をするかを記載する。具体例な実装方法には踏み込まない。 サイクルアキュレート ではない。
- 目的は、VLSI設計の初期段階における、設計対象の明確化。
RTL | Register Transfer Level
- VLSI設計の文脈における、シミュレーションの抽象度の1つ
- 目的は、論理回路設計のデバック・検証。
ゲートレベル | Gate-Level
- VLSI設計の文脈における、シミュレーションの抽象度の1つ
- 回路をネットリストで記述し(=論理ゲートのスタンダードセル, フリップフロップ, RAM等で記述し)、
- クロックサイクルより細かいタイムスケールでシミュレーションする
- 目的は、電力評価、動的タイミング解析。
用語解説集-機械学習-深層学習-学習関連
転移学習 | Transfer Learning
- ファインチューニング と同様、ある学習済みAIモデルをもう一度学習させること。
- ただし、 ファインチューニング とは違い、新たに学習させるタスクは学習済みAIモデルのタスクのサブセットと決まっているわけではない。似ているが同一でないタスクである。
- 一般的には、元の学習済みAIモデルに新たなレイヤーを追加しこの重みに新しいタスクを学習させる。既存のレイヤーはフリーズさせる。つまり、既存のレイヤーの学習率は0とする。
ファインチューニング | Fine-tuning
- 転移学習 と同様、ある学習済みAIモデルをもう一度学習させること。
- 一般的には、新たに学習させるタスクは学習済みAIモデルのタスクのサブセットである。
- 一般的には、元の学習済みAIモデルに新たなレイヤーを追加しこの重みに新しいタスクを学習させる。既存のレイヤーも学習させるが、既存のレイヤーの学習率は低めにする。 る。
Zero-Shot Learning
- 教師データに無いカテゴリを予測する問題設定。
Few-Shot Learning
- ファインチューニング や 転移学習 と同様、ある学習済みAIモデルをもう一度学習させること。
- ただし、 ファインチューニング や 転移学習 は大量の教師データを用いるのが一般的であるが、非常に少量の教師データでAIモデルを学習させようとする問題設定。
用語解説集-機械学習-深層学習-言語系
Transformer
- 自然言語処理タスクにおける革新的なモデルアーキテクチャであり、従来のリカレントニューラルネットワーク(RNN)や畳み込みニューラルネットワーク(CNN)に代わるものとして注目された。
- シーケンスからシーケンスへの変換(例: 機械翻訳)、文章の生成、質問応答などのさまざまな自然言語処理タスクで成功を収めました。
Attention Is All You Need
- 2017年にGoogleの研究者によって提案された論文。
- Transformer と呼ばれるニューラルネットワークアーキテクチャを導入した。
- LLM
LSTM | Long Short-Term Memory
- リカレントニューラルネットワーク(RNN)の一種。
- 長期的な依存関係を学習するのに適したアーキテクチャ。
- 通常、自然言語処理や時系列データなどのシーケンスデータのモデリングに使用される。
トークン化 | Tokenization
- ある文章を、単語、句読点、数字、記号などに分割すること。
- 文章を数理モデルで扱える形式に変換するために行う。
Embedding
用語解説集-機械学習-深層学習-LLM
大規模言語モデル | Large Language Model | LLM
- 膨大な量のテキストデータを使用してトレーニングされた深層学習ニューラルネットワーク。
- これらのモデルは、自然言語処理タスク(文章生成、機械翻訳、質問応答など)において非常に高い性能を発揮。
- 数億から数千億のパラメータを持ち、多くの場合、巨大なコンピューティングリソースと膨大なデータセットを使用してトレーニングされる。
- これにより、モデルは人間の言語理解能力に近いレベルのパフォーマンスを実現することができる。
- 具体例:
GPT-3 | Generative Pre-trained Transformer 3
- OpenAIによって開発された、数千億のパラメータを持つ言語モデル。
GPT-2 | Generative Pre-trained Transformer 2
- OpenAIが開発した、数億のパラメータを持つ言語モデルの前身。