株式会社ZOZOテクノロジーズ / Research Engineer
髪型コーデ検索基盤システム
機械学習による髪型認識の仕組みを使ってコーディネートを推薦する仕組み。digdagやComposerを利用して膨大な画像データからスコアを計算するワークフローシステムの構築を行った。
Discover companies you will love
シカジロ合同会社 / 代表社員
鹿に似たプログラマ。愛犬「もなか」と「あも」が好き。 フルスタックエンジニアとして、インフラ、バックエンド、アプリ開発ができる。
- Android、GCPが得意なので両方活かしたフルスタックなお仕事 - スタートアップでのエンジニアリングとそれ以外何でも - 犬のためになるITの仕事
- Android, Flutterアプリ開発 - Python, Go API開発 - Terraform, GCP/AWS インフラ構築 - 上記を組み合わせたフルスタックエンジニアとしての活動
■得意な開発 - Android, Flutterアプリ開発 - Python, Go API開発 - Terraform, GCP/AWS インフラ構築 - 上記を組み合わせたフルスタックエンジニアとしての活動
某コンシューマー向けゲームの発売プロモーションのための、特設サイト用APIの開発を運営。 発売前のプロモーションのため、瞬間的に高負荷なアクセスに耐えうるAPIとインフラを開発する必要がある。 GCPのGoogleAppEngineを利用し、数週間に渡る多数のアクセスを無事に処理することができた。またそれを管理するためのダッシュボード画面などを構築した。
日本Androidの会福岡支部としてAndroidとMakeが主役のエンジニア向けイベントを主催した。
デジタルハリウッド福岡校にて6ヶ月間のAndroidアプリ開発講座と1ヶ月間の企業内インターンシップを受けられる「Androidアプリクリエイター養成講座」の講師として教育にあたった。
研究開発エンジニア
# 概要 自社の商品を画像を元に似た商品をレコメンドするサービス(画像検索システム)を開発しました。 # やってきたことと技術選定 担当したのは - プロトタイプのweb - API - 機械学習基盤(GKE) - インフラ - ワークフロー です。機械学習以外の全部に携わりました。 ### プロトタイプ プロトタイプのweb画面を開発しました。現在最もモダンであるフレームワークの1つであるVue.jsを選択し、短い期間で実装しました。使い捨てのコードだったのでスピード重視で実装しました。 ### API WebAPIを開発しました。機械学習全般ではPythonが多く使われれておりAPIでも相性を良くするためPythonを使い、素早くAPI開発ができるFlaskを使いました。マイクロサービス間ではgRPCを使って高速に通信させました。開発当初からSwaggerを使ってAPIを社内に公開し、他のチームの方にもAPIを使ってもらってフィードバックをもらいながら開発を進めました。 モデルを実行するAPIの呼び出しはとても重い処理です。GPUも使っているため、あまり頻繁に使われたくありません。そのためキャッシュをいかに使うかが重要になりました。「短時間での同一の呼び出し」「同一パラメータでの呼び出し」「同じアイテムをキーにした呼び出し」など複数パターンでキャッシュの仕組みを構築しました。キャッシュにはRedisを使い高速化し、データはMessagePackを使い特定の言語やバージョンに依存しない仕組みを構築しました。 ### GKE クラウドはGCPを選びました。GCPを選んだのは後述するKubernatesを使う必要があり、当時最も安定していたGKEを使いたかったためです。 GKEでマイクロサービスを構築しました。MLエンジニアが開発したモデルは複数あり、それぞれ要求するリソースが異なっていました。(AモジュールはGPUを使う、Bモジュールはメモリを多く使うなど)それぞれのモデルの性能を効率的に稼働させるためマイクロサービスに分けリソースを分配し、効率的にスケールできるようにしました。 リソースが複数あり環境もdev,stg,prdがあるためyamlファイルをたくさん書く必要が出てきました。チームでKustomizeを採用しコードを共通して適用できるようにしていきました。 ### インフラ インフラはSREチームと共同で安定化に務めました。SREチーム担当分のインフラ作業も一緒にやることで、k8s, terraform などのインフラ、バックエンドの開発力がとても身につきました。 github circleci などを組み合わせ、CI/CDによる自動化を実現しました。デプロイはすべてPRのマージを起点として自動化しており、安定したリリースを行っています。 ### ワークフロー Composer(AIrFlow)を使って数百万画像を使った学習処理のワークフローを構築しました。大量の画像取得、特徴量計算、結果保存、プロダクションAPIへのスムーズな適用、は思ったよりも難しくテストも難しいため大変困難な刺激的な分野でした。 dev,stg,prdの環境で変数がことなるため環境ごとに情報を差し替える仕組み、開発を効率化するためにデプロイと実行をCLIから実行する仕組み、1回の実行が数時間から数日に及ぶので開発者のSlack宛にワークフローの状況を知らせる仕組みなどを構築し、チームで効率的な開発をできるように開発環境を整えていきました。 # 姿勢 MLエンジニアが全力で機械学習業務に取り組めるよう、可能な限り彼らが仕事しやすいようにしていきました。ファイルサーバーの構築、画像ダウンロードスクリプトの開発など、MLの知識がなくてもできる作業は率先的にタスクを受け取り、メンバー全員が最善を尽くせるようにしていきました。
機械学習による髪型認識の仕組みを使ってコーディネートを推薦する仕組み。digdagやComposerを利用して膨大な画像データからスコアを計算するワークフローシステムの構築を行った。
農業IoTの研究開発
# 概要 国の事業「地域戦略プロジェクト」の中の一つ「スマートデバイスを用いて計測した情報の効果的可視化手法の確立」のいちごの収穫に関わるセンサーデータなどをグラフィカルに表示するAndroidアプリとバックエンドを開発しています。 # やってきたこと AndroidアプリとバックエンドはKotlin Multi Platform を使って開発しています。開発者が僕一人であるため、1つの言語で効率的に開発したかったことと、実験的挑戦が推奨されるプロジェクトだったためです。 まずは1つの共通ライブラリになるモジュールを作り、Android, iOS, serverで共通するモデルやAPI呼び出し、共通する関数をまとめました。これにより同じコードを何度も書く手間が減りました。 アプリはグラフを多用するツールになっており、小さな画面でも見たい情報がわかりやすくなるよう、デザインを工夫しながら開発しています。センサーデータは次々と流れてくるため、RxJavaを使いストリーム処理させています。 サーバーサイドは当初 EC2インスタンスの中にdocker compose を使って構築していました。APIはFlask、DBはMongoDBを採用していました。当初はプロトタイプ的な意味合いが強いサーバーだったため、迅速に開発することが求められたためです。当初はdocker machine を使いクライアントマシンからデプロイしていました。 IoTはときにデバイスが壊れ、データが送られなくなることがあります。それを検知するため定期的に特定デバイスからのデータが届いているかを確認するbotを開発し、Slackに通知させ保守性を高めました。 しかしIoTデバイスが増えデータが蓄積されるにつれ、大きなインスタンスが必要になり、コストが大きくなってきました。そのため現在はLambda, DynamoDB の構成に変更し高速化、低コスト化、安定化を実現しました。Serverless Frameworkを使い、AWS構成の構築は簡素化しました。 IoTの構成のDB移行作業はなかなか難しく、データ量が多い、DynamoDBでも思った性能が出なかったりしまし、何度もトライ・アンド・エラーを繰り返しました。移行処理はKotlinでスクリプト化し、コマンド一つで移行できるようにしました。無事成功し、現在は多数のアクセスを捌いています。
Rich Internet Application の開発など
株式会社ZOZOテクノロジーズ / Research Engineer
機械学習による髪型認識の仕組みを使ってコーディネートを推薦する仕組み。digdagやComposerを利用して膨大な画像データからスコアを計算するワークフローシステムの構築を行った。