Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

mockmockのSORACOM連携機能を試してみた

f:id:acro-engineer:20190701141735p:plain:w550

こんにちは、IoTデータ分析プラットフォーム「Torrentio」開発者のmiuraです。

2019年7月2日にリリースされたばかりのmockmockのSORACOM連携機能について試してみましたのでご紹介します。

■mockmock SORACOM連携機能とは

https://mock-mock.com/ja/

mockmockは、クラウド上に仮想デバイスを作成し、開発中のサーバーに疑似データを届けられるサービスです。

そのmockmockのデータ送信方法に、今回新たにSORACOMとの連携が出来るようになりました。
これにより、実デバイス(実環境)/仮想デバイス(mockmock環境)のどちらでもSORACOMを通じてデータを送信することになるため、ユーザー環境にそれぞれの環境構成を用意する必要がなくなります。

f:id:acro-engineer:20190701135939p:plain:w600

SORACOMのサービスからデータを受け取れるか確認するには実際にデバイスを用意する必要がありました。
私も自社サービスの開発過程で検証する際に、SORACOM SIMを挿した実機を用意して試験を行なっていましたが、試験の度に実機を用意するのが面倒だと思っていました。
しかし、この新機能を使えばmockmockで生成した疑似データを使って確認することが出来ます。

では、さっそくmockmockの新機能を試していきましょう。

1. 試してみる前に

今回はmockmockの新機能SORACOM連携機能とIoTデータ分析プラットフォーム「Torrentio」との連携を行います。

https://www.site.torrentio.tech/torrentio/

Torrentioとは弊社(アクロクエストテクノロジー株式会社)が開発しているサービスです。
SORACOM Beamで利用できるREST-APIhttps)や、SORACOM Funnel Adapterに対応しており、デバイスからのデータを収集・分析することができるサービスです。
今回はデバイスから直接ではなく、mockmockからSORACOM経由でTorrentioにデータを送ることを試してみます。

2. mockmockの環境を作成する

2-1. SORACOMタイプのプロジェクトを作成する

プロジェクト一覧タブからプロジェクト作成ボタンを押して新規作成します。

f:id:acro-engineer:20190628173705j:plain:w500

2-2. グラフバリュージェネレーターを作成する

サイドメニューの「グラフ」の+ボタンから新規作成を行います。
グラフバリュージェネレーター名を「temperature」と登録し、以下の設定を入力して更新します。

f:id:acro-engineer:20190628171613p:plain:w500

2-3. データテンプレートを作成する

サイドメニューの「データテンプレート」の+ボタンから新規作成を行います。
JSON形式で送信データの形を登録すると、パースされてテーブル形式で表示されます。
また、キーごとに編集が出来るので、生成タイプを変更します。

f:id:acro-engineer:20190628171725p:plain:w500

2-4. mockを作成する

まず、サイドメニューの「mockグループ」の+ボタンから新規作成を行います。

f:id:acro-engineer:20190628172509p:plain:w500

次に、新規作成されたmockグループのmockステータスタブに移動し、mockステータスを新規作成します。

f:id:acro-engineer:20190628172529p:plain:w500

最後に、mockグループのmock管理タブに移動し、mock一覧にあるmock作成ボタンを押して新規作成します。
その際、mockごとにidを割り当てられるので、12345など適当な値を入力し、登録してください。

3. SORACOM連携の準備をする

3-1. soracom-cliをインストールする

mockmockで自動で生成されるsoracomデバイスグループに設定を行うためにsoracom-cliを準備します。
soracom-cliのGitHubリポジトリから「soracom_0.4.4_windows_amd64.zip」をダウンロードします。
ダウンロードしたzipファイルを解凍し、「soracom.exe」を適当なフォルダに配置してください。
(必要であれば、PATHを通して実行できるようにしてください)

3-2. soracom cliのprofileを設定する

プロジェクト設定画面にてSORACOM認証キー一覧の新規作成ボタンを押して、SORACOM認証キーID(AuthKeyId)とSORACOM認証キーシークレット(AuthKey)を取得します。

f:id:acro-engineer:20190628180409p:plain:w500

以下のコマンドを実行してAuthKeyIdとAuthKeyを入力し、soracom-cliのprofileを設定します。

$ soracom configure --profile mockmock
--- SORACOM CLI セットアップ ---
/Users/yourname/.soracom ディレクトリがなければ作成し、そこにファイル 'mockmock.json' を作成します。

カバレッジタイプを選択してください。

1. Global
2. Japan

選択してください (1-2) > 2


認証方法を選択してください。

1. AuthKeyId と AuthKey を入力する(推奨)
2. オペレーターのメールアドレスとパスワードを入力する
3. SAM ユーザーの認証情報を入力する(オペレーターID、ユーザー名、パスワード)

選択してください (1-3) > 1
authKeyId: <JSONファイルに書かれたAuthKeyIdを入力する>
authKey: <JSONファイルに書かれたAuthKeyを入力する> ← 入力内容は非表示となります。


以上でSORACOMと連携するための下準備は完了です。
それでは実際にmockmockと今回対応されたSORACOMのサービス「Beam」と「Funnel」との連携、おとびTorrentioへのデータ送信を行っていきます。

4. SORACOM Beamと連携する

