かえるのプログラミングブログ

プログラミングでつまずいたところとその解決策などを書いていきます。

2024 年を振り返る


Kaggle

今年は 4つ時間をかけてコンペに参加して戦績は、チーム金1、チーム銀1、メダルなし2 でした。 また Kaggle のコンペへの参加をはじめて6年半、ようやく目標にしていた Kaggle Competitions Grandmaster になれました。
詳細は GMになったよエントリ に書いています。

メダルを取れた 2枚のコンペはどちらも、地道に続けてきたコンペの復習が実を結び、銀圏までソロで到達、チームアップして金/優勝を目指すといった具合で進行しました。
チーム内での貢献度の観点ではまだまだ成長の余地があると思うので、これからも精進します。

先のエントリでは触れなかった メダルなしの 2つのコンペについて簡単に振り返ります。

ISIC 2024

患者の皮膚の病変データが皮膚がんかどうか判別するコンペでした。2ヶ月弱参加しました。
正例に対して負例の数がめちゃくちゃ多い不均衡のデータで、画像の oof 予測値を特徴量にした Tree モデルのアンサンブルハイスコアノートブックが公開されているコンペでした。

ハイスコア公開ノートブックをそのまま fork したサブで銅メダル圏~圏外の N00位くらいまで埋め尽くされていて、まあ shake が起こるだろうと予測できたので、頑健なモデルを作ってごぼう抜きしたろうと参加しました。またこの ISIC の過去コンペでチーム銀を取っていたこともあり、色々アンサンブルすれば銀は取れるっしょ!と調子に乗っていました。

自分なりに不均衡データの対策と関西kaggler 会などで言及されていた補助ロスやいろんなネットワークをスタッキングして頑健なモデルを作ったつもりでしたが、なかなか Public LB は上がらず、ひたすら CV を信じる苦しいコンペでした。

private で一番良かったのは、公開ノートブックを 6 seed avg したものだったのですが、ハイスコア公開ノートブックよりは自分がコネコネしたソリューションの方が private はええやろ!と思い選びませんでした。

shaky なコンペであっても強い人は強いソリューションを作られているので、自分も頑健なモデル、ソリューションを作れるように取り組んでいきたいです。

RSNA 2024

腰椎MRI(3D画像)から5つの腰椎変性疾患の椎間板レベルのそれぞれについて、重症度を正常/軽度、中等度、重度の3段階に分類して検出するコンペでした。

ISIC コンペが歯が立たなかった悔しさから、1ヶ月チャレンジしたコンペでした。 結果は惨敗でした。

銅メダルくらいの single fold ノートブックやそれには及ばないが別のアプローチで近いスコアが出ているノートブックが公開されており、

  • 銅メダルくらいの single fold ノートブックを 5fold avg すれば銅メダルは余裕やろw
  • 3通りのアプローチを 5fold で回して stacking すれば銀は堅かろうw
  • 業務でも YOLOX 使ってるし、物体検出+分類の 2stage アプローチもいけるやろ

とたかを括って撃沈しました。

3つ目の方針は上位ソリューションでも活用されている方法でしたが、特徴量として与えられていた Keypoint と複数のスライスの使い方が最後までわからなかったです。

上位ソリューションに現れるようなアイデアが閃いても実装できなければ成果に結びつかないという当たり前のことを改めて痛感しました。 (だからこそアイデアと実装を埋めるために復習が効果的だと思います。)

仕事

引き続きキャディにお世話になっています。勤続2年と1ヶ月です。
業務内容は MLOps をやっていた時期 MLE 的な業務をやっていた時期とで半々くらいでした。 MLE として入社しましたが、MLOps、顧客や CS さんとの対話・Rust など色々な領域にチャレンジさせてもらえています。
全部は書けないのですが、テックブログなどで公開されている範囲で書いていきます。

kfp を使った再学習パイプライン

ML モデルの作成は属人化しやすい特徴があると思います。担当者が異動したり、辞めたりするような場合に引き継ぎがドカンとくる状況や、何かあったときに作った人間しか改修できない状況はあまり健全ではなさそうです。
チームとして ML モデルを運用していくにはどうすれば良いか? を考えられました。

非同期ML推論基盤

オンライン API として作成していた ML モデルの推論を非同期処理として実装するための基盤を作成しました。
使用していたオンライン API のサービスが 0スケールしなかったり、GPU を扱う都合上、適切なクラウドサービスがなかったため自作することになりました。
システム要求を満たすために複数のクラウドサービスを組み合わせたり、サービスごとの権限設定や、IaaS によるインフラの管理などを経験できました。

生成AI 関係の検証

現行システムと比較して QCD を満たせるかどうかなどをチームで丁寧に検証しました。
キャディではプロダクトマネージャーが担うことが多いのですが、担当エンジニアとして顧客との定例 MTG や CS さんとの打ち合わせに同席し、顧客課題の解像度を高めることができました。

その他

  • チームの Embedded SRE に立候補して、自チームとSREチームとの連絡窓口をしたり、デプロイ済みのモデルについてリトライポリシーを設定した
  • Datadog で日々エラーの状態などを監視
  • 別チームが管理している Rust で書かれたライブラリへ PR を出すために少し修正をしました。

対外的な活動

3月 - キャディと LPIXEL さんとで実施した合同イベントで久しぶりに登壇しました。 https://www.docswell.com/s/kaeru_nantoka/Z8G8EW-2024-03-22-142237/1

12月 - 会社の技術部署で実施したアドカレに記事を投稿しました。 https://caddi.tech/2024/12/07/000122

英語

特に必要性に駆られているわけではないのですが、kaggle championship の時や新婚旅行でコミュニケーションができなかった悔しさは残っており、せめて相手が何言っているかは聞き取れるようになりたいと常々思っています。

そこで、海外ドラマの BCC の SHERLOCK にハマって妻と視聴しています。ゆくゆくは英語で視聴するため、まずは吹き替え版を楽しんでいます。4season あって、各3話、90min ずつあるのですごいボリュームです。
また、SHERLOCK は海外でも人気があるので、Youtube で海外の方がフレーズの解説動画を作っていたりします。そういったコンテンツも活用しながら気ままに学習しています。

プライベート

2月に引っ越しして、5月に結婚式を挙げました。
準備は大変でしたが、家族や友人に見守られ、思い出に残る良い式になりました。

まとめ

Kaggle Competitions Grandmaster になれました。仕事では様々な領域にチャレンジし、幅が拡がりました。2025年は、もう少し ML システムという観点でインフラも含めた知識と実装の経験を増やして、自分の中でこれという答えを提示できるようになりたいです。
2024年もありがとうございました。