機械学習サービスを開発 / 運用していく時に役立つ知識をまとめてみた【Python x Azure】

はじめまして、ますみです！

[![自己紹介.png](https://www.umi-mori.jp/wp-content/uploads/2023/02/introduction_banner_2-2048x533.png)](https://bit.ly/banner_intro_masumi_creator_qiita)


本記事のターゲットと概要は以下の通りです。

- ターゲット / Target
  - 機械学習に携わる研究者
  - 機械学習を用いたソフトウェアに従事する方々（エンジニア / デザイナー / プロマネ / マーケター / セールス / コンサル / 経営者など）
- 概要 / Abstract
  - 機械学習をAzureというクラウドサービス上で実行 / 運用していく場合に知っておくべき知識の紹介。

※ [求ム！Pythonを使ってAzureで開発する時のTips！【PR】日本マイクロソフト Advent Calendar 2020](https://qiita.com/advent-calendar/2020/azure-python) の23日目の記事です。

また、本記事の作者（私）は[Azure Fundamental](https://docs.microsoft.com/ja-jp/learn/certifications/azure-fundamentals)の資格を取得しているものの（[証明書](https://www.youracclaim.com/badges/40c3de33-d0b5-4a82-b547-c2bb0db60fea/linked_in)）、まだまだ学び足りないことがたくさんあります。そのため、もしも「こういうサービスもあるよ！」や「こういうメリットとデメリットもあるよ！」などの知見がございましたら、ぜひコメントでシェアしていただけると幸いです。

# Python x Azureの理由
近年、技術の選択肢が増えてきたため、技術選定をしっかりと行うことは研究や開発を行う上で、重要視されてきました。そのため「なぜPythonを使うのか？」「なぜMicrosoft Azureを使うのか？」について、はじめに説明したいと思います。
## なぜPythonを使うのか？
Pythonを使う理由は、主に次の3つあると考えます。
### 1. アクティブデベロッパーが多さ
2019年のアクティブデベロッパー数においては、世界で8.2Mを記録し、Javaを抜いて2位になりました。機械学習（Machine Learning; ML）の領域において、最もポピュラーな言語だと言えるでしょう。

チーム開発を行う上で、多くの人が習得している言語を選定することは重要な検討要素の一つです。また、Pythonの利用者が多い分、ドキュメント（技術文書）も豊富なことも特徴として挙げられます。

> 【参考】機械学習によりPythonがJavaを超え開発者数2位のプログラム言語へ
> https://ited.tech/artificial-intelligence/machine-learning-ai-made-python-second-most-used-language-over-java/

### 2. 機械学習ライブラリの豊富さ
ライブラリとは、すでにまとめられた便利な機能や関数のことを言います。Pythonは、標準ライブラリに加えて、機械学習の研究者や開発者が[オープンソースソフトウェア（Open Source Software; OSS）](https://wa3.i-3-i.info/word15874.html)として外部ライブラリを公開していることから、ライブラリが大変豊富になっています。ライブラリが豊富であることは、工数時間の短縮に繋がり、研究においてもサービス開発においても大きなメリットになります。

> 【参考】機械学習・人口知能開発に強いPythonライブラリ おすすめ7選
> https://proengineer.internous.co.jp/content/columnfeature/13907

### 3. コード量の少なさ
最後に、コード量の少なさが挙げられます。これに関しては、トレードオフ（実行速度の遅さなど）があるのですが、初学者にとっての習得のしやすさと工数時間の短縮というメリットに繋がります。

> 【参考】Python / C言語との記述法の違いを比較
> https://algorithm.joho.info/programming/python/c-language-kijutsu-hikaku-chigai/

## なぜMicrosoft Azureを使うのか？
Microsoft Azureを使う大きな理由として、主に次の3つあると考えます。
### 1. CAPEXにおける優位性
CAPEXとは、Capital Expenditureの略で、資本的支出という意味を持ちます。通常、研究室で計算機サーバーを構築したり、ソフトウェアサービスを運用するための[オンプレミスサーバー](https://www.idcf.jp/words/on-premises.html)を構築したりする場合、資本的支出は大きくなってしまいます。

研究で必要になったタイミングで、高額の機械を購入する場合、相見積もり・審査・減価償却などの様々な手続きが伴う可能性があります。しかし、クラウドの場合CAPEXがかからず、すぐにハイスペック環境で実行することができます。

> 【参考】企業活動におけるCAPEXとOPEXの定義
> https://www.clouderp.jp/blog/what-is-capex-opex

### 2. ストレージの弾力性
機械学習を用いソフトウェアサービスでは、ストレージの弾力性も一つの大きなメリットになると考えられます。学習データが増えていくような設計の場合、オンプレミスに追加していくことは保守・運用面でも手間とお金がかかります。

しかし、クラウドを用いることで、任意のタイミングでわずか数分でストレージを追加することができます。

> 【参考】クラウドストレージの基礎知識
> https://2sq7d632aduy7flhh6iaxnby-wpengine.netdna-ssl.com/jp/wp-content/uploads/sites/2/2017/08/CDN-Broc-WP-vol01-r2-web.pdf

### 3. コンプライアンスの高さ
上記の二つはクラウドを利用するメリットでした。では、AWS（Amazon Web Service）やGCP（Google Cloud Platform）などの他のクラウドサービスと比べた時のメリットはなんでしょうか？

特筆すべきメリットとして、「クラウドコンプライアンスの高さ」が挙げられます。[クラウドコンプライアンス](https://www.trendmicro.com/ja_jp/what-is/cloud-security/cloud-compliance.html)とは、クラウド業界のガイドラインや国内外の法律における、クラウドの使用に関する規制基準です。個人情報などの管理・保護ポリシーや法令の遵守などに関する90以上の基準をAzureは満たしていることが特徴として挙げられます。そのため、個人情報・生体情報・医療情報などのセンシティブな情報を扱う研究やサービスの場合は、Azureを使うことをおすすめします。

また、余談にはなりますが、Microsoftのサービスである[Microsoft 365（Office 365）](https://www.microsoft.com/ja-jp/microsoft-365)、[Dynamics 365](https://dynamics.microsoft.com/ja-jp/)、[Github](http://github.com/)、[VS Code](https://azure.microsoft.com/ja-jp/products/visual-studio-code/)などとの連携による利便性の高さ（いわゆる垂直統合モデル）なども挙げられます。

> 【参考】Azure コンプライアンス
> https://azure.microsoft.com/ja-jp/overview/trusted-cloud/compliance/

# サービスの全体図
まず全体像として、以下のようなサービスに分類しました。

A. 開発者向けサービス
B. データ基盤サービス
C. 分散処理分析サービス
D. 実行環境サービス
E. AI / MLを活用したサービス
F. デプロイ（公開）のサービス

そして、それぞれのサービス名を以下の「保存版まとめ画像（図）」としてまとめました。
![abstract.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240280/3861e62d-eef4-475e-04f0-e6bc30dcc0a1.png)
より具体的な特徴と押さえておくべき知識を次にまとめました。

# A. 開発者向けサービス
実際に機械学習のモデルなどを開発する方々（デベロッパーやデータサイエンティスト）にとって便利なサービスを紹介します。

| サービス名                                                   | 概要                                                         |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| [1. Azure Machine Learning](https://azure.microsoft.com/ja-jp/services/machine-learning/) | クラウド上で機械学習を実行するための基盤となるサービス。     |
| [2. Azure Machine Learning Studio]()                         | GUIでモデルなどを組むことができるデータサイエンティスト開発者向けのWebポータルのサービス。 |
| [3. Azure Notebooks](https://notebooks.azure.com/)           | クラウド上で素早くPythonなどのコードを実行できるサービス（※ 2021/01/21に終了予定）。|

## A-1. Azure Machine Learning
- クラウド上で機械学習を実行するための基盤となるサービス。
- 深層学習（Deep Neural Network; DNN）やコンピュータビジョンなどの分野ではまだGUI化の課題はあるが、回帰やクラスタリングなどの基本的なモデルはGUIで実装可能。しかも、それぞれのモデルの予測精度などを比較するグラフなども出せる。
- もちろんPythonでも実装可能（Tensorflowなどをインポートして、Jupyter Notebookなどでコーディング可能）。
- [Azure DevOps](https://azure.microsoft.com/ja-jp/services/devops/)や[Power BI](https://azure.microsoft.com/ja-jp/services/developer-tools/power-bi/)への導入が可能。

> Azure Machine Learning - 公式サイト
> https://azure.microsoft.com/ja-jp/services/machine-learning/

## A-2. Azure Machine Learning Studio
- GUIでモデルなどを組むことができるデータサイエンティスト開発者向けのWebポータルのサービス。

> Azure Machine Learning Studio - 公式サイト
> https://docs.microsoft.com/ja-jp/azure/machine-learning/overview-what-is-machine-learning-studio

## A-3. Azure Notebooks
- クラウド上で素早くPythonなどのコードを実行できるサービス。
- 環境構築の必要がないことがメリットとして挙げられる。
- 無料のサービス。
- メモリ4 GB、データ1 GBの制限あり（2020年12月時点）。
- パブリックプレビュー（試用期間のようなもの）が2021年1月21日に終了。

> Azure Notebooks - 公式サイト
> https://notebooks.azure.com/

> 【python初学者向け】さくっとMicrosoft Azure Notebooks上でpython書いてみた
> https://qiita.com/Catetin0310/items/2f07e10f056e88e25f5b

> How to use GPU in Jupyter Notebook?
> https://azureai.devpost.com/forum_topics/33099-how-to-use-gpu-in-jupyter-notebook

# B. データ基盤サービス
機械学習のサービス構築に欠かせないデータ基盤サービスを紹介します。

| サービス名                                                   | 概要                                                         |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| [1. Azure Synapse Analytics（Azure SQL Data Warehouse）](https://azure.microsoft.com/ja-jp/services/synapse-analytics/) | データ統合 / ウェアハウス / データ分析など統合された分析サービス。 |
| [2. Azure Data Lake](https://azure.microsoft.com/ja-jp/solutions/data-lake/) | 生のデータを大量に保管するためのデータレイクサービス。       |
| [3. Azure Data Factory](https://azure.microsoft.com/ja-jp/services/data-factory/) | サーバーレスのデータ統合サービス。                           |
| [4. Azure Open Datasets](https://azure.microsoft.com/ja-jp/services/open-datasets/) | 一般公開されているオープンデータへアクセスすることができるサービス。 |

## B-1. Azure Synapse Analytics（Azure SQL Data Warehouse）
- データ統合 / ウェアハウス / データ分析など統合された分析サービス。
- Azure SQL Data Warehouseの進化版。
- サーバーレスと専用リソースから選択可能。
- 複数のデータベースをまとめて管理 / 分析することが可能。
- テラバイト / ペタバイト級のデータに対して実行可能。
- AWSのRedshift、GCPのBigQueryに相当するサービス。
- 負荷に合わせた自動スケーリングも可能。
- データはPremium Storage（SSDを使用）に格納されるため、費用は高いが高速処理。

> Azure Synapse Analytics - 公式サイト
> https://azure.microsoft.com/ja-jp/services/synapse-analytics/

>Azure SQL Data Warehouse が Azure Synapse Analytics に変わりました - 公式サイト
>https://azure.microsoft.com/ja-jp/blog/azure-sql-data-warehouse-is-now-azure-synapse-analytics/

> Azure SQL Data Warehouseを解説 【シリーズ Azureサービスいちから紹介】
> https://azure-recipe.kc-cloud.jp/2017/12/sql_data_warehouse_2017adcal/

## B-2. Azure Data Lake
- 生のデータを大量に保管するためのデータレイクサービス。
- ペタバイト級のファイル / 数十億個のオブジェクトの保存および分析可能。

>Azure Data Lake - 公式サイト
>https://azure.microsoft.com/ja-jp/solutions/data-lake/

## B-3. Azure Data Factory
- サーバーレスのデータ統合サービス。
- Azure Synapse Analyticsと連携可能。

> Azure Data Factory - 公式サイト
> https://azure.microsoft.com/ja-jp/services/data-factory/

## B-4. Azure Open Datasets
- 一般公開されているオープンデータへアクセスすることができるサービス。
- 天気 / 衛星映像 / 社会経済学データ / 公休日などにアクセス可能。

> Azure Open Datasets - 公式サイト
> https://azure.microsoft.com/ja-jp/services/open-datasets/

# C. 分散処理分析サービス
収集されたデータを分析する際に便利なサービスを紹介します。

| サービス名                                                   | 概要                                                         |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| [1. Azure HDInsight](https://azure.microsoft.com/ja-jp/services/hdinsight/) | 大規模なデータ向けの分散処理フレームワークを提供するサービス。 |
| [2. Azure Databricks](https://azure.microsoft.com/ja-jp/services/databricks/) | Azure HDInsightよりもシンプルに利用できる、Apache Sparkベースの分析サービス。 |

## C-1. Azure HDInsight
- 大規模なデータ向けの分散処理フレームワークを提供するサービス。
- Apache Hadoop、Spark、Kafkaなどのフレームワークに対応。

> Azure HDInsight - 公式サイト
> https://azure.microsoft.com/ja-jp/services/hdinsight/

## C-2. Azure Databricks
- Apache Sparkベースの分析サービス。
- Azure HDInsightよりもシンプルに利用可能。
- コラボレーション機能 / 自動スケーリング機能なども利用可能。

> Azure Databricks - 公式サイト
> https://azure.microsoft.com/ja-jp/services/databricks/

# D. 実行環境サービス
仮想マシン（Virtual Machine; VM）などの実行環境の選択肢もいくつかあるため、実行環境のサービスを紹介します。

| サービス名                                                   | 概要                                                       |
| ------------------------------------------------------------ | ---------------------------------------------------------- |
| [1. Azure Virtual Machine](https://azure.microsoft.com/ja-jp/pricing/details/virtual-machines/series/) | 最も一般的な仮想マシンサービス。                           |
| [2. Azure DevTest Labs](https://docs.microsoft.com/ja-jp/azure/devtest-labs/devtest-lab-overview) | 開発者用の仮想マシンなどを素早く構築するためのサービス。   |
| [3. Azure Lab Services](https://azure.microsoft.com/ja-jp/services/lab-services/) | ハッカソンや教育の時などに用いられる仮想マシンのサービス。 |

## D-1. Azure Virtual Machine
- 最も一般的な仮想マシンサービス。
- CPUやGPUのスペックなどに応じて、費用は変動する。

> Azure Virtual Machine シリーズ- 公式サイト
> https://azure.microsoft.com/ja-jp/pricing/details/virtual-machines/series/

## D-2. Azure DevTest Labs
- Production環境とは分離された開発者用の仮想マシン（Virtual Machine; VM）とPaaS リソースを素早く構築するためのサービス。
- VMのスペックや個数なども制限されているため、承認プロセスを省略して、構築することが可能。
- 開発者に一時的に貸し出している形になるため、貸し出し終了後はインスタンスが自動で削除される。
- Azure DevTest Labsが「テスト環境」にあたり、「プロダクション環境」は負荷に対する柔軟性の高い仮想マシンスケールセットなどが用いられる。

> Azure DevTest Labs - 公式サイト
> https://docs.microsoft.com/ja-jp/azure/devtest-labs/devtest-lab-overview

## D-3. Azure Lab Services
- ハッカソンや教育の時などに用いられる仮想マシンのサービス。
- 講師や主催者の作成したラボに対して、生徒や参加者はアクセスすることが可能。
- 参加者に応じたスケーリングも可能。

> Azure Lab Services - 公式サイト
> https://azure.microsoft.com/ja-jp/services/lab-services/

# E. AI / MLを活用したサービス
人工知能（Artificial Intelligence; AI） / 機械学習（Machine Learning; ML）を活用したサービスを紹介します。

| サービス名                                                   | 概要                                                         |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| [1. Azure Cognitive Services](https://azure.microsoft.com/ja-jp/services/cognitive-services/) | 文字 / 画像 / 音声などの認識を行うサービス。                 |
| [2. Azure Bot Service](https://azure.microsoft.com/ja-jp/services/bot-service/) | 人間の代わりに質問に応答するようなボットサービス。           |
| [3. Azure Cognitive Search（Azure Search）](https://azure.microsoft.com/ja-jp/services/search/) | AIを活用したモバイルやウェブ開発者のためのクラウド検索サービス。 |

## E-1. Azure Cognitive Services
- 文字 / 画像 / 音声などの認識を行うサービス。
- 学習済みの環境が提供されているため、導入が簡単。

> Azure Cognitive Services - 公式サイト
> https://azure.microsoft.com/ja-jp/services/cognitive-services/

## E-2. Azure Bot Service
- 人間の代わりに質問に応答するようなボットサービス。
- 文字と音声によるサポートが可能。
- カスタマーサポートなどのサービスに導入可能。

> Azure Bot Service - 公式サイト
> https://azure.microsoft.com/ja-jp/services/bot-service/

## E-3. Azure Cognitive Search（Azure Search）
- AIを活用したモバイルやウェブ開発者のためのクラウド検索サービス。
- 自然言語スタック / 視覚 / 言語 / 音声に対して利用可能。

> Azure Cognitive Search - 公式サイト
> https://azure.microsoft.com/ja-jp/services/search/

# F. デプロイ（公開）のサービス
PythonやGUIで構築した機械学習モデルをウェブサービスやAPI（Application Programming Interface）などとして公開する場合に知っておくべきサービスを紹介します。ここでは、FlaskやDjangoと言われるPythonを用いたウェブフレームワークやNodeJSなどの他のサーバーサイド言語とPythonを組み合わせて構築するウェブサービスなども考慮して、紹介します。

「[アプリケーションの Azure コンピューティング サービスを選択する](https://docs.microsoft.com/ja-jp/azure/architecture/guide/technology-choices/compute-decision-tree)」という記事を参考にして、どこまでマシンのカスタマイズをしたいかに応じて、デプロイするためのサービスを選定すると良いと思います。

| サービス名                                                   | 概要                                                         |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| [1. Azure Virtual Machine](https://azure.microsoft.com/ja-jp/pricing/details/virtual-machines/series/) | 最も一般的な仮想マシンサービス。                             |
| [2. Azure App Services](https://azure.microsoft.com/ja-jp/services/app-service/) | ウェブアプリやAPIの構築からデプロイまでを行うことのできるサービス。 |
| [3. Azure Functions](https://azure.microsoft.com/ja-jp/services/functions/) | イベントドリブン方のサーバーレスコンピューティングプラットフォームサービス。 |

## F-1. Azure Virtual Machine
- [D-1. Azure Virtual Machine](#D-1. Azure Virtual Machine)を参照。

## F-2. Azure App Services
- ウェブアプリやAPIの構築からデプロイまでを行うことのできるサービス。
- VMより自由度は低いが、サービスを運用する上で必要な最低限のことはこのサービスで実施可能。

> Azure App Services - 公式サイト
> https://azure.microsoft.com/ja-jp/services/app-service/

## F-3. Azure Functions
- イベントドリブン方のサーバーレスコンピューティングプラットフォームサービス。
- 実行したい関数などを簡単にデプロイできる。様々な言語で実装可能（.NET、node.js、 Javaなど ）。

> Azure Functions - 公式サイト
> https://azure.microsoft.com/ja-jp/services/functions/

# 一言メッセージ
Azureを用いたデータサイエンスやソフトウェア開発の経験のない人にもある人にも、引き出しを増やしたり、体系化された理解につながったりした機会になったら幸いです。
MicrosoftはAzure / Teamsの急成長している会社であり、これからの発展にも期待ですね。もう少しマクロなMicrosoftのハードウェアやソフトウェアを知りたい場合は、以下の記事もぜひご参照ください。

> 【参考】2020年 Microsoftのプロダクトまとめ！
> https://note.com/umi_mori/n/n0abe3126e989

# 最後に
最後まで読んでくださり、ありがとうございました！
いかがだったでしょうか？

この記事を通して、少しでもあなたの学びに役立てば幸いです！

:::note info
【仕事の相談はこちら】
お仕事の相談のある方は、下記のフォームよりお気軽にご相談ください。

[問い合わせフォームはこちら](https://forms.gle/G5g1SJ7BBZw7oXYA7)

もしもメールでの問い合わせの方がよろしければ、下記のメールアドレスへご連絡ください。

info*galirage.com（*を@に変えてご送付ください）

🎁 「生成AI活用の無料相談券」もしくは「生成AIの社内ガイドライン（無料PDF）」を『公式LINE』で配布中 🎁
『生成AIを業務に活用したいけど、どうしたらいいかわからない』といった声を多くいただきます。

Galirageでは公式LINEにて、チャットやオンライン会議で「完全個別の生成AI活用無料相談会」を実施しております！
（期間限定で実施しているため、ご興味ある方はお早めに以下のLINE公式アカウントをご登録ください^^）
https://lin.ee/rvz6lMN

※ 予告なく、キャンペーンを終了する可能性がございますが、ご了承ください。

【業務内容】
具体的には、以下のお仕事を中心に受け付けております！（[詳しくはこちら](https://galirage.notion.site/Galirage-AI-c2f3945fafb0433d8d2fd03e56927fd8)）
1. 受託開発（例：生成AIを使った社内システムの開発）
2. コンサルティング（例：技術戦略のアドバイス）
3. 講演（例：社内研修、イベント登壇）

※ 特に「生成AIを使ったシステム開発のご依頼」が多く、ご好評いただいております。

【これまでの相談事例】
以下のようなご相談が多くあります。

🔑 機密情報を漏洩させないための、生成AIのシステム構築をお願いしたい。
🤖 自社データを用いたFAQチャットボットの作り方を知りたい。
💡 ChatGPTを、自分たちの事業にどのように活かせるか、アドバイスやアイデアが欲しい。
:::
# おまけ
エンジニアの仲間（データサイエンティストも含む）を増やしたいため、公式LINEを始めました🎉

「**一緒に仕事をしてくれる方**」「**友だちとして仲良くしてくれる方**」は、友だち追加をしていただけますと嬉しいです！（仲良くなった人たちを集めて、「ボードゲーム会」や「ハッカソン」や「もくもく会」もやりたいなと考えています😆）

とはいえ、みなさんにもメリットがないと申し訳ないので、特典を用意しました！

友だち追加後に、アンケートに回答してくれた方へ「**エンジニア図鑑（職種20選）**」のPDFをお送りします◎

https://lin.ee/hFUN4TL

[![](https://www.umi-mori.jp/wp-content/uploads/2023/10/line_banner_v2.png)](https://lin.ee/hFUN4TL)
# 参考文献

https://amzn.to/3aI884f