4-1. REST APIのエンドポイントを作成する

TorrentioにてデータをREST APIで受け付けられるようにエンドポイントを作成します。
エンドポイント一覧画面の新規作成ボタンを押し、各項目を選択して作成します。
その後、作成したエンドポイントの更新画面に行き、以下の値をメモしておきます。

  • エンドポイント
  • APIキー

f:id:acro-engineer:20190628182310p:plain:w500

4-2. サービスを作成する

Torrentioにてデータを格納する場所である「サービス」を作成します。
サービス一覧画面の新規作成ボタンを押し、サービス名とエンドポイントを選択して作成します。

f:id:acro-engineer:20190628182328j:plain:w500

4-3. soracomデバイスグループにSORACOM Beamを設定する

SORACOM Beamの設定となるbeam.jsonを準備します。

[
  {
    "key": "inventory://beam.soracom.io",
    "value": {
      "enabled": true,
      "name": "Torrentio",
      "addEquipmentHeader": false,
      "addSignature": false,
      "addSubscriberHeader": false,
      "customHeaders": {
        "x-api-key": {
          "action": "append",
          "headerKey": "x-api-key",
          "headerValue": "<APIキー>"
        }
      },
      "skipStatusCode": false,
      "useClientCert": false,
      "useClientCredentials": false,
      "addDeviceIdHeader": false,
      "destination": "<エンドポイント>"
    }
  }
]

mockmockで生成されたsoracomデバイスグループに対して、以下のコマンドを実行します。

$ soracom groups put-config  --group-id <デバイスグループID> --namespace SoracomBeam --body @beam.json --profile mockmock

4-4. テスト送信をしてみる

mockステータス画面にてテスト送信を実行します。
レスポンスコードが200という結果になり、データをTorrentioへ送信することができました。

f:id:acro-engineer:20190628191414j:plain:w500

Torrentioのサービスコンソールにてデータが来ていることも確認できます。

f:id:acro-engineer:20190628190915j:plain:w500

5. Funnelと連携する

5-1. SORACOM Funnel対応のエンドポイントを作成する

SORACOM Funnelと連携できるTorrentioのエンドポイントを作成します。
エンドポイント一覧画面の新規作成ボタンを押し、種類に「SORACOM Funnel」を選択して作成します。
その後、作成したエンドポイントの編集画面に行き、以下の値をメモしておく。

  • テナントID
  • エンドポイントID
  • APIキー

f:id:acro-engineer:20190628183514p:plain:w500

5-2. サービスに紐づくエンドポイントを変更する

「4-2. サービスを作成する」で作成したサービスのエンドポイントを変更します。

f:id:acro-engineer:20190628185457p:plain:w500

5-3. soracomデバイスグループにSORACOM Funnelを設定する

SORACOM Funnelで使用する認証情報をSORACOMに登録するためにcredential.jsonを準備します。

{
  "type": "api-token-credentials",
  "description": "for_mockmock",
  "credentials": {
    "token": "<APIキー>"
  }
}

mockmockのプロジェクト設定のSORACOM 認証情報ストアにてSORACOM 認証情報IDを新規作成する。

f:id:acro-engineer:20190628184513p:plain:w500

以下のコマンドを実行して認証情報を登録します。

$ soracom credentials update --credentials-id <SORACOM 認証情報ID> --body @credential.json --profile mockmock

SORACOM Funnelの設定となるfunnel.jsonを準備します。

[
    {
      "key": "contentType",
      "value": "json"
    },
    {
      "key": "credentialsId",
      "value": "<SORACOM 認証情報ID>"
    },
    {
      "key": "destination",
      "value": {
        "provider": "acroquest",
        "resourceUrl": "torrentio",
        "service": "torrentio",
        "tenantId": "<テナントID>",
        "endpointId": "<エンドポイントID>"
      }
    },
    {
      "key": "enabled",
      "value": true
    }
  ]

mockmockで生成されたsoracomデバイスグループに対して、以下のコマンドを実行する。

$ soracom groups put-config  --group-id <デバイスグループID> --namespace SoracomFunnel --body @funnel.json --profile mockmock

5-4. テスト送信をしてみる

mockステータス画面にてテスト送信を実行します。
SORACOM Funnelを経由してのTorrentioへのデータ送信が出来ることが確認できました。

f:id:acro-engineer:20190628192307p:plain:w500

5-5. mock起動

mock管理画面のmock一覧にある作成したmockの操作メニューから起動を選択します。
mockmockで生成されたデータが定期的にTorrentioに蓄積されていきました!

f:id:acro-engineer:20190628193324p:plain:w500

まとめ

SORACOMのサービスと連携させた際に、実際のデバイスを用意してデータを送信する必要がありました。
しかし今回のmockmockのSORACOM連携により、実際のデバイスがなくともSORACOMのサービスを介したデータ送信を試すことが出来るようになります。
また、実際のデバイスを使う際には切り替えるだけでデータを送信することが出来るので、適用が楽になります。
SORACOMのサービスとの連携がぐんとやりやすくなった新機能でした。

Acroquest Technologyでは、キャリア採用を行っています。

  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
モノリシックなアプリケーションをマイクロサービス化したいエンジニア募集! - Acroquest Technology株式会社のWeb エンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

