はじめに
最適化を学生時代から続けている私、現在会社員2年目になりました。同じ最適化をやるにしても、研究時代と会社員時代とでやはりプログラムへの向き合い方がかなり変わったように思います。
研究だと出せる結果を無理矢理でも1つ作っちゃえば OK ですが、仕事だと(案件に依りますが)コロコロ変わり続ける要求に合わせてプログラムを書き換え続ける必要があります。ちなみに、変化し続ける要求に合わせ、開発と運用を同時に考えて進めていく手法を DevOps(Development Operations)と呼び、さまざまな知見やツールが整備されています。(なお社内では DevOps 勉強会なども行われていて私も参加しています、素敵な会社です)
さて、私は業務で最適化プログラムの開発を行なっていて、DevOps 的な発想で開発を行いたいと思いました。しかし、通常のシステム開発では DevOps、機械学習領域では MLOps(DevOps の応用)なんて概念があったりするのですが、こと最適化に上手く対応した概念はありませんでした(ググっても GPT-4 に聞いてもなかった、したがって絶対ない、Q.E.D.)。
いやはやそれでは仕方ありません、この私が最適化領域に向けた DevOps 技術、名付けて OptiOps(Optimization Operations)を提唱しようじゃありませんか。
※プログラムを書いた経験の少ない人には刺さらない記事だと自認しているので細かな説明はしない方針です。手抜きですみません。
やりたいこと
最適化モデルの運用や管理手法を確立し、OptiOps を実現する。極力イケてる感じの構成にまとめる。
コンセプト
最適化を行う上で一番手軽な言語はおそらく Python なので、Python を用いて OptiOps を実現しようと思います。基本的に今回やりたいことは最適化のモデルと結果の適切な管理なので、なんと MLOps で利用されているツールがそのまま使えます。今回は MLOps の世界ではとても有名なツールの MLflow を使っていきましょう。
基本コンセプトとしては、①手軽で便利な言語(Python)で、②おしゃれなパッケージ管理ツール(Rye)を使いつつ、③手軽なライブラリ(DEAP)で最適化を実行し、④モデル管理用のツール(MLOps)で OptiOps を実現します。MLOps そのままとか言わないでください、その通りです。
環境周り
①言語
Python 3.10.13
②パッケージ管理
Rye 0.15.2
③最適化
DEAP 1.4.1
④モデル管理
MLflow 2.9.2
実行
リポジトリはこちら
https://github.com/MySweetEden/optiops
# クローン
git clone https://github.com/MySweetEden/optiops.git
# 移動
cd optiops
# 各種ライブラリインストール
rye sync
# プログラム実行
python src/optiops/__init__.py
# 管理画面表示
python -m mlflow ui
プログラム実行結果(DEAP による最適化過程を Plotly で描画)
振り返り
最適化モデルや結果の管理を実現できました。OptiOps 完成です。しかしながら現状ではただ MLOps の技術を最適化に展開したのみで、特段の発展性はなかった気がするので、今後は最適化の理論に紐づいた独自拡張ができればなと思っています……。
おわりに
ふと思いついたアイデアをその日の晩のうちに形にできて楽しかったです。Rye と MLflow をそろそろ使ってみたいと思っていたのでとても良い機会でした。アジャイルを推進していきましょう、今後とも OptiOps をよろしくお願いします。
参考