CoreNet:深層ニューラルネットワーク学習のためのライブラリ
(github.com/apple)- CoreNet は、研究者やエンジニアが CLIP、LLM のようなファウンデーションモデルから、物体分類・物体検出・セマンティックセグメンテーションまで、さまざまなタスクのニューラルネットワークモデルを学習できるようにするツールキット
- 2024年10月の CoreNet 0.1.1 には新規プロジェクトとして KV Prediction が含まれており、関連研究は Time to First Token の改善を目的としている
- Apple の複数の研究が CoreNet を使用しており、
projects/フォルダには学習・評価レシピと事前学習済みモデルへのリンクがあわせて提供されている - モデルとデータセットはタスク別ディレクトリで構成され、モデルクラスは
@MODEL_REGISTRY.registerデコレータと YAML 設定のmodels.<task_name>.name値によって学習・評価に接続される - CoreNet は CVNets から発展し、コンピュータビジョン以外のより広い応用を含み、LLM を含むファウンデーションモデルの学習まで範囲を拡大している
CoreNet の目的と範囲
- CoreNet は、標準モデルや新しい小規模・大規模モデルを学習するための深層ニューラルネットワークツールキット
- 対応するタスク範囲には次が含まれる
- ファウンデーションモデル:CLIP、LLM
- 物体分類
- 物体検出
- セマンティックセグメンテーション
2024年10月のアップデート
- CoreNet 0.1.1 には KV Prediction プロジェクトが含まれる
- 関連する Apple の研究一覧には KV Prediction for Improved Time to First Token が含まれる
Apple の研究とプロジェクトレシピ
- Apple の複数の公開研究が CoreNet を使用している
projects/フォルダには学習・評価レシピと事前学習済みモデルへのリンクが提供されている- README に含まれる研究一覧は次のとおり
- KV Prediction for Improved Time to First Token
- OpenELM: An Efficient Language Model Family with Open Training and Inference Framework
- CatLIP: CLIP-level Visual Recognition Accuracy with 2.7x Faster Pre-training on Web-scale Image-Text Data
- FastVit: A Fast Hybrid Vision Transformer using Structural Reparameterization
- Bytes Are All You Need: Transformers Operating Directly on File Bytes
- MobileOne: An Improved One millisecond Mobile Backbone
- MobileViT、MobileViTv2、CVNets など
インストールと実行条件
- テストや Jupyter Notebook の実行、コントリビューションのために Git LFS のインストールと有効化が必要
- Linux では Python 3.10+ と PyTorch v2.1.0 以上を推奨
- macOS ではシステムの Python 3.9+ で十分と案内されている
- オーディオ・ビデオ処理のための任意依存関係は次のとおり
- Linux:
libsox-dev、ffmpeg - macOS:
sox、ffmpeg
- Linux:
- macOS のファイルシステムは大文字・小文字を区別しないため Git で問題が起きる可能性があり、
lsに表示される大文字・小文字と同じパスでリポジトリにアクセスする必要がある
リポジトリ構造と利用フロー
tutorials/は CoreNet を始めるための例を提供する- 新しいデータセットで新しいモデルを学習
- Slurm とマルチノード学習ガイド
- CLIP、セマンティックセグメンテーション、物体検出の Notebook
projects/は論文別の 再現可能な学習レシピと事前学習済み重み・チェックポイントを提供する- 各プロジェクトの
README.mdはドキュメント、事前学習済み重みへのリンク、引用情報を提供する <task_name>/<model_name>.yamlは学習と評価の再現のための設定を提供する- プロジェクト例は
kv-prediction、byteformer、catlip、clip、fastvit、mobileone、mobilevit、openelm、resnet、vitなど
- 各プロジェクトの
mlx_examples/は Apple Silicon で CoreNet モデルを効率的に実行する MLX の例を提供する- 含まれる例は
clip、open_elm
- 含まれる例は
モデル・データセット・構成要素
- モデル実装はタスク別に
corenet/modeling/models配下に構成されているaudio_classificationclassificationdetectionlanguage_modelingmulti_modal_img_textsegmentation
- 各モデルクラスは
@MODEL_REGISTRY.register(name="<model_name>", type="<task_name>")デコレータで登録される - CoreNet の学習や評価でモデルを使うには、YAML 設定に
models.<task_name>.name = <model_name>を指定する - データセットもモデルと同様にタスク別ディレクトリに分類される
- 主な内部構成要素には次が含まれる
loss_fn、metrics、optims、schedulertrain_eval_pipelinescollate_fns、sampler、text_tokenizer、transforms、video_readerlayers、modules、neural_augmentor、text_encoders
CVNets との関係
- CoreNet は CVNets から発展したプロジェクト
- 拡張された範囲はコンピュータビジョンを超え、より広い応用を含む
- この拡張により、LLM を含む ファウンデーションモデル学習が可能になる
- CoreNet を使用する場合、README は
CVNets: High Performance Library for Computer Vision論文の引用を求めている
1件のコメント
Hacker News のコメント
CoreNet は CVNets から発展し、コンピュータビジョン以外のより広い用途を扱うようになり、LLM のような基盤モデルの学習も可能になったように見える
出発点はここだったのだろう: https://apple.github.io/ml-cvnets/index.html
学習と推論のための中間層の実装のように見え、
default_trainer.py[1]を見ると、エンジンは torch の Tensor を使っているが、学習方式は独自に実装している。学習率スケジューラとオプティマイザも自前で実装しており、呼び出し側は任意で torch の Adam を使える既存フレームワークと連携してファーストクラスのサポートを入れるのではなく、下から積み上げる選択は興味深く、ある意味とても Apple らしい選択かもしれない
MLX の例は現時点では推論専用のように見える。ただし今後、MLX 専用実装が入ってくる着地点になる可能性もありそう: https://github.com/apple/corenet/blob/5b50eca42bc97f6146b812...
最近買収した Datakalab https://news.ycombinator.com/item?id=40114350 と DarwinAI https://news.ycombinator.com/item?id=39709835 まで考えると、今後1年でどう追っていくのか興味深い
1: https://github.com/apple/corenet/blob/main/corenet/engine/de...
モデル構造をあれこれいじりたい研究者にとって、どれほど有用なのかは気になる
例: https://github.com/apple/corenet/tree/main/projects/clip#tra...
ほとんどのモデルは、学習用ソースコード、データセット、前処理、評価コードを公開していない。だとすると、高水準の実装がどんな形なのかは知られているのだろうか?
Apple は AI で大きく出遅れており、今まさに追いつこうとしているように見える
Apple が Jax 上のライブラリである https://github.com/apple/axlearn も積極的に開発している点が興味深い
Apple の機械学習チームの半分は PyTorch を使い、残り半分は Jax を使っているように見える。Google Cloud と AWS の間で分かれているのかもしれない
単一のツールに標準化する十分な理由がないなら、チームが解いている問題とチームの経験に合ったツールを選ぶほうが、たいていは容易だ
各組織がかなりの自律性を持っていると理解している
README にはこれもある:
CatLIP: CLIP-level Visual Recognition Accuracy with 2.7x Faster Pre-training on Web-scale Image-Text DataCatLIP は初めて聞いたし、リンクは壊れているようだ
CatLIP がどれほど速いのか気になる。上の OpenAI CLIP ベースの例もすでに速い
PyTorch の上に作られている
これが MLX とどう比較されるのか気になる。理解したところでは、MLX は PyTorch に相当するが、Apple Silicon 向けに最適化されたものだ
これは MLX モデルを分散方式で学習するためのものなのか? それとも目的は何なのか?
mlx_examples/open_elmに書かれているとおり、“MLX is an Apple deep learning framework similar in spirit to PyTorch, which is optimized for Apple Silicon based hardware.”Hugging Face Transformers に MPS バックエンドを接続して使う場合と比べて、これを使う利点が何なのか気になる
mlx_example/clipは、CoreNet の CLIP モデル実装を MLX の CLIP サンプルに変換し、一部のカスタム修正を加える例FP16 Base バリアント: PyTorch 比で 60% 高速化
FP16 Huge バリアント: 12% 高速化
mlx_example/open_elmは、CoreNet で学習した OpenELM モデルの MLX ポート。MLX は PyTorch に似た性格の Apple の深層学習フレームワークで、Apple Silicon ベースのハードウェア向けに最適化されている利点は Apple Silicon 特化によって追加の高速化がある点のように見える。小型モデルに関しては最も電力効率の高い深層ニューラルネットワーク学習フレームワークかもしれないが、実際のベンチマークが出ないと分からない
このリポジトリには便利なユーティリティが多く、一般的なモデルや評価指標などのきれいな実装もかなりある
言い換えると、推論よりも新しいモデルを書く用途に向いているように見える
こういうリポジトリで、複数のモデルや使い方に対する小さな API サンプルを安定して生成してくれる LLM エージェントがあるとよさそう
Apple Silicon で学習をサポートしているのか気になる。README で見落としていないなら、あまり明確ではない
自前の学習用途に Apple Silicon ベースの非公開サーバーを持っている場合を除けば、という話
フォルダーを見てみると、PyTorch と torchvision のクラスを継承しているだけで、新しいことはしていないように見えるクラスが多い
すべてのオプティマイザ、スケジューラと大半のレイヤーがそういう形。ただし複数の論文のレイヤー組み合わせであるブロックはかなりあり、
monai.networks.blocksに似ている「構成要素」という観点では、新規実装の損失関数や評価指標もいくつかある
Apple M1 でニューラルネットワークの学習と推論に使うライブラリとして何を勧めるのか気になる。C++ か Rust から使いたく、ニューラルネットワークは最大で500万パラメータ程度になる予定