2 ポイント 投稿者 GN⁺ 2024-04-25 | 1件のコメント | WhatsAppで共有
  • 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月のアップデート

Apple の研究とプロジェクトレシピ

インストールと実行条件

  • テストや Jupyter Notebook の実行、コントリビューションのために Git LFS のインストールと有効化が必要
  • Linux では Python 3.10+PyTorch v2.1.0 以上を推奨
  • macOS ではシステムの Python 3.9+ で十分と案内されている
  • オーディオ・ビデオ処理のための任意依存関係は次のとおり
    • Linux:libsox-devffmpeg
    • macOS:soxffmpeg
  • macOS のファイルシステムは大文字・小文字を区別しないため Git で問題が起きる可能性があり、ls に表示される大文字・小文字と同じパスでリポジトリにアクセスする必要がある

リポジトリ構造と利用フロー

  • tutorials/ は CoreNet を始めるための例を提供する
    • 新しいデータセットで新しいモデルを学習
    • Slurm とマルチノード学習ガイド
    • CLIP、セマンティックセグメンテーション、物体検出の Notebook
  • projects/ は論文別の 再現可能な学習レシピと事前学習済み重み・チェックポイントを提供する
    • 各プロジェクトの README.md はドキュメント、事前学習済み重みへのリンク、引用情報を提供する
    • <task_name>/<model_name>.yaml は学習と評価の再現のための設定を提供する
    • プロジェクト例は kv-predictionbyteformercatlipclipfastvitmobileonemobilevitopenelmresnetvit など
  • mlx_examples/ は Apple Silicon で CoreNet モデルを効率的に実行する MLX の例を提供する
    • 含まれる例は clipopen_elm

モデル・データセット・構成要素

  • モデル実装はタスク別に corenet/modeling/models 配下に構成されている
    • audio_classification
    • classification
    • detection
    • language_modeling
    • multi_modal_img_text
    • segmentation
  • 各モデルクラスは @MODEL_REGISTRY.register(name="<model_name>", type="<task_name>") デコレータで登録される
  • CoreNet の学習や評価でモデルを使うには、YAML 設定に models.<task_name>.name = <model_name> を指定する
  • データセットもモデルと同様にタスク別ディレクトリに分類される
  • 主な内部構成要素には次が含まれる
    • loss_fnmetricsoptimsscheduler
    • train_eval_pipelines
    • collate_fnssamplertext_tokenizertransformsvideo_reader
    • layersmodulesneural_augmentortext_encoders

CVNets との関係

  • CoreNet は CVNets から発展したプロジェクト
  • 拡張された範囲はコンピュータビジョンを超え、より広い応用を含む
  • この拡張により、LLM を含む ファウンデーションモデル学習が可能になる
  • CoreNet を使用する場合、README は CVNets: High Performance Library for Computer Vision 論文の引用を求めている

