実現したかったのは、ブロードリーフのビジネスを変えること。Interchange/電子データ交換)などへの対応などが求められるようになったことが挙げられます。プラットフォームを構築することを決断しました。上での本格的な開発がスタートしました。選んだのにはいくつか理由があります。何より大きかったのがネットワークが充実していること。回線の太さは魅力的でした。万レコードにもなります。台細かく異なる部品が使われていますから、そうしたデータを安定して、スピーディに検索できることは導入の最低条件でした。月)のスパイクに耐えられるスケーラビリティも必要でした。ないエッジの立ったサービスが多く揃っていたことも決定を後押ししています。Engine(GKE)の存在が大きかったですね。それをフルマネージドで利用できます。具体的には新しいサービスのプロダクション環境を構築するのに、従来のオンプレ環境では機材調達からネットワーク設定までを含めて数週間かかっていたものが、約1時間でできるようになりました。開発時もバージョンアップ作業などを効率的に実施できるようになり、1日20回以上の頻繁なバージョンアップも可能になりました。駆使してマイクロサービス化。業界特有のノウハウが必要なものを国内3つの開発拠点で分散開発した上で、顧客管理や売上管理などは外部のベンダーに外注し、効率的にサービスを構築していったそうです。ベンダーに開放したいという狙いもあります。意識しない開発と運用をできるよう注意しています。詳しくないと開発できない、運用できないという状況は避けたかったんです。イメージをビルドして、開発環境であれば自動的にデプロイされるというようなかたちにしています。マスターやノードの管理をしなくて良いのも助かっていますね。おかげで開発効率がかなり上がっていると感じています。能動的なビッグデータ活用が可能になること。存在も大きかったそうです。「具体的にはログの解析・集計のほか、検索動向の分析などにも利用しています。検索されているということは、そこが故障しやすい箇所ということ。言えば、リコールの予兆とも言えます。技術なども駆使して、これをシステム上でサジェストする仕組みを用意し、利用者(修理工場)が顧客(修理依頼者)に早めの問題解決を提案するなどできるようにしました。クラウド移行以前もこうした方法論はあったものの、リソースが不足しており実現できていませんでした。大手自動車メーカーもすでにこうした取り組みを進めていると思いますが、ブロードリーフはそれをメーカーの壁を越えて横断的に行えるのが強みです。活用については、今後さらに推し進めていく予定。車の情報だけでなく、お客さまの特性も学習させ、入庫する前により適切なサジェストができるようにするなどといったことを考えています。お客さまとの電話内容などを自動的にテキスト化したりといったことも検討中です。年前の時点では不安もあったと祖慶さん、松本さんは当時をふり返ります。採用事例が少なかったため、可用性の点で若干の不安がありました。利用してみて、今は高い信頼性と安定感を備えたプラットフォームであることを実感しています。クラウドの時代ですから、それぞれの強みの部分を積極的に使っていくべき。マネージドなサービスが充実しているので、そうした点をより拡充していって欲しいですね。マネージドなサービスを積極的に活用していって、運用の負荷を下げていくことも考えて行きたいですね。任せて(笑)、自分たちがより開発に専念していけるのが理想です。Platform』によるブロードリーフ事業のクラウド移行。今後はグローバル展開も推進していきたいとのことです。「日本の自動車は世界中で走っています。マーケットは今後、ますます拡大していくことになるでしょう。ネットワークに期待しています。こちらをご覧ください。その他の導入事例はこちらをご覧ください。元に翻訳・加筆したものです。詳しくは元記事をご覧ください。強化学習(RL)は、ゲーム、チェス、ロボティクスですばらしい成果をあげており、それとともに機械学習コミュニティでの人気も高まっています。アルゴリズムを実行する方法を紹介しました。Engine(GKE)で実行する方法を紹介します。進化戦略は、進化の考え方に基づいた最適化テクニックです。代わってさまざまな難題に対処するものと見なされるようになっています(1、2)。メリットとしてあげられます。年代に開発され、容易にスケールする点がメリットとして知られていました。アルゴリズムの最高性能に匹敵する結果を出せることが実証されたのは、つい最近のことです。ラーニング分野のリサーチャがますます増えています(1、2、3、4、5)。アルゴリズムをスケーリングする優れたインフラストラクチャを構築すれば、この領域はさらに進展するということは判明していましたが、大規模システム開発に明るい研究者は多くはいません。テクノロジーが生み出され、専門のエンジニアでなくても簡単に分散環境によるソリューションを構築できるようになりました。活用してスケーラブルな進化型アルゴリズムをデプロイする仕組みの実例を紹介します。試す際の参考にお役立てください。フレームワークが利用可能です。分散コンピューティングの目的とは異なります。一種のブラックボックス最適化です。例として、下の図の左側に示す地形に立っていることを想像してみてください。あなたのタスクは、目隠しをして最も低い場所へ向かうことです。あなたは複数の魔法の玉を持っており、それを介してしか周囲の状況を知ることができません。Wikipedia)大ざっぱに言えば、勾配ベースのアルゴリズムでは、玉を落として転がしながら行く先を決めるというステップを経ていきます。玉の動く速さを見て、一番速く転がる方向(勾配が一番急な方向)に進みます。左側の地形であれば、このルールに従って何度か玉転がしを繰り返せばゴールにたどり着けます。同じやり方を右側の地形で試すとどうなるでしょうか。山に囲まれた谷底にはまってしまい、目標は達成できないでしょう。アプローチはこれとはまったく異なります。最適化のステップごとに、複数回の試行を行います。高い適応度(fitness)を示した設定に基づいて進み先を決めます(適応度とは、試行がどのくらい優れているかを測る指標です。上図の地形の例では地面の高さがそれに当たり、低いほど適応度が高いことになります。言えば試行で得られる累積報酬に当たります)。この過程を通じて、適応度が低い試行は取り除かれ、適応度がもっとも高いものだけが生き残ります。これが進化の過程に似ているため、進化戦略という名前が付けられています。仕組みを説明するなら、各ステップで玉を落として転がす代わりにピストルに玉を込めて数発を発射し、いくつかの玉を周囲に散りばめる、ということになります。それぞれの玉が地面に打たれた時点で位置と高度がわかるので、ステップを繰り返すうちに高度が低いと推定される場所に徐々に移動していけます。この方法は、図の左右どちらの地形にもうまく働きます(高い山の向こうにも届く強力なピストルを使うことを想定します)。この方法なら、複数回の試行を同時に実行することで最適化を簡単に高速化できます。えるならピストルの代わりに散弾銃を使うようなものです。基本的な考え方と仕組みを説明しました。興味がある方は、筆者によるブログ記事により詳しい説明が記載されていますので、ぜひ読んでみてください。コンテナ化したワークロードとサービスを宣言的な設定や自動化を活用して管理するためのプラットフォームです。年にオープンソース化されました。応用を中心に説明します。アーキテクチャで実装できることが分かるかと思います。この場合、ある設定で試行するようコントローラがワーカーに命令し、ワーカーから戻ってきた結果に基づいて最適化を進める、という処理を繰り返し行います。実行する方法の定義と説明を書いてみましょう。今回は、銃や玉は使いません。その代わり、携帯電話で誰かに連絡して玉を発射してもらえます。その前に、何を実行したいのかを具体的に伝えなければなりません(この例では、玉を発射してもらうことです)。プロバイダへのメモ」に仕様を記述します。記録のため「自分用のメモ」も準備します。楽しい仕掛けが動き始めます。私はこれから、私がどこにいるか、いくつの玉を撃ちたいか、どこに向けて撃ちたいかを指示します。そこにクルマを移動し、玉を撃ち、玉が当たった位置と高さを教えてください。実行の説明やるべきこと自分へ、ゲームが終わるまで、以下を繰り返し実行する。プロバイダへのメモにある「やるべきこと」の部分をワーカーのプログラムとして記述し、自分用のメモの部分をコントローラのプログラムとして記述します。イメージを作成します。プロバイダとなり、ワークロードと呼ばれる仕様を受け取り。イメージとリソースなどのいくつかのシステム設定で構成されます。個のノードに相当します。用語ではポッドと言います)の数を表します。これらのポッドを用意する責任を持ちます。人の射撃手を用意できても、個々の射撃手と直接やりとりして結果を集めたりするのは面倒な作業です。中には、病気で休んだ人(マシンの再起動により動作していないコンテナ)が、あなたの知らない別の人(新しく起動したコンテナ)に仕事を引き継いでいるかもしれません。ワークロードをサービスとして公開し、コントローラとワーカーの連絡窓口とします。サービスは関連するポッドを取りまとめているので、いつでもポッドに取り次いでくれるうえ、負荷の分散も可能です。使うと、高可用性(希望どおりの数のポッドを確実に実行可能)と大きな拡張性(実行時にポッドを追加・削除可能)が得られます。理想的なプラットフォームだと私たちは考えています。導入することで、さらに優れたプラットフォームが実現可能です。実行する手順を見ていきましょう。コードと実装手順はこちらでアクセスできます。アーキテクチャを採用します。各ワーカーは独立したサーバーで構成され、コントローラがクライアントとなります。インターフェース(MPI)などの他の選択肢ほど高効率ではありません。データのパッケージングが簡単で耐障害性も高いため、クラウド環境ではよく使われています。スニペットに、メッセージの定義を示します。ロールアウトから返される適応度です。Adaptation(CMA)です。アルゴリズムを追加したり、設定を変更して独自の環境でアルゴリズムを試したりすることも簡単です。定義されたインターフェースに従った実装であれば他のコードと合わせて実行できるはずです。Platform(GCP)で動作するクラスタが必要です。こちらの手順に従ってクラスタを作成します。この例では、次のコマンドと設定を使ってクラスタを作成しましたが、必要に応じて変更しても構いません。