Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ソフトウェア化と成果物の公開 AI Lab スキルアップ研修 研究コードの公開 [発展編]

Kazuhiro Ota
March 13, 2025
3

ソフトウェア化と成果物の公開 AI Lab スキルアップ研修 研究コードの公開 [発展編]

CyberAgent AI Labのスキルアップ研修にて発表した研究コード公開の作法についての発展編です。

Kazuhiro Ota

March 13, 2025
Tweet

Transcript

  1. 論文に加えて研究コードを公開する流れがありますね > Our code, data and trained models are available

    at this http URL. 研究コードがGitHubで公開されてる! 2 基礎編再掲
  2. 目次 • 実験コードとソフトウェアの違い ◦ ソフトウェア化する上で考慮すべきこと ◦ ソフトウェア化の指針 • ソフトウェアのパッケージングと公開 ◦

    GitHubとパッケージリポジトリ ◦ パッケージングとは ◦ TestPyPIへの公開チュートリアル • その他成果物の公開 ◦ デモサービス ◦ 学習済みモデル・データセット 6
  3. 実験・分析コードとソフトウェア 🧪実験・分析コード 💻ソフトウェア 実装対象 解かれていない問題 研究終了まで全体像は定まらない 要件に基づく機能・仕様 目的 アイデア検証 手法の透明性・再現性の確保

    汎用性のあるツールの提供 技術の社会実装 閲覧者 利用者 共著者など主に研究者 非研究者を含む一般ユーザ 研究で書いたコードはそのままでは広く利用される状態ではない 9
  4. ソフトウェア化とは 各種プログラミング言語から利用されるライブラリや、何らかのユーザイン ターフェイスを持ったツール・サービスを作成し、利用者に価値を提供する こと 特定の機能・処理に焦点を当ててプロ グラミングを支援 • NumPy • PyTorch

    • scikit-learn • pandas • OpenCV • etc. ライブラリ 仕事や研究などの作業そのものを支援 • Jupyter Lab • MLflow • ChilmAI • etc. ツール・サービス 両方の側面をもつソフトウェアも多いです 研究におけるソフトウェア化の作業は、提案手法・モデ ルを上記のものに昇華すること! 10
  5. ソフトウェア化を行う前に… そもそも研究内容をソフトウェア化すべきか・できるかを考えましょう 下記について自信を持てる状態を目指します • 競合の存在 ◦ すでに似たようなソフトウェアが存在する場合、何らかの面で優位性をつくれそうか ◦ 提案手法に短所がある場合、それをカバーする機能などを実装できそうか •

    研究とは異なる評価軸 ◦ 提案手法とは異なるところでその良さが伝わらない可能性も ◦ 使い方が分からない、実装のパフォーマンスが悪い、など • ドキュメンテーション・メンテナンス ◦ ユースケースを想定しつつわかりやすく網羅的なドキュメントをまとめられるか ◦ バグ報告やPull Requestを受けた際に応対が可能か 11
  6. ソフトウェア名 ターゲットとなるユーザや利用シナリオが見えたら、ソフトウェアを命名しましょう 目的や主要な機能を反映する名前にすることで、ユーザーがそのソフトウェアの用途を直感 的に理解できるようにします • シンプル ◦ 短くて覚えやすいか、発音しやすくスペルミスが起こりにくいか • ユニーク

    ◦ 他のソフトウェア、企業名、商標と重複しないか • ドメインが確保可能か ◦ 将来ソフトウェア配布ウェブサイトを独自に立ち上げた場合にそのドメインもソフトウェア 名に沿っていると見栄えが良い • 文化的・言語的配慮 ◦ 日本語以外の言語・文化で不適切な意味を持たないか • ブランドイメージ ◦ CyberAgentのイメージ・AI Labのビジョンについて一貫性があるか 13
  7. 実装要件 ソフトウェアで提供する機能を定義します 機能要件・非機能要件とわけて考えるとエンジニアと連携しやすくなります • 機能要件 ◦ ソフトウェアが本質的に提供したい・満たしておくべき要件 • 非機能要件 ◦

    パフォーマンス、セキュリティ、対応デバイスなどの品質面の要件 ◦ 難しい場合はリサーチエンジニアと連携しましょう 例 • テンソルデータに対する一般的な計算を行える • MLモデルをPythonのクラスとして表現できる • GPU上での処理も可能 • マッチングアルゴリズムで児童データ・保育所データ間の最適マッチングを導出できる • バリデーション処理で入力データのエラー箇所を明らかにできる • マッチングはN分以内で完了する 14
  8. 入出力の形式 入出力形式はソフトウェアの使い勝手に大きく影響します 実装要件を踏まえ、なるべく標準的な形式をサポートするようにしましょう 競合ソフトウェアや標準ライブラリをチェックして下記について検討します データタイプとフォーマット • テーブルデータ、テキスト、画像、音声 • CSV、JSON、XML、PNG ユーザーインターフェース

    • ユーザーが入力を行うためのインターフェース • ライブラリであれば関数などのAPI、ツールであればコマンドライン(CUI)やGUI バリデーションとエラーハンドリング • 入力データの検証方法と、無効なデータが入力された場合の処理を決めます 15
  9. 実装とリファクタリング 研究で書いたコードをより信頼性が高く、メンテナンスしやすいソフトウェアにす るために、下記のことに気を配りましょう • 可読性・メンテナンス性 • モジュール化・再利用性 • 依存関係の管理 •

    テストと検証 • 関数・クラスへのドキュメンテーションコメント ここで説明するには奥が深すぎるので各種書籍やネット情報を参考にしつつ、リ サーチエンジニアに相談してください 16
  10. パッケージ化すると何が嬉しいの? 主に下記の点について簡略化がなされ、ユーザがソフトウェアをインストール・ 利用しやすくなります • 依存関係の解決 ◦ ソフトウェアに必要なライブラリを明示的に指定することで、インストール時に自動的に依 存関係が解決・追加インストールされ、動作環境がコマンド一発で整います • バージョン指定でのインストール

    ◦ ソフトウェアの特定のバージョンを指定してインストールすることができ、互換性の問題を 回避できます • 便利なスクリプト・バイナリの提供 ◦ 自前のプログラムコードからライブラリを呼び出すことなく、特定のタスクをこなすための コマンドを提供できます 24
  11. pyproject.tomlファイルの記述・設置 Pythonパッケージに関する設定ファイルとして pyproject.tomlがあります パッケージに関する下記のような基礎情報および依存関 係をこのファイルに記載することでパッケージングプロ セスを定義します • パッケージ名 • バージョン

    • 作者 • 対象Pythonバージョン • 依存ライブラリとそのバージョン • プロジェクトページURL より詳細な記法とその意味は下記を参照してください Python のプロジェクトをパッケージングする#メタ データを設定する 27
  12. GCP Cloud Run 公開場所としてはWebサーバになるのですが、GCP Cloud Runを利用すること で、下記のような利点を活かしつつサービスを提供できます • ゼロスケール ◦

    アイドル状態のときには完全にスケールダウンし、リソースを消費しないため、コスト効率 が高いです • 簡単デプロイ ◦ Dockerコンテナイメージをデプロイするだけで、アプリケーションを実行できます 39