雑誌「Interface」で量子コンピュータの連載を始めました

こんにちは~。
ツカノ@snuffkinです。

6/25(火)に発売されたCQ出版社さんの雑誌「Interface」2019年8月号から、量子コンピュータ入門の連載を始めました!
連載のタイトルは「動かしながら始める量子コンピュータです。
f:id:acro-engineer:20190625071903j:plain:w200

連載を始めた背景

量子コンピュータについて興味を持ち、本や雑誌記事を読んだ方もいらっしゃると思います。
ただ、次のような感想を持つ方もいるように思います。

  • ビジネス書だと量子コンピュータの雰囲気は書いてあるが、理解した気になれない。
  • 専門書を手に取ってみたけれど、数式が難しくて理解できない。

この連載では「普通のプログラマ」の方に向けて、手計算やPythonで動作を確認しながら理解する内容にしました。

内容は次のサイトからちらっと確認できます。
interface.cqpub.co.jp

連載を読んで量子コンピュータにもっと興味が出てきた方には、次の本もおススメです😁
「高校数学からはじめる量子コンピュータ
snuffkin.booth.pm

それではみなさん、量子コンピュータを楽しんでいきましょう!
(Twitter等で感想のフィードバックもあると嬉しいです)

P.S. AI猫カメラも面白い

同僚が「Interface」に連載している「育てるラズパイAI 物体認識カメラ」も面白いです。
猫好きの方は、次のTwitterアカウントをフォローすると癒されるかと思います。
twitter.com

Acroquest Technologyでは、キャリア採用を行っています。


  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

Kaggle Masterと働きたい尖ったエンジニアWanted! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

Microsoft de:code 2019に参加しました!

こんにちは!フロントエンドエンジニアの宮坂です。

5/29(水)、30(木)の2日間 Microsoft de:code 2019 に参加してきました!

f:id:acro-engineer:20190603014958j:plain:h250
www.microsoft.com
年に一度のテクニカルカンファレンスで今年で6回目ということですが、私は今年が初参加。驚きがたくさんでした。

「今すぐ使えるテクノロジ」と「未来を創るテクノロジ」を体感する 2 日間ということで始まった2日間。
14個のセッションを受けてきましたが、その中で特に印象的だったセッションについて、紹介します。

全体を通しての感想

Microsoftの最新技術や未来のテクノロジーを体感できただけでなく、エンジニアであれば誰もが知っている著名人もたくさん来ており、刺激的な2日間でした。
また、初日の最後には盛大はパーティがあり、なんとスペシャルゲストとしてサッカー選手の本田圭佑氏が来るなど、de:codeのスケールの大きさを感じました。

f:id:acro-engineer:20190602221347p:plain:w600
参加者パーティに本田 圭佑選手が登場
技術的な面では、私自身、Webアプリの開発に携わることが多いため、Azure ServerlessでのWeb開発周りが特に勉強になりました。さまざまな切り口からグッドプラクティスを聞くことができ、早速実践で活用しようと思っています。

紹介するセッション

1. 基調講演
2. そのオンプレの DB、どうやって Azure SQL Database へ移行しますか? ~Benesse 進研ゼミの事例~
3. Vue.js と Firebase, AKS でのクラウドネイティブなスマホアプリの作り方 + ML Ops による AI モデルの作り方
4. Azure Serverless を活用したリアルタイム Web のすべて
5. エンジニアの人生設計 ~どのようにキャリアを描いていけばよいのか~

1. 基調講演

基調講演はオンデマンド配信され、以下で公開されています!Microsoftが描いている未来について分かるだけでなく、開発者として嬉しい多数の新機能についてもデモを交えて紹介されています。
aka.ms

平野 拓也氏(日本マイクロソフト株式会社 代表取締役 社長)

Microsoftがもたらすイノベーションについて、日本企業でのMicrosoft製品の活用事例を交えながらの紹介や他社との協業によって近い未来、何を実現しようとしているのかが紹介されています。Microsoftが今何に力を入れているのかという大きなビジョンが分かる内容でした。
またMicrosoftとパートナーシップを結んだアセントロボティクス株式会社のCEO 石﨑 雅之氏による自動運転技術に関する紹介もあり、興味深い内容でした。

ジャレッド スパタロウ氏(マイクロソフト コーポレーション コーポレートバイスプレジデント Microsoft 365)

ITにより、どのように働き方を進化させ、生産性をあげているのか、という点について、デモを交えて紹介されました。
Windowsで開発をしている人にとっては画期的なWindows Subsystem for Linux(WSL)2の紹介を始め、Offにce 365の進化やChroniumエンジンを用いたEdgeの発表、Teamsを用いたチーム開発についてなどの最新動向を聞け、面白い内容でした。

ジュリア ホワイト氏(マイクロソフト コーポレーション コーポーレートバイスプレジデント Azure)

Azure DevOpsを始めとした、Azureの新機能について、多数の紹介がありました。
中でもGitHubとの連携は印象的で、GitHubとAzure DevOpsの連携、GitHubとAzure Active Directory 同期サポート、Visual Studio + GitHub Enterprise 統合サブスクリプションなど、日本のデファクトスタンダードが移り変わっていくことを予期させる内容でした。

