1
/
5

データサイエンティストが爆速でプロダクト改善を進めていくためのツール、SARAの紹介

こんにちは、ウォンテッドリーでデータサイエンティストをしている林 (@python_walker) です。

ウォンテッドリーでは、テクノロジーの力で人と仕事の適材適所を実現するために推薦システムの開発を行っています。今回この記事で紹介するのは、データサイエンティストが良い推薦システムを爆速で開発するのを可能にする、便利な内製ツールです。

背景;ウォンテッドリーで使われている開発環境

ウォンテッドリーが提供しているビジネスSNS「Wantedly Visit」はKubernetes上で運用されており、エンジニアは普段の開発もKubernetes上で行う機会がとても多いです。特に、Kubernetesを操作するためのツールとして有名な kubectl をラップした kube というツールを開発し利用しています。kube についてはウォンテッドリーが公開しているHandbookでも紹介がされているので、興味のある方はぜひ呼んでみてください。

kube | dev-branding@wantedly.com
ここでは Wantedly の社内ツールである kube の概要について解説します。 kube というツール自体に着目し、Kubernetes やその運用方法については扱いません。 この章を Wantedly に存在する kube に関するルートドキュメントと位置づけます。 したがって説明は概論にとどめて細かい利用方法などは他のドキュメントで保管していくものとします。 現在各所に散らばる kube に関するドキュメントをこの章に集約している段階です。 主に下のような人を想定しています。 kube は wa
https://docs.wantedly.dev/fields/dev-tools/kube

kubeの機能の中でも特にkubeforkという機能は擬似的にKubernetesクラスタをコピーし、自分専用のデプロイ先として用いることができるため、普段の開発の生産性を大きく向上させています。

データサイエンティストも同様にKubernetes上で開発を進めていくという体制を取っていましたが、必要なリソース量が一般的に多いことやクラスタ上の他のサービスとのつながりが構成上あまり深くなかったので、kubeforkは使わずにリソース量を指定して開発用のPodを立ててそこに接続して開発をするという運用を取っていました。

kube sandbox sh main

kube コマンドを使ったPodを立てる最も簡単なコマンドは上のようなもので、sandbox環境で今いるリポジトリのmainブランチの内容でPodを立てて、Podに対してKubernetest APIを通してshコマンドでシェルを実行して接続するという動作をします。

課題;開発に使う際の使い勝手

kubeでPodを立てた場合、本番運用とほとんど同じ環境が用意されるので、書き上がったコードを動作確認するために使う際にはとても便利な機能です。しかし、開発途中に限ってみると使い勝手にはいくつか課題がありました。

  1. Podの中身は永久には保存されない
  2. CLIのみが用意されているツールなのでグラフの描画などは行えない
  3. 本番運用時の環境に近いので、開発時のみに必要になるようなツールはほとんど入っていない

Pod内で作業していてPodの内部でexitを実行してシェルから抜け出したり、何も指定ない状態を一定時間続けるとPodは消えてしまいます。このとき、作業内容や生成物はGCSやS3のような外部ストレージなどに保存しない限りPodと一緒に消えてしまいます。

また、先程書いたコマンドからある程度予想できた方もいると思いますが、Pod内の操作はすべてシェルを通して行う必要があり、3とも関連しますがssh serverなども入っていないのでVSCodeなどに繋いで計算結果をグラフにして表示するといったことも簡単にはできませんでした。さらに、vimやemacsなどのツールも最初からは入っていないので、Podを立てるたびに最低限使いやすいように各自設定しないとコードを書くということも困難でした。

ちなみに、自分がこの体制で開発をしていたときにPodを立てるたびに行っていたことは以下のような感じです。Podは休憩などしてPCがスリープなどに入ってしまうと簡単にスッと消えてしまうので、このコマンドは毎日3~4回は実行していました。面倒くさいですね。

$ apt update && apt install -y vim
$ git config --global user.name "Yudai Hayashi"
$ git config --global user.email "xxx@xxx.com"
$ mkdir ~/.ssh
$ vim ~/.ssh/config # GitHubにSSHでpushするための設定追加
$ touch ~/.ssh/$MY_SSH_KEY
$ chmod 600 ~/.ssh/$MY_SSH_KEY
$ export GITHUB_USERNAME=xxx
$ export GITHUB_ACCESS_TOKEN=xxx
$ git config --global url.https://$GITHUB_USERNAME:$GITHUB_ACCESS_TOKEN@github.com/.insteadOf https://github.com/

