FLINTERS Engineer's Blog

FLINTERSのエンジニアによる技術ブログ

今期振り返り

はじめに

こんにちは!

本記事はブログ祭り企画での執筆で、今期の振り返りがテーマです。

FLINTERSに所属してから関わっていたプロジェクトが2月末で解散し、今年の3月から新たなプロジェクトに関わっています。

機械学習プロジェクト(2月末まで)

僕が入社してからもうすぐ3年になります。
入社した当時、本プロジェクトの開発者が10人程いましたが解散時点では僕1人だけでした。
MLOpsが主な業務でしたが、開発工程の中でデータサイエンティスト⇔エンジニア間でのモデルの連携方法を見直すことで、全体の工数を大幅に削減することができました。

参加当時はデータサイエンティストから提供されたソースコードを、エンジニアがAPIサーバーとして動くように開発しユーザーに提供していました。このやり方の時は

  • データサイエンティストが提供してくれるモデルやコードが変わると、API側のコードも変更する必要がある点
  • それぞれのコードで利用しているライブラリのバージョンが一致せず、動作が保証できないことがある点
  • データサイエンティスト⇔エンジニア間で使い方や動作確認などのコミュニケーションで時間がかかってしまう点

などの影響があり、リリースするのに半年以上かかってしまうという課題がありました。

そこで実施した改善策は、データサイエンティスト側でも API を構築できるようにするというものでした。
データサイエンティストがAPIサーバーをdocker containerとして構築できるようになると

  • データサイエンティスト側が、技術を自由に選択できるようになった
  • エンジニア側では、APIの品質向上に注力できるようになった

という状態になり、かつお互いに疎結合な状態にもなるので、エンジニアとしてはAPIのテストやデプロイの自動化に注力することができるようになりました。
もちろんその代償としてデータサイエンティスト側の負担が増えたという課題が残っていますが、当初の課題であったリリーススピードが早くなりプロジェクト全体で見ると効率的になったと思います。

システムを設計する組織は、そのコミュニケーション構造をそっくりまねた構造の設計を生み出してしまう

これはコンウェイの法則と呼ばれる法則です。
本プロジェクトではデータサイエンティスト・エンジニアが組織的に分かれていますが、それぞれの組織毎でできるだけ干渉しないような開発体制に落ち着くことができた、ということになるでしょう。

システム統合とパフォーマンス改善(3月から)

新しいプロジェクトでは3つのシステムを統合しつつ、そのシステムの提供する数理最適化問題のパフォーマンスを改善するというものです。

僕のメインの仕事は数理最適化のパフォーマンス改善の部分で、言い換えると"数理最適化の最適化"です。
ややこしいですがここで最適化という言葉は2種類の意味で使っています。

1つは数理最適化で、プロジェクトでは予算Xが与えられたときにある関数を最大にするようなXの分割を求めるという問題です。
もう1つはそのような問題のプログラムの計算時間を改善するというプログラムの最適化です。

このプロジェクトの課題はパフォーマンス改善の部分がうまくいってないことでした。
現在までも様々な検討を進めている段階ですので、ブログのテーマである今期の振り返りとしては検討段階というのが結果になっています。

その中で、プログラムの最適化について先人たちがさまざまなアドバイスを残しており、一つ紹介します。 プログラムを高速化する話Ⅱ 〜GPGPU編〜 | PPT

アルゴリズムの改良
既存ライブラリの使用
CPU上のプログラムの最適化
など可能なことすべてをしても、必要なパフォーマンスが得られない時に、最後の最後の手段として、手作業でGPUプログラムを高速化するために必要なテクニックを学ぶ

と述べられています。 様々な考えがあり、今後も検討を重ねていく部分が多くあると思いますが、何事もやってみないとわかりませんよね!

乞うご期待!