井上 章 (チャック)氏によるVisual Studio 2019を用いたDevOpsのデモもあり、開発者にとっては内容の濃い楽しい発表でした。

アレックス キップマン氏(マイクロソフト コーポレーション テクニカルフェロー)

HoloLens2のすごさを「没入感」「快適性」「価値創造時間」の3つの視点から紹介されたのですが、素直に驚きました。
アイトラッキングという目の動きをキャッチする技術や、3D空間のものを手で掴んで動かせる技術が特に印象的でした。
基調講演の動画の2:32:00ごろからデモがありますので、是非見てみてほしいです。

2. そのオンプレの DB、どうやって Azure SQL Database へ移行しますか? ~Benesse 進研ゼミの事例~

www.microsoft.com

ベネッセがオンプレミスで運用していたOracle DatabaseをAzure SQL Databaseに移行することに成功したという内容でしたが、そこから学べることが多くありました。

EOLの悩みからの脱却、ランニングコストの軽減、運用の負荷軽減ということをモチベーションに実施を決めた移行。
移行時の不安としては以下のポイントがあったようです。
1. SQLをどれだけ修正する必要があるのか?
2. Azureで性能が出るのか、負荷に耐えられるのか?
3. 大量のデータ移行(4TB)ができるのか?

まず、私の中で驚きだったのは、1で手動修正が必要だったSQLは全体の2%だけだったということ。SQL Server Migration Assistant (SSMA)による自動コンバートの精度が良く、98%のSQLは自動コンバートのままで問題にならなかったようです。

2の性能についても問題なく、オンプレサーバで35台だった全体構成を9台で安定運用できており、ランニングコストは1/7。障害0件。素晴らしい...。
3は初回移行をBULK INSERTし、差分移行はSQL Server Integration Services (SSIS) を利用して実現したようです。

私が携わっている案件でもオンプレミスでのDB運用をしているものがあり、こういう先行事例は非常に勉強になりました。
発表者の方々、ありがとうございました。

3. Vue.js と Firebase, AKS でのクラウドネイティブなスマホアプリの作り方 + ML Ops による AI モデルの作り方

  • 横山 依子氏(株式会社 FIXER)
  • 鈴木 章太郎氏(株式会社 FIXER / 政府CIO補佐官)
  • 市岡 由偉氏(株式会社 FIXER)
  • 千賀 大司氏(株式会社FIXER)

www.microsoft.com

Azureという意味でより印象的だったのは「ML Ops による AI モデルの作り方」。
手書き数字の自動判定について、自前で学習を組んだ場合とAzureのAutomated Machine Learningを用いた場合とでの精度の比較結果が紹介されました。
Automated Machine Learningを使うことで、精度が90.59%から99.22%に上がったそうです。
Automated Machine Learningの特徴は、分類器のアルゴリズムの選定からハイパーパラメーターのチューニングまで自動で行ってくれることということで、私も実際に触ってみようと思います。

以下に発表内容がまとまっていますので、是非見てみてください。
tech-blog.cloud-config.jp

4. Azure Serverless を活用したリアルタイム Web のすべて

www.microsoft.com
しばやんさんとチャックさんのぶっちゃけトーク感がまずもって面白かったのですが、内容も非常に充実していて、AzureのServerlessでWebアプリケーションを作ろうと思っている人は、みんな見たほうが良い内容だと思いました。

リアルタイムなWebアプリを実現する上で鍵になる以下の3つのポイントについて、Azureでのベストプラクティスが紹介されました。
1. イベントドリブン
2. クライアントへのPush型通信
3. スケーラビリティを考慮した設計

Azure Event Grid、Azure Cosmos DB(Change Feed)、Azure Logic Apps、Azure Functions、Azure SignalR ServiceといったAzureサービスの特徴と、これらを用いてスケーラビリティの高いアプリケーションにするためのポイントが良く分かりました。

また、これらのサービスをフル活用してチャックさんが作成したリアルタイムWebアプリのデモがありました。しばやんさんもこのアーキテクチャを絶賛!そのデモアプリの構成図が以下です。

f:id:acro-engineer:20190530153537j:plain:w600
チャックさんが作成したデモアプリのアーキテクチャ

この構成図は今後も何度も見返すことになりそうです。

5. エンジニアの人生設計 ~どのようにキャリアを描いていけばよいのか~

www.microsoft.com

de:codeの最終セッションでしたが、圧倒的な超満員。ステージ前、通路まで含めて人で埋め尽くされました。
一番見えにくいのは、実は自分自身のこと。「自分はどうありたいか?」ということを自分に語りかけ続けることがキャリアを考える上で、そして幸せになるために重要なことである、というメッセージをいただきました。

エンジニアにとって、これ以上にないほど面白い世の中の流れが来ていることは、このde:codeを通しても改めて感じました。
だからこそ、自分自身がこうありたい!ということに対して素直に挑戦していかないと勿体無いですね。

最後に

様々な最新技術や事例にふれられた充実した2日間でした。
やはりAzureを用いたサーバレスの流れは強く、実案件で使いながら今後もキャッチアップしていきたいと思います。
また、上記では紹介しきれていませんが、de:codeはセッションだけでなく、Expo会場に多くの展示やタッチ&トライの機会も用意されておりました。
エキサイティングなde:codeを主催してくれたMicrosoftと登壇者の方々に感謝です。ありがとうございました!

