Azure と Visual Studio Online (Git) で継続的インテグレーション

以前に Windows Azure と Visual Studio Online で継続的インテグレーションというのを書きましたが、
今回は、リポジトリの種類として TFVC ではなく Git を使ってみます。

Visual Studio Online (Git) に Web アプリケーションのソース コードをコミットすると、
自動的にビルドが開始して Azure Web アプリにデプロイされる、という
継続的インテグレーション (Continuous Integration, CI) を構成するための手順について記述します。

 

■ ソリューションをコミットする

まず、Visual Studio Online で Git のチーム プロジェクトを作成しておきます。
Visual Studio でソリューションのみを作成して、Visual Studio Online にコミット・プッシュします。
ソリューションを作成する手順は後でもかまいませんが、
ここで作成しておくと、ビルド定義にソリューションへのパスが自動で含まれるようになります。

image

 

■ Azure Web アプリを作成する

Microsoft Azure の管理ポータルで、新規の Web アプリを作成します。[カスタム作成] を選択します。

image

作成する Web アプリの URL を入力し、[ソース管理から発行] をオンにします。

image

ソースコードのリポジトリの種類を指定します。
[Visual Studio Online] を選択します。

image

Visual Studio Online の URL を指定します。
[今すぐ承認] をクリックすると Visual Studio Online 側の承認画面が表示されるので、[Accept] をクリックします。

image

リポジトリ名 (チーム プロジェクト名) を選択して、右下の ✓ をクリックすれば Web アプリが作成されます。

image

このとき同時に、Visual Studio Online にビルド定義が作成されます。
なお、ソース管理システムと連携されていない Web アプリにあとから連携を追加することもできます。

 

■ ビルド定義を編集する

Visual Studio で、先ほど作成されたビルド定義を編集します。
既定では、ビルド定義は「(サイト名)_CD」という名前で作成されています。
この名前を変更しても、デプロイ構成には影響ありません。

image

[全般] の [キューの処理] が [有効] に設定されていることを確認します。

image

ビルドのトリガーは、既定で [継続的インテグレーション] に設定されています。
この設定のときでも、ビルドのメニューから手動で開始することもできます。

image

ソースの場所は、分岐まで指定できます。
本番用 (Production) とテスト用 (Staging) の環境を用意したい場合は、
それぞれの Azure Web アプリを作成し、それぞれを master と開発用の分岐に関連付けるなどするとよいでしょう。

image

ビルドの出力場所は既定で [ビルド出力をサーバーにコピーする] に設定されています。

image

ターゲットのソリューションまたはプロジェクトを [2. Build] – [Projects] で指定します。
Release ビルドにするには、[2. Build] – [Configurations] で、Release 用の構成を追加します。

image

なお、ビルド定義と Azure Web アプリは、[Windows Azure Deployment Environment] の値で関連付けられています。

image

 

■ Web アプリケーションをコミットする

Web アプリケーションを作成します。
ここでは例として、[ASP.NET Web アプリケーション] を選択し、テンプレートから [MVC] を選択します。

image

これらのファイルを Visual Studio Online にコミット・プッシュします。
すると、ビルドが自動的に開始され、Azure Web アプリに初回のビルドがデプロイされます。

Visual Studio Online での表示:

image

Azure Web アプリでの表示:

image

 

ビルドおよびデプロイに成功すると、Web アプリが実行されるようになります。

image

ビルド定義で [ビルド出力をサーバーにコピーする] に設定されている場合、
ビルドの実行ログの [Download drop as zip] でデプロイされたビルド一式を取得できます。

image

Monaco で配置フォルダーを覗いてみると、BuildInfo.config というファイルが作成されています。
これにより、現在デプロイされているビルドの情報を確認することができます。

image

 

以上で、継続的インテグレーションが構成されました。
その後も、ソース コードをコミットするたびに自動的にビルドおよびデプロイが実施されます。

過去のバージョンを選択して再デプロイすることもできます。

image

 

バージョン情報
Visual Studio 2013

参照
Visual Studio Online と Git を使用した Azure への継続的な配信
Windows Azure と Visual Studio Online で継続的インテグレーション (1)
Azure と GitHub で継続的インテグレーション

広告

Azure Machine Learning で色のクラスタリング (3)

前回の Azure Machine Learning で色のクラスタリング (2) では、
学習済みのクラスタリング モデルを利用して、新たなデータをクラスターに割り当てる方法を示しました。

この学習済みのクラスタリング モデルは、保存して再利用することができます。
[Train Clustering Model] の出力の左側の ○ を右クリックして、
[Save as Trained Model] をクリックします。

image

名前を付けます。

image

これで保存ができました。

image

Experiment 上で [Trained Models] から選択できるようになります。

image

 

では次に、この保存した学習済みクラスタリング モデルを Web サービス化してみましょう。
学習済みモデルに [Assign to Clusters] を接続します。

image

さて、上の図のようにモデリングして、
最終的に ColorData.csv の部分を Web サービスの入力に差し替えればよいはずなのですが、
なぜかこの入力データの部分の行数が少ないと、
結果の Assignments がすべて行数未満の数値になってしまうという現象が発生しています。
(2 行のときは、0 または 1 にしかならない。)

