swift-huggingface リリースノート / 新機能

Hugging Faceは、swift-huggingfaceのリリースを発表しました。これは、Hugging Face Hub向けの完全なクライアントを提供する新しいSwiftパッケージです。このライブラリは、Swiftエコシステムにおける重要な信頼性と開発者体験のギャップに対処し、特に大規模なモデルダウンロード、Pythonとのキャッシュ同期、認証の柔軟性に関してです。

信頼性の高いモデルダウンロードと再開サポート

swift-huggingfaceは、以前の信頼性の低いダウンロードメカニズムを、URLSessionダウンロードタスクに基づく堅牢なシステムに置き換えます。これにより、明示的な進行状況の追跡と中断されたダウンロードを再開する機能が提供され、これは機械学習で一般的なマルチギガバイトファイルにとって不可欠です。

主なダウンロード機能には次のものがあります:

  • 再開サポート: resumeDownloadFile メソッドは、保存された再開データを使用して、開発者が中断した場所からダウンロードを再開できるようにします。
  • スナップショットダウンロード: downloadSnapshot 関数は、モデルリポジトリ全体を管理し、メタデータを追跡して、後続の呼び出しでは変更されたファイルのみがダウンロードされるようにします。
  • フィルタードダウンロード: ユーザーはパターン(例: *.safetensors, *.json)を指定して、リポジトリから必要なファイルのみをダウンロードできます。

Python互換キャッシュ構造

重複したダウンロードをなくすため、swift-huggingfaceはPythonのhuggingface_hubライブラリと互換性のあるキャッシュ構造を実装します。これにより、SwiftアプリケーションはPython CLIまたはtransformersライブラリを通じて既にダウンロードされたモデルを共有できます。

キャッシュは、コンテンツアドレス可能なストレージを利用し、ファイルはETagによってblobs/ディレクトリに保存されます。スナップショットディレクトリは、これらのblobへのシンボリックリンクを使用してディスク使用量を最小限に抑えます。このライブラリは、キャッシュの場所について標準的な環境変数の慣習に従い、HF_HUB_CACHEHF_HOMEをチェックし、デフォルトでは~/.cache/huggingface/hubを使用します。マルチプロセスアクセスでのレース条件を防ぐため、ライブラリはflock(2)ファイルロックを採用しています。

フレキシブルな認証とOAuth 2.0

認証はTokenProviderパターンを通じて管理され、認証情報のソースが明確になります。このライブラリは、いくつかの認証フローをサポートしています:

  • 自動検出: 環境変数(HF_TOKEN, HUGGING_FACE_HUB_TOKEN)、トークンファイル、または標準のHF CLI場所からトークンを自動的に見つけ出します。
  • 静的トークン: CI/CD環境向けに明示的に提供されるトークン。
  • Keychain統合: システムKeychainを通じた本番アプリの安全なストレージ。
  • OAuth 2.0: ユーザー向けアプリケーションのための完全な実装で、システムブラウザサインインを処理し、Keychainにトークンを保存し、自動的にトークンを更新するHuggingFaceAuthenticationManagerを含みます。

HubとInference APIの包括的なカバレッジ

ファイル操作を超えて、swift-huggingfaceはHugging Face HubとInferenceプロバイダーとのやり取りのためのフルクライアントを提供します:

  • Hub API: モデル、データセット、スペース、コレクション、ディスカッションのリスト表示と管理をサポートします。
  • Inference Client: InferenceClientは、Hugging Face Inferenceプロバイダーを介して数百のモデルにアプリがアクセスできるようにし、テキストプロンプトから画像を生成するtextToImageなどの機能を含みます。

今後のロードマップと統合

swift-transformersとの統合は、既存のHubApi実装を置き換えるプルリクエストを通じて現在進行中です。このアップデートにより、mlx-swift-lmやその他のエコシステムライブラリのユーザーにもswift-huggingfaceの信頼性が拡張されます。さらに、Hugging FaceはXetストレージバックエンドのサポートを開発中で、これによりチャンクベースの重複排除が導入され、大規模モデルのダウンロードがさらに高速化されます。

Sources