1件のコメント

 
GN⁺ 2024-04-25
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...

    • インターフェイスもかなり Apple らしく見える。設定ファイルを作り、すでに念頭にあるモデルとハイパーパラメータを入れると、シンプルなインターフェイスを提供する構造のようだ
      モデル構造をあれこれいじりたい研究者にとって、どれほど有用なのかは気になる
      例: https://github.com/apple/corenet/tree/main/projects/clip#tra...
    • プロジェクトについてはその通りだが、PyTorch は Mac 上で動作し、TensorFlow も Apple が Mac に移植している
    • 学習と推論の中間層の実装のように見える、という話について、この分野には詳しくないのだが、最新の学習実装は実際にはどのようなものなのか気になる
      ほとんどのモデルは、学習用ソースコード、データセット、前処理、評価コードを公開していない。だとすると、高水準の実装がどんな形なのかは知られているのだろうか?
    • 独自実装とは言いにくく、オプティマイザは単に PyTorch のオプティマイザを継承している
    • 既存フレームワークと連携してファーストクラスのサポートを入れるのではなく、下から作った選択は、WWDC を前にやや急いで準備した雰囲気がある
      Apple は AI で大きく出遅れており、今まさに追いつこうとしているように見える
  • Apple が Jax 上のライブラリである https://github.com/apple/axlearn も積極的に開発している点が興味深い
    Apple の機械学習チームの半分は PyTorch を使い、残り半分は Jax を使っているように見える。Google Cloud と AWS の間で分かれているのかもしれない

    • Apple のような大企業では、こうしたことはかなり一般的だ。調整コストは実際に大きい
      単一のツールに標準化する十分な理由がないなら、チームが解いている問題とチームの経験に合ったツールを選ぶほうが、たいていは容易だ
    • 実際に働いたことはないが、Apple は Meta のような一つの一貫した組織というより、複数の会社やスタートアップの集合体に近い、という話をずっと聞いてきた
      各組織がかなりの自律性を持っていると理解している
  • README にはこれもある:
    CatLIP: CLIP-level Visual Recognition Accuracy with 2.7x Faster Pre-training on Web-scale Image-Text Data
    CatLIP は初めて聞いたし、リンクは壊れているようだ

  • PyTorch の上に作られている

  • これが MLX とどう比較されるのか気になる。理解したところでは、MLX は PyTorch に相当するが、Apple Silicon 向けに最適化されたものだ
    これは MLX モデルを分散方式で学習するためのものなのか? それとも目的は何なのか?

    • MLX もこの計画の一部のように見える。https://github.com/apple/corenet では、4月公開の構成要素の一つとして MLX examples を挙げている
    • mlx_examples/open_elm に書かれているとおり、“MLX is an Apple deep learning framework similar in spirit to PyTorch, which is optimized for Apple Silicon based hardware.”
    • README をざっと見ると、MLX の上の層のように見える。機械学習を扱いやすくするフレームワーク層に近そうだ
  • Hugging Face Transformers に MPS バックエンドを接続して使う場合と比べて、これを使う利点が何なのか気になる

    • “MLX examples demonstrate how to run CoreNet models efficiently on Apple Silicon. Please find further information in the README.md file within the corresponding example directory.”
      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 特化によって追加の高速化がある点のように見える。小型モデルに関しては最も電力効率の高い深層ニューラルネットワーク学習フレームワークかもしれないが、実際のベンチマークが出ないと分からない
    • ここの実装はかなりきれいでモジュール化されているように見えるが、Transformers と Diffusers はモジュールだけを切り出して使わない限りそうではない
      このリポジトリには便利なユーティリティが多く、一般的なモデルや評価指標などのきれいな実装もかなりある
      言い換えると、推論よりも新しいモデルを書く用途に向いているように見える
    • 特別なものではなく、基本的には Apple ロゴ付きの PyTorch
  • こういうリポジトリで、複数のモデルや使い方に対する小さな API サンプルを安定して生成してくれる LLM エージェントがあるとよさそう

  • Apple Silicon で学習をサポートしているのか気になる。README で見落としていないなら、あまり明確ではない

    • そのような学習機能が小規模な実験以外で有用かは分からない。Apple はもうサーバー製品を作っておらず、作っていた時代でも高価だった
      自前の学習用途に Apple Silicon ベースの非公開サーバーを持っている場合を除けば、という話
    • MLX のサンプルがそれを可能にしているように見える。Mac 専用というより汎用フレームワークのように見える
  • フォルダーを見てみると、PyTorch と torchvision のクラスを継承しているだけで、新しいことはしていないように見えるクラスが多い
    すべてのオプティマイザ、スケジューラと大半のレイヤーがそういう形。ただし複数の論文のレイヤー組み合わせであるブロックはかなりあり、monai.networks.blocks に似ている
    「構成要素」という観点では、新規実装の損失関数や評価指標もいくつかある

  • Apple M1 でニューラルネットワークの学習と推論に使うライブラリとして何を勧めるのか気になる。C++ か Rust から使いたく、ニューラルネットワークは最大で500万パラメータ程度になる予定

    • 出発点としては PyTorch を使うと思う。Apple Silicon では Metal バックエンドがかなり速く、趣味の開発者から基盤モデル開発者まで最も広く使われているライブラリ