Acroquest Technologyでは、キャリア採用を行っています。

  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

モノリシックなアプリケーションをマイクロサービス化したいエンジニア募集! - Acroquest Technology株式会社のWeb エンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

自前の機械学習プログラムをSageMaker Python SDKを用いてAmazon SageMaker上で動かす

こんにちは。
3年目エンジニアの片岡@kamesansansansです。
最近AWS機械学習サービスであるSageMakerを使っています。
SageMakerは公式サンプルが充実していて、色々な機械学習を簡単に動かすことができます。
ただ、一通りサンプルを動かして、いざ自前の機械学習プログラムを動かそうと思うと、調べても資料があまりない!ということに気づきます。
試行錯誤しつつ自分で動かして、分からず結構苦労したので、そのノウハウをここにまとめました。

方法

SageMaker上で自前のモデルを作成する方法は2つあります。
①SageMaker Python SDKを使う
②自作のDockerコンテナを利用する

②は過去にこのブログで解説されているので、今回は①について解説します。
 http://acro-engineer.hatenablog.com/entry/2018/09/05/120000

①について、
PythonSDKを使って少しコードを変えることで自前のコードをSageMaker上で動かすことができます。
ChainerやTensorflowなど各フレームワークごとにやり方が決まっています。
https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/frameworks.html
今回はChainerのコードをSageMaker上で動かしてみました。

大まかな流れ

下記の3つを準備して実行します。
1)学習させるデータ
2)学習を行うPythonソースコード
3)学習用のインスタンスを立ち上げ学習を起動するJupyter notebook

Chainerのexampleにあるimagenetを使った画像分類のソースコード(詳細は後述)を例に今回は説明します。
データセットはimagenetでは重いので、Caltech101を入力の型をあわせて使用しました。

1)学習させるデータ

まずはCaltech101のデータセットの準備です。ここはSageMaker関係ない一般的な部分ですね。
下記リンクの「画像の用意、教師データとテストデータ」を参考にデータのダウンロード、リサイズ、meanファイルの作成を行います。
https://qiita.com/rerere0101/items/fde1661df4a26f1d0626

下記のようなディレクトリ構成になるはずです。

(親ディレクトリ)   
 ├train.txt   
 ├test.txt 
 ├lobel.txt 
 └caltech101 
  ├accordion 
    image_0001.jpg 
    … 
  ├airplanes 
    image_0001.jpg 
     … 
  …


~~~
(下記は本データセットをSageMaker上で使用するときの特有の手順)
train.txt, test.txtは画像パスを下記のように変更します。
train.txtの中身

 /opt/ml/input/data/train/caltech101/accordion/image_0001.jpg 0 
 /opt/ml/input/data/train/caltech101/accordion/image_0002.jpg 0 

test.txtの中身

 /opt/ml/input/data/test/caltech101/accordion/image_0043.jpg 0 
 /opt/ml/input/data/test/caltech101/accordion/image_0044.jpg 0 

★注意点
 <画像のパス> <正解ラベル>
 という並びになりますが、データの呼び出しはS3からSageMakerインスタンスに呼び出された後に行われるため、パスはSageMakerインスタンスに置かれたときのパスを指定します。
 
 S3に置いた画像データセットは/opt/ml/input/data/以下にコピーされます。
 学習用の画像は/opt/ml/input/data/train, 評価用の画像は/opt/ml/input/data/test以下に置かれます。

 SageMakerインスタンスにどのようにコピーされるかの構成はこちらを参照ください。
  http://acro-engineer.hatenablog.com/entry/2018/09/05/120000
~~~


このセット(train.txt, test.txt, caltech101ディレクトリ)をS3に配置してください。

2)学習を行うPythonソースコード

Chainerのexampleにある下記のソースコードを使用してSageMaker対応を行いました。
https://github.com/chainer/chainer/blob/master/examples/imagenet/train_imagenet.py
名前はtrain_imagenet.pyですが、入力の型を合わせることによって、imagenet以外のデータセットでも使用することができます。
ただし、二箇所変更が必要です。

★変更箇所① S3のパスを学習を起動するJupyter Notebook側で指定するので受け口を作ります。
 下記をargparseで指定しているところに追記します。

    parser.add_argument('--output_data_dir', type=str, default=os.environ['SM_OUTPUT_DATA_DIR']) 
    parser.add_argument('--model-dir', type=str, default=os.environ['SM_MODEL_DIR']) 
    parser.add_argument('--train', type=str, default=os.environ['SM_CHANNEL_TRAIN']) 
    parser.add_argument('--test', type=str, default=os.environ['SM_CHANNEL_TEST']) 

次の引数を指定できるようにします。
・output_data_dir グラフ等生成物の出力ディレクト
・model-dir モデルの出力ディレクト
・train train画像のディレクト
・test test画像のディレクト

これに伴い、ソースコード内で同様の働きをしているもの(元々ソースコード内にあるtrainやval等)は書き換えます。

★変更箇所② データセットを指定する部分を変更します。
最初にargs.trainを呼び出す前(165行目より前)、に下記を入れます。

    # data setting 
    train = args.train + "/train.txt" 
    test = args.test + "/test.txt" 

