Skopsの紹介

Skops介绍

Skopsの紹介

Hugging Faceでは、オープンソースの機械学習に関するさまざまな問題に取り組んでおり、モデルの安全なホスティングや公開、再現性、説明可能性、コラボレーションなどを可能にしています。私たちは、新しいライブラリ「Skops」をご紹介できることを大変嬉しく思っています!Skopsを使用すると、scikit-learnモデルをHugging Face Hubにホストしたり、モデルのドキュメント用のモデルカードを作成したり、他の人と共同作業したりすることができます。

まず、モデルをトレーニングしてから、Skopsを使用してステップバイステップでsklearnを本番環境で活用する方法を見ていきましょう。

# ライブラリをインポートしましょう
import sklearn
from sklearn.datasets import load_breast_cancer
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split

# データをロードして分割します
X, y = load_breast_cancer(as_frame=True, return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=42
)

# モデルをトレーニングします
model = DecisionTreeClassifier().fit(X_train, y_train)

モデルのファイル名やシリアライズ方法は、pickleやjoblibなどの任意の方法を使用できます。現時点では、私たちのバックエンドではモデルの読み込みにjoblibを使用しています。 hub_utils.initは、指定されたパスにモデルがトレーニングされた環境の仕様を含む設定ファイルを作成し、モデルを含むローカルフォルダを作成します。 initに渡されたデータとタスクは、Hugging Face Hubがモデルページでの推論ウィジェットを有効にし、モデルを見つけるための機能を提供するのに役立ちます。

from skops import hub_utils
import pickle

# モデルを保存しましょう
model_path = "example.pkl"
local_repo = "my-awesome-model"
with open(model_path, mode="bw") as f:
    pickle.dump(model, file=f)

# ローカルリポジトリを初期化します
hub_utils.init(
    model=model_path, 
    requirements=[f"scikit-learn={sklearn.__version__}"], 
    dst=local_repo,
    task="tabular-classification",
    data=X_test,
)

リポジトリには、シリアライズされたモデルと設定ファイルが含まれています。設定には以下の情報が含まれています:

  • モデルの特徴
  • モデルの要件
  • X_testから取得した例の入力データ
  • モデルファイルの名前
  • ここで解決するタスクの名前

次に、モデルカードを作成します。モデルカードは、Hugging Face Hubの期待する形式に一致する必要があります。これは、マークダウン部分とメタデータセクション(先頭のyamlセクション)で構成されます。メタデータセクションのキーはこちらで定義され、モデルの検索性を向上させるために使用されます。モデルカードの内容は、skopsで使用するテンプレートによって決まります:

  • メタデータ用の先頭にyamlセクション(モデルライセンス、ライブラリ名など)
  • 自由なテキストと埋めるセクション(モデルの簡単な説明など)を持つマークダウンセクション。次のセクションは、モデルカードに埋めるためにskopsによって抽出されます:
  • モデルのハイパーパラメータ
  • モデルのインタラクティブなダイアグラム
  • メタデータには、ライブラリ名、タスク識別子(たとえば、表形式の分類)、推論ウィジェットが必要な情報が埋められます。

モデルカードに情報をプログラムで渡す方法を説明します。デフォルトのテンプレートについては、skopsが提供するドキュメントやセクションを参照して、テンプレートが期待するものやどのようなものかを確認できます。

モデルのシリアライズ時に、タスク名とライブラリ名が設定ファイルに書き込まれます。この情報は、モデルカードのメタデータでも必要です。そのため、metadata_from_configメソッドを使用して設定ファイルからメタデータを抽出し、カードの作成時に渡すことができます。 add を使用して情報とメタデータを追加できます。

from skops import card

# カードを作成します
model_card = card.Card(model, metadata=card.metadata_from_config(Path(destination_folder)))

limitations = "このモデルは本番での使用にはまだ準備ができていません。"
model_description = "これは乳がんデータセットでトレーニングされたDecisionTreeClassifierモデルです。"
model_card_authors = "skops_user"
get_started_code = "import pickle \nwith open(dtc_pkl_filename, 'rb') as file: \n    clf = pickle.load(file)"
citation_bibtex = "bibtex\n@inproceedings{...,year={2020}}"

# addを使用して情報を追加できます
model_card.add(
    citation_bibtex=citation_bibtex,
    get_started_code=get_started_code,
    model_card_authors=model_card_authors,
    limitations=limitations,
    model_description=model_description,
)

# メタデータ部分を直接設定できます
model_card.metadata.license = "mit"

モデルを評価し、評価方法の説明をaddで追加します。メトリクスはadd_metricsで追加され、テーブルにパースされます。

