エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

『エムスリーデジカルスマート診療』開発現場を観察してきた

はじめまして、プロダクトマネージャーの坂(ばん)です。2021年2月にエムスリー入社し、4ヶ月が経ちました。入社後、最初のミッションは、4つのプロダクト開発現場に参加し、”エムスリーのプロダクト開発を肌で感じる”ことでした。この記事では『エムスリーデジカルスマート診療』開発チームが、なぜ超短工期(3ヶ月強!)でリリースできたのか、開発現場から得た気づきを記載します。

続きを読む

分散密ベクトル探索エンジンValdとSentence-BERTを使った類似文書検索を試す

エムスリーエンジニアリンググループ AI・機械学習チームでソフトウェアエンジニアをしている中村(@po3rin) です。 好きな言語はGo。仕事では主に検索周りを担当しています。

Overview

最近、社内で情報検索論文輪読会を立ち上げました。

情報検索論文読み会のスケジュール

そこでNGT-ONNGについての論文*1を紹介したところ1時間の予定のところを盛り上がりすぎて2時間超えてしまいました。

大盛り上がりのついでに、今回は情報検索論文輪読会で紹介した近似最近傍探索ライブラリNGTを内部で利用するValdを使って、類似文書検索がどのように出来るのか、現状の問題を解決できるのかを試したのでその結果を報告します。

*1: Optimization of Indexing Based on k-Nearest Neighbor Graph for Proximity Search in High-dimensional Data (https://arxiv.org/abs/1810.07355)

続きを読む

Google AnalyticsのBigQuery Exportを使って検索ログデータ分析基盤を構築した

エムスリーエンジニアリンググループ AI・機械学習チームでソフトウェアエンジニアをしている中村(@po3rin) です。 好きな言語はGo。仕事では主に検索周りを担当しています。

Overview

医師に質問ができるサービスであるAskDoctorsではユーザーが質問を検索できる機能があり、今回は検索改善タスクのために検索ログデータ分析基盤を構築したお話をします。これにより改善サイクルを回せるようになったり、検索ログを使った各種アルゴリズムが利用可能になりました。

データ基盤構築では他チームとの連携が必要不可欠であり、コミュニケーションで工夫した点などもお話できればと思います。

続きを読む

テックブログなにもわからないけど知見をまとめて人類に貢献したい

こんにちは、エムスリーエンジニアリンググループの福林 (@fukubaya) です。

以前からテックブログ自体の記事をどこかで書きたいなと思っていたところに、 テックブログをテーマにしたイベントが開催されると知り、 ちょうどいいタイミングだったので書くことにしました。

f:id:fukubaya:20210521130029j:plain
チームスマイル・いわきPITは、福島県いわき市のエンターテイメント専用施設である。『PIT』は「Power Into Tohoku!」の頭文字。本文には特に関係ありません。

続きを読む

gokart 1.0.0 をリリースしました

はじめに

はじめまして。エムスリー AI・機械学習チームの河合(@vaaaaanquish)です。

本記事投稿日と同日、エムスリーが開発しているOSSのうちの1つであるgokartのversion 1.0.0をリリースする運びとなりました。

本記事は、これまでのgokartの軌跡と成果を紹介しつつ、内情を含めながら、gokart 1.0.0に込めた想いを綴るものです。

  • はじめに
  • gokartとは
  • gokart 1.0.0
    • ドキュメントの拡充とロゴの追加
    • gokart.build
  • gokartメジャーバージョンリリースに寄せて
  • おわりに

 

gokartとは

gokartは、元チームリーダーであった西場さん@m_nishibaが、AI・機械学習チームを1人立ち上げた際、チームの基盤となるよう作成した、機械学習パイプラインを取り扱うPythonモジュールです。

github.com

続きを読む

GKE上の一定時間経過したJobを自動削除する

こんにちは。
エムスリーエンジニアリンググループ AI・機械学習チーム 堀江です。

弊チームでは、YAMLの設定に従って自動でモデルの学習 & 推論 & 評価まで行ってくれるようなMLパイプラインのプロダクトをGKE上に構築して運用しています。
MLパイプラインにより、パラメータを変えた実験を並列に大量に行うことが可能になっており、多いときには同時に数十Jobが走っていたりします。

そのような運用をしていると問題になるのが完了した (失敗を含む) Jobの後片付けです。

ttlSecondsAfterFinished

実はkubernetesには完了したJobのcleanup機能が備わっています。

TTL mechanism for finished Jobs

以下のように ttlSecondsAfterFinished を設定すると、完了したJobを自動的に削除してくれて非常に便利なんですが、この機能、一向にalphaからステータスが変わりません (2021年3月現在)。

apiVersion: batch/v1
kind: Job
metadata:
  name: pi-with-ttl
spec:
  ttlSecondsAfterFinished: 100
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never

kubectlやコントローラの自作によって ttlSecondsAfterFinished の代替機能を作成している方もいるようですが、今回は弊チームで運用しているGitlab CI上のスケジューラでJobステータスを監視し自動的に削除してくれる機能を実装しました。

続きを読む