学習を起動するJupyter NotebookではS3のバケットまでしか指定できないので、それ以降のファイル指定・操作は ソースコード側で行う必要があります。
ソースコード内でargs.trainやargs.test(元々はargs.val)で渡しているものはそれぞれtrain, testに書き換えましょう。

3)学習用のインスタンスを立ち上げ学習を起動するJupyter notebook

 https://github.com/awslabs/amazon-sagemaker-examples/blob/master/sagemaker-python-sdk/chainer_cifar10/chainer_single_machine_cifar10.ipynb
 上記を参考に作成します。

学習用のノートブックインスタンスには、以下のように配置します。
呼び出される側のプログラムはすべてsrcフォルダの中に入れておいてください。

学習起動Jupyter notebook 
src/
 └学習を行うPythonのソースコード

学習起動Jupyter notebookには下記のように書いていき、順に実行していきます。

sagemaker.session()の作成と、ロールの取得を行います。

import sagemaker
from sagemaker import get_execution_role
sagemaker_session = sagemaker.Session()

# Get a SageMaker-compatible role used by this Notebook Instance.
role = get_execution_role()

バケットとその後のパスを指定します。
imagenet_sagemaker以下に学習用データを置きました。

bucket = '<your-bucket-name>'
prefix = 'sagemaker/imagenet-chainer'
S3_INPUT_PATH = 's3://{0}/{1}/'.format(bucket, prefix)
print(S3_INPUT_PATH)

estimaterの作成を行います。
呼び出すプログラムをentry_pointで、プログラムを入れたフォルダをsource_dirで指定しました。
source_dirで指定したフォルダがそのままSageMakerインスタンスにコピーされます。
(なので、ソースコード以外にもSageMakerインスタンスにコピーしたいものがあればsource_dirに入れておけば、一緒にコピーすることができます。)
train_imagenet.py内で元々指定するようになっている引数はhyperparametersで指定します。

import subprocess
from sagemaker.chainer.estimator import Chainer

instance_type = 'ml.c4.xlarge'

chainer_estimator = Chainer(entry_point='train_imagenet.py', role=role, 
                            source_dir="src", 
                            train_instance_count=1,  
                            train_instance_type=instance_type, 
                            framework_version='5.0.0', 
                            hyperparameters={'arch': "mobilenet"}) 

学習を実行します。

train_input = "s3://20190225-sagemaker/sagemaker/imagenet-chainer/" 
test_input = "s3://20190225-sagemaker/sagemaker/imagenet-chainer/" 
chainer_estimator.fit({'train': train_input, 'test': test_input}) 

これで自前の機械学習コードをSageMaker上で動かすことができました。

ポイント

①データはすべてS3にあげる。パスを指定する場合はSageMakerインスタンスにコピーされた後の構成を意識する
②学習を行うソースコードはSageMakerの仕様に合わせる。
③ノートブックインスタンスからSageMakerインスタンスに送る学習用ソースコードは別ディレクトリにまとめておく。

まとめ

自前のソースコードをSageMaker上でPython SDKを用いて動かしてみました。
SageMaker特有の仕様もあり、最初は分からない部分もありましたが、分かってしまえば簡単に実行できるものだな、と思います。
この記事ではChainerを例に説明しましたが、ポイントを押さえて書くことで、他のフレームワークでも応用できると思います。

Acroquest Technologyでは、キャリア採用を行っています。


  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

Kaggle Masterと働きたい尖ったエンジニアWanted! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

Elastic{ON} TOUR Tokyo 2019に参加してきました!!

こんにちは。ノムラです。
昨日虎ノ門でおこなわれたElastic{ON} TOUR Tokyo 2019に参加してきました!
www.elastic.co

Elastic{ON} Tourは、世界各地を回って行われるElastic最大のカンファレンスで、
今回も様々な最新情報や、ユーザー事例など盛りだくさんでした。

また、アクロクエストはスポンサーとしてブース出展させていただきました!

イベント概要

大まかなコンテンツは下記の通りです。

  • 基調講演
  • 午前のセッション
    1. Elastic Stackの進化
    2. ロギング、メトリック、APM:The Operations Trifecta
    3. _searchをシンプルに:Elastic App Search
  • ランチ(LT)
  • 午後のセッション
    1. Elastic Stackを使ったエンドツーエンドのセキュリティ分析
    2. Canvasで作成するリアルタイムなインフォグラフィック
    3. アーキテクチャーのベストプラクティスと"落とし穴"
    4. 機械学習ディープダイブ
  • ユーザー事例紹介
    1. Elasticを利用したリコーグループのIT基盤の見える化
    2. 水環境の持続を支えるプラットフォーム Water Business Cloudにおける活用と今後展開
  • クロージング
    1. Elastic サポート徹底活用術
    2. 閉会&ハッピーアワー

この中から個人的に面白い!と思ったものをいくつか紹介していきたいと思います。

基調講演

このパートは大まかには下記の3点

  1. 各種ソリューションの話
  2. Cross Cluster Search(CCS)、Cross Cluster Replication(CCR)の話
  3. Security機能の一部がBASICライセンスで利用可能になった話