from sklearn.metrics import (ConfusionMatrixDisplay, confusion_matrix,
                            accuracy_score, f1_score)
# 予測を行い、モデルを評価する
y_pred = model.predict(X_test)
# add_metricsを使用してメトリクスを渡し、addで詳細を渡すことができます
model_card.add(eval_method="モデルはテストの分割を使用して評価され、マクロ平均に基づいて正解率とF1スコアが計算されます。")
model_card.add_metrics(accuracy=accuracy_score(y_test, y_pred))
model_card.add_metrics(**{"f1スコア": f1_score(y_test, y_pred, average="micro")})

add_plotを使用して、カードに任意のプロットを追加することもできます。

import matplotlib.pyplot as plt
from pathlib import Path
# 混同行列を作成します
cm = confusion_matrix(y_test, y_pred, labels=model.classes_)
disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=model.classes_)
disp.plot()

# プロットを保存します
plt.savefig(Path(local_repo) / "confusion_matrix.png")

# プロットはconfusion_matrixという名前でモデルカードに書き込まれます
# プロットのパスを渡します
model_card.add_plot(confusion_matrix="confusion_matrix.png")

モデルカードをローカルリポジトリに保存しましょう。ここではファイル名をREADME.mdにする必要があります。これはHugging Face Hubが期待するものです。

model_card.save(Path(local_repo) / "README.md")

ローカルリポジトリをHugging Face Hubにプッシュできるようになりました。これにはhub_utilspushを使用します。Hugging Face Hubでは認証にトークンが必要ですので、ノートブックからログインする場合はnotebook_login、CLIからログインする場合はhuggingface-cli loginにトークンを渡してください。

# リポジトリがHugging Face Hub上に存在しない場合、create_remoteをTrueに設定すると作成されます
repo_id = "skops-user/my-awesome-model"
hub_utils.push(
    repo_id=repo_id,
    source=local_repo,
    token=token,
    commit_message="pushing files to the repo from the example!",
    create_remote=True,
)

モデルをHubにプッシュすると、リポジトリがプライベートでない限り、誰でも使用することができます。モデルはdownloadを使用してダウンロードできます。モデルファイル以外にも、リポジトリにはモデルの設定と環境要件が含まれています。

download_repo = "downloaded-model"
hub_utils.download(repo_id=repo_id, dst=download_repo)

リポジトリ内で予測を行うために、推論ウィジェットが有効になっています。

プロジェクトの要件が変更された場合、update_envを使用して環境を更新することができます。

hub_utils.update_env(path=local_repo, requirements=["scikit-learn"])

上記のコードでプッシュされた例のリポジトリはこちらでご覧いただけます。モデルを保存し、モデルカードユーティリティを使用する方法を示すために、2つの例を準備しました。リソースセクションで見つけることができます。

リソース

  • モデルカードのチュートリアル
  • hub_utilsのチュートリアル
  • skopsのドキュメント

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

データサイエンス

「3つの質問:ロボットの認識とマッピングの研磨」

MIT LIDSのLuca CarloneさんとJonathan Howさんは、将来のロボットが環境をどのように知覚し、相互作用するかについて議論し...

人工知能

ギル・ジェロン、Orca SecurityのCEO&共同創設者-インタビューシリーズ

ギル・ゲロンは、オルカ・セキュリティのCEO兼共同設立者ですギルは20年以上にわたりサイバーセキュリティ製品をリードし、提...

人工知能

ファイデムのチーフ・プロダクト・オフィサー、アルパー・テキン-インタビューシリーズ

アルパー・テキンは、FindemというAI人材の獲得と管理プラットフォームの最高製品責任者(CPO)ですFindemのTalent Data Clou...

人工知能

「LeanTaaSの創設者兼CEO、モハン・ギリダラダスによるインタビューシリーズ」

モーハン・ギリダラダスは、AIを活用したSaaSベースのキャパシティ管理、スタッフ配置、患者フローのソフトウェアを提供する...

AIニュース

OpenAIのCEOであるSam Altman氏:AIの力が証明されるにつれて、仕事に関するリスクが生じる

OpenAIのCEOであるSam Altmanは、特に彼の作品であるChatGPTに関するAIの潜在的な危険性について公言してきました。最近のイ...

AIテクノロジー

アンソニー・グーネティレケ氏は、Amdocsのグループ社長であり、テクノロジー部門および戦略部門の責任者です- インタビューシリーズ

アンソニー・グーネティレーケは、Amdocsでグループ社長、テクノロジーと戦略担当です彼と企業戦略チームは、会社の戦略を策...