解決策;新たなツールSARAの開発

上記の課題を解決するために、kubeをさらにラップする形でSARA (Seamless Accessible Resource Allocator)というツールを新たに開発し始めました。SARAは当時の推薦基盤チームのnasa(@k-nasa)さんが主導で開発を進め、今は林が保守・追加の機能追加を主に担当しています。SARAは以下のような機能を提供します。

  • Kubernetes上に必要な分のリソースを指定してPodを立てることができる
  • Podに対してSSH接続をして開発することができる
  • Podのベースとなるイメージ内にあるツールに加えて、開発時によく使うツールはインストールされた状態で作業を始められる
  • Pod内の作業ディレクトリは永続化され、Podを立て直したときも同じ場所から作業を再開することができる
  • 起動後はアイドル状態が一定以上継続すると自動的にPodが落ちる

SARAの起動フロー

SARAはkubeのラッパーのような立ち位置にいるため、SARA自体はユーザーからコマンドを受け取ってkubeを通してKubernetesを操作します。

  1. SARAのコマンドが実行されると、kubeを通して永続化ボリュームの呼び出しと指定したDocker imageに対してPodが作成される
  2. Podが起動したらディスクをPodにマウントする
  3. ディスクが初期状態の場合にはPodのworkspaceで指定されたディレクトリからコードをコピーしてくる

ここまででPodとボリュームが用意されます。ここからさらにPodで開発できるように以下のような作業が行われます。

  • SSHサーバーの設定、起動
  • 認証情報の設定 (Pod内&ローカルPC)
  • Port forwardデーモンプロセスの起動
  • ローカルPCとの接続

このプロセスにより、Podが起動したら自動的にローカルPCにport forwardされ、例えばVSCodeを使っていれば何もしなくてもRemote ExploreにPodの名前が表示されるようになり、そこから接続することで開発を始めることができます。このように、SARAはkubeが提供しているKubernetesリソースを扱う便利なインターフェースを活用して、さらにKubernetes上での開発体験を一層向上させています。

saraコマンドの実行ログ

❯ sara start -v
DEBUG Deleting k8s resources...
DEBUG k8s resources: {...}
DEBUG Finished deleting k8s resources
INFO Starting machine...
DEBUG Creating k8s resources...
DEBUG k8s resources: {...}
DEBUG Creating PVC...
DEBUG pvc already exists
DEBUG Creating Pod...
DEBUG Finished creating k8s resources
DEBUG Configuring SSH...
DEBUG Configuring working directory...
DEBUG copy working directory:
INFO Started machine

- The data in the directories under /xx is persistent.

Forwarding from xxx -> xx
Forwarding from xxx -> xx
INFO Waiting for port forwarding...
DEBUG Update SSH config file
Handling connection for xxx
Warning: Permanently added 'xxx' to the list of known hosts.
INFO All setup processes done.
INFO You can connect to the host with name xxx.

SARAによって改善した点

まず最初に、SARAによってデータサイエンティストの開発者体験は大きく改善したと考えています。使い慣れた環境で開発できるようになったのはもちろん、実験結果が保存されて後で確認などができるようになったのは、ML開発をするうえでとても大きな開発体験の向上だったと感じています。また、SARAの機能のところで少し触れたように、一定時間以上何も実行しないまま放置すると勝手に落ちてくれるので、使っていないのにリソースをずっと確保してしまうという事態も防げるのも良い点だと感じています。

We're hiring!

私たちと一緒に、推薦システムという技術活用を促進して人と会社の理想的なマッチングを追求するデータサイエンティスト・機械学習エンジニアの仲間を探しています。少しでも私たちの取り組みに興味を持っていただけたら、以下の募集から「話を聞きに行きたい」ボタンをクリックしてください!

Wantedly, Inc.では一緒に働く仲間を募集しています
9 いいね!
9 いいね!

同じタグの記事

今週のランキング