image

 

仕方がないので、次の図のように、ダミーのデータを 10 件用意しておき、
入力データに追加して Assign to Clusters を通し、Execute R Script で削除するようにしました。

image

後方の 10 件を削除するための R のスクリプトは次の通りです。

[Prepare Web service] をクリックします。

image

すると、Web サービスの入力および出力を示す青色のモジュールが追加されます。
次の図のように線を接続します。

image

この状態で実行します。
完了すると、ボタンが [Publish Web service] に変わるので、これをクリックします。

image

 

これで、Web サービスが発行されました。

image

HTTP ベースのインターフェイスの説明をはじめとして、ヘルプ ページが自動的に生成されます。
API を呼び出すための Excel ファイルまで用意されています。

image

[Test] をクリックして、API のテストをしてみましょう。
必要な情報を入力して実行します (今回は色相だけ入力すれば十分です)。

image

結果は下の部分に表示されます。

image

 

さらに、C# のコンソール アプリケーションから API を呼び出してみましょう。
サンプル コードがヘルプ ページ上に生成されているので、これをコピーして使います。

image

NuGet で Microsoft.AspNet.WebApi.Client をインストールして、API キーを設定します。
あとは入力データを設定します (今回は色相だけ入力すれば十分です)。

image

実行します。
運が良ければ 1 秒程度で結果が返ってきますが、運が悪いと 20 秒くらいかかることもあります。

image

試してみた操作はこれで以上です。

 

まとめ・注意点

  • Machine Learning を利用するにあたり、.NET の知識は必要ありません。
    (Machine Learning 単体では、.NET とは直接関係ありません。)
  • クラスタリングはアルゴリズムの選定で迷うところがないので、とりあえずデータさえあればできるという印象です。
  • まったく同一のデータ ファイルおよびアルゴリズムで実行すれば結果は同じになりますが、
    評価に関係ない列の値が変わるだけで結果が変わることがあります。
  • 現在の Machine Learning は、米国中南部リージョンでのみ提供されています。

 

前回: Azure Machine Learning で色のクラスタリング (2)

作成したサンプル
Clustering Colors 4: Web service API (Azure ML Gallery)
AzureMLSample (GitHub)

Azure Machine Learning で色のクラスタリング (2)

前回の Azure Machine Learning で色のクラスタリング (1) では、
色データを色相でクラスタリングし、その結果をストレージに出力するところまで完了しました。

image

このクラスタリングの結果 (ColorData-Hue-10.csv) を WPF で視覚化したものがこちらです。
(全体のソースコードは GitHub の AzureMLSample にあります。)
クラスター数はもう少し大きめでよかったかもしれません。

image

 

いろいろ評価条件を変えてクラスタリングを試してみましょう。
次の図のように、先ほどのモデルの右側に、同様のモジュールを 3 種類追加します。
モジュールを複数選択して、コピー アンド ペーストすると速いです。

image

追加した 3 系統では、次のようにパラメーターを設定します。

(i)
クラスター数: 20
対象列: R, G, B
出力ファイル名: ColorData-RGB-20.csv

(ii)
クラスター数: 20
対象列: Hue, Saturation, Brightness
出力ファイル名: ColorData-HSB-20.csv

(iii)
クラスター数: 20
対象列: R, G, B, Hue, Saturation, Brightness
出力ファイル名: ColorData-All-20.csv

 

また、全列の値のスケールを合わせるため、[Normalize Data] を追加しています。
スケールを合わせないと、値の範囲の大きさにより列ごとに重みが変わります。
[Transformation method] で [MinMax] を選択すれば、0 から 1 までの範囲の値に線形変換されます。

image

 

実行して結果を見てみましょう。
全体的に、色相以外の彩度および明度の特徴も出ています。

(i) R, G, B

image

(ii) Hue, Saturation, Brightness

image

(iii) R, G, B, Hue, Saturation, Brightness

image

 

次に、学習済みのクラスタリング モデルを使って、新たな色データを各クラスターに振り分けてみましょう。

新たな色データとして、NIPPON COLORS – 日本の伝統色に記載されているものを利用します。
最初の ColorData.csv と同じようにデータを準備します。

image

この色データ (ColorData-JP.csv) をデータセットとしてアップロードし、
色相でクラスタリングしたときの Experiment を次のように変更します。

image

[Assign to Clusters] は、新たな入力データを学習済みのクラスターに振り分けるためのものです。
プロパティの対象列で Hue を選択します。

image

実行結果はこの通りです。
最初の ColorData-Hue-10.csv と同様のクラスターに色が振り分けられています。

image

 

次回は Web サービス化についてです。

前回: Azure Machine Learning で色のクラスタリング (1)
次回: Azure Machine Learning で色のクラスタリング (3)

作成したサンプル
Clustering Colors 2: by various features (Azure ML Gallery)
Clustering Colors 3: Assign new data to clusters (Azure ML Gallery)
AzureMLSample (GitHub)

参照
NIPPON COLORS – 日本の伝統色