が中心でした。

各種ソリューションの話

ここでのソリューションとは、Elastic社が各ユースケース毎に提供している機能、または追加アプリケーションのことです。
Logs、Infra UI、APM等のViewをKibanaに一元化することで、Elasticsearchの主要なユースケースであるログ分析を統合的に可視化できるようになり、「Observability」が高くなったという話でした。
個人的には、以前Logs + Infra UIのソリューションがあれば、と思うことがあったためはやくバージョンアップして効果を実感してみたいと思いました。

Cross Cluster Search(CCS)、Cross Cluster Replication(CCR)の話

複数クラスタをまたいで検索することが可能なCross Cluster Search(CCS)と、別クラスタにデータをレプリケーションするCross Cluster Replication(CCR)についての話でした。

機能の概要や、想定するユースケースについて、Elasticsearchの松本氏がデモを交えてプレゼンしました。

CCRについては以下のブログが詳しいです。
www.elastic.co

今までは1つの大規模なクラスタですべてのユースケースに対応する必要がありました。
それがCCS、CCRの実現によりユースケース毎にクラスタを分割することが可能になります。

その中で、必要に応じてクラスタ間を横断で検索することもできるようになりました。

Security機能の一部がBASICライセンスで利用可能になった話

6.8または7.1以降ではSecurity機能の一部がBASICライセンスで利用可能になりました。
とくに認証機能はかなりニーズのある機能なので嬉しいです。

_searchをシンプルに:Elastic App Search

App Searchは、Elastic CloudのSaaS製品群のひとつで、検索エンジンをカスタマイズして簡単に実装することができます。
UIが非常に直感的で、同義語の設定を画面からおこなえるなど、拡張性も高い印象です。

この発表では特に検索スコアチューニングがGUI上から簡単に試行錯誤できるところに魅力を感じました。
検索アプリのシステム構成によってはスコアチューニングの度にアプリのビルドが必要になる場合があり、試行錯誤のハードルが高いことがあるためです。

LT

ランチ時間には、Elastic Certified Engineerである吉岡がLTをおこないました。
タイトルは「『Elastic Stack導入による検索高速化』~爆速を実現するための3つのポイント~」です。
[f:id:acro-engineer:20190530224149p:plain:w800

大盛況でした。やはり「検索を高速化する」というのは、課題感として持っているかたが多かったように思います。

Canvasで作成するリアルタイムなインフォグラフィック

Canvasの概要については、Kibana Canvasを使ってみた - Taste of Tech Topicsの記事をご参照ください。

Kibanaの創始者であるラシッドさんの発表でした。
f:id:acro-engineer:20190531075803p:plain:w600

Canvasは、チャートやマークダウン、画像などの要素を自在に配置・カスタマイズでき、
Kibanaで表現可能な幅が大きく広がります。(ラシッドさんのプレゼンテーションもCanvasで作られていました。)


ユーザ事例紹介

今回事例として

  1. Elasticを利用したリコーグループのIT基盤の見える化
  2. 水環境の持続を支えるプラットフォーム Water Business Cloudにおける活用と今後展開

の2つの発表がありました。

Elasticを利用したリコーグループのIT基盤の見える化

4TB/Dayの大量データを捌くデータ基盤を、少人数のチームで運用。
大企業であるほど、データ収集のハードルが高くなりがちですが、そこにチャレンジした面白い事例でした。

水環境の持続を支えるプラットフォーム Water Business Cloudにおける活用と今後展開

水回りの社会資本インフラシステムの監視・運用の話でした。

SLACanvasで可視化してエンドユーザからもサービスの状態を見ることができるところが面白いと思いました。
f:id:acro-engineer:20190531081632p:plain:w600

ハッピーアワー

AMAで質問したり、色々な方と話をさせてもらいました。
個人的にはAMAでApp Searchの仕組みの話を聞くことができて、良かったです。


集うElastic Certified Engineer


まとめ

EasticStackの各種ソリューションがかなりの速度で充実してきたことを改めて感じました。
今後も最新情報をキャッチアップし続けていきたいと思います。

(あとラシッドさんを生で見れたの嬉しかったです)
f:id:acro-engineer:20190530230209p:plain:w600

Acroquest Technologyでは、キャリア採用を行っています。

  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。


世界初のElastic認定エンジニアと一緒に働きたい人Wanted! - Acroquest Technology株式会社のエンジニア中途・インターンシップの求人 - Wantedlywww.wantedly.com

JAWS-UG横浜にて「DevOps」をテーマに発表してきました。

こんにちは。クラウドサービス開発エンジニアの@kojiisdです。

先日私が所属するJAWS-UG横浜というAWSユーザグループの勉強会にて、DevOpsをテーマに発表してきました!

jawsug-yokohama.connpass.com

今回は、昨年のAWS re:Inventにて発表された新サービスAWS Amplify Consoleについて話をしてきました。

AWS Amplify Consoleは、継続的デリバリーを簡単に実現できるサービスとして注目を集めていますが、新しいサービス故まだまだ深堀りした紹介が少なく、実際に案件で利用することを前提とした際、開発者から見てどのくらい便利になるサービスなのか、という点に不明点が残ります。そこで、今回はAWS Amplify Consoleを実案件を見据えて利用してみた所感を共有させてもらいました。


テーマがDevOpsということもあり、運用やテストチームなどの方々の参加が多かったようですが、開発者の気持ちを盛り込んだ発表に共感を得られたようで、よかったです。
今後もこのような新サービスを試し、個人利用ではなく実際の開発案件を見据えた際の実際や、利用してみた所感、ノウハウなどを共有できたらと思います。


詳しくはぜひスライドをご覧ください。



それでは!

Acroquest Technologyでは、キャリア採用を行っています。

  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

顧客のビジネスをインフラから加速するエンジニア募集! - Acroquest Technology株式会社のインフラエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

KarateでElasticsearchの状態をチェックする

こんにちは、Elastic Certified Engineerのshin0higuchiです😊

みなさん、Elasticsearchの正常性確認はどうしていますか?

実際にサービスを運用するとなると、一口に「正常性確認」と言っても色々な観点でのチェックが必要です。
システムの死活、リソースの状態、パフォーマンス、検索queryの妥当性などなど......

Monitoring+Alertingで監視したり、その他の監視ツールやelasticのsupport-diagnosticsを使ったり、人によってはcurlコマンドで確認するシーンもあるのではないでしょうか?
ただ、個人的には、観点が多いと色々なツールを組み合わせたチェックが必要になり、多少手間を感じていました。


そこで、今回は上司に教えてもらったKarateというテスト自動化ツールが、Elasticsearchと相性が良さそうだったのでしてみました。

そもそもKarateとは?

Karateは、CucumberというBDD(ビヘイビア駆動開発)を行うためのフレームワークをJavaVM上に移植したもので、Gherkinの文法を自然言語に近い形で記述できるユニットテストツールです。

こちらの@takanorigさんのQiita記事を読めば大体わかります。
qiita.com

個人的に感じているメリットとしては、

  1. シナリオベースのテストが簡単にかける
  2. 学習コストが低い
  3. JSONが扱いやすい

といったところです。

実際にやってみる

KarateでElasticsearchのStatusなどをチェックしてみましょう。
今回は一例として

  1. 想定する設定と実際のクラスタ設定の差分がないか?
  2. indexの検索などが正常に行われるか?
  3. 操作が特定時間以上かかっていないか?

などを確認します。

細かい説明は前述のQiita記事を読んでもらうとして、
Karateでは*.featureというファイルにテストしたい内容を記述します。
フォルダ構成は下記のようになっています。

src
├── main
│   └── java
└── test
    ├── java
    │   ├── health
    │   │   ├── HealthRunner.java
    │   │   └── health.feature
    │   ├── karate-config.js
    │   └── logback-test.xml

テストケースはhealth.featureに記述していきます。

設定例

Feature: Health Test

Background: 
  * url 'http://localhost:9200'
  * def index_pattern = 'kibana_sample_data_logs'
  * def total_nodes_num = 1
  * def data_nodes_num = 1
  * def master_nodes_num = 1

Scenario: clusterのステータスがgreen
  Given path '_cat/health'
  When method get
  Then status 200
  And print response
  And match response contains "green"

Scenario: kibana_sample_data_logs が検索可能
  Given path index_pattern + '/_search'
  When method get
  Then status 200

Scenario: indexの検索レスポンスが100msec未満
  Given path index_pattern + '/_search'
  When method get
  And assert responseTime < 100
  And print responseTime 

Scenario: cluster statsの結果が正常
  Given path '/_cluster/stats'
  When method get
  Then status 200
  And match response.nodes.count.total == total_nodes_num
  And match response.nodes.count.data == data_nodes_num
  And match response.nodes.count.master == master_nodes_num
  And assert response.nodes.os.mem.free_percent > 10

ざっくり説明すると、
Backgroundというセクションで URLやその他の変数を定義しています。こちらは外部ファイルから読み込むことも可能なようです。
そして、各Scenario内で実際にAPIを叩いてその結果を検証しています。

今回はシンプルなケースにしていますが、Scenarioという名前の通り、連続した実行も可能です。
例えば _cat/indicesを叩いて、その結果を使って各indexのstatsを確認するなど。

実行コマンド

mvn clean test -Dtest=HealthRunner

結果

Karateの実行結果は、コンソール出力されるだけでなく、見やすいHTMLを生成してくれます。

例えば下の結果を見れば、StatusがGreenであることを確認するテストが失敗しています。
内容を見ると、クラスタのステータスがyellowになっていることがすぐにわかりますね。
f:id:acro-engineer:20190529100428p:plain:w800

まとめ

APIステータスコードを確認する他、レスポンスのJSONを扱うのが容易で、サクサクとテストケースがかけるのは非常に便利だと感じました。

設定が手軽であることにくわえ、柔軟なテストケースを作成できることが魅力の一つ。
登録→検索→削除のようなシナリオを試験したり、プラグインのバージョンチェックなどもできるので、定期実行させておくと便利そうです。

以上です。お読みいただきありがとうございました。

Acroquest Technologyでは、キャリア採用を行っています。

  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

世界初のElastic認定エンジニアと一緒に働きたい人Wanted! - Acroquest Technology株式会社のエンジニア中途・インターンシップの求人 - Wantedlywww.wantedly.com