1.人工知能/機械学習を学ぶ際の開発環境の注意点
・人工知能/機械学習を学習する際の学習環境やツールの選び方には落とし穴がある
・プログラミング言語としてPythonを学ぶ事と人工知能/機械学習を学習する事は異なる
・クラウドにハードウェア、Pythonを任せてブラウザでアクセスするのが一番早くて楽
2.人工知能/機械学習をこれから学習する入門者向けのアドバイス
人工知能/機械学習を学習する際の学習環境の構築やツールの選び方は実は結構な落とし穴があるので、入門者用のはじめの一歩に相当する情報を以下にまとめておきます。
アイキャッチ画像のクレジットはPhoto by Elijah Hail on Unsplash
人工知能/機械学習を学習する際の開発環境は大まかに以下の4パターンがあります。
(A)パソコン内にハードウェア、Python、統合開発環境をセットアップ
一般的なプログラム言語を学習する際に多く見られる環境であるため、多くの初学者は(A)パターンを自然に選択し、Python用の統合開発環境(IDE:Integrated Development Environment)のメリット/デメリットが何かを調べる事が多いです。Python用の統合開発環境としてはAtom,PyCharm,Rodeo,Spyderなどがあり、これらの比較は下記記事でまとめています。
しかし、実はこのパターンはプログラミング言語としてPythonを学ぶだけでしたら問題ないのですが、人工知能/機械学習の入門用環境としてはあまりお勧めしません。
新しいパソコンやグラフィックボード(GPU)等を購入せずに、自分の所有するPCに何かの統合開発環境をインストールして試す、と言うレベルでしたら良いのですが、やっていくうちにやっぱりGPUが必要だと言う気持ちになってくると思います。そうすると自分のパソコンをカスタマイズして予算の許す限り最高のGPUを購入してバリバリ動かすのは一見、理想的に思えますが「将棋ソフトやIoT工作など既製品を動かすだけで新規開発はほぼしない」等でなければ、避けた方が良いです。
1つの理由は人工知能/機械学習の世界は進化の速度が速すぎる事です。GPU付きのパソコンはMacでもWinowsでもLinuxでも安い機種でも10万円以上、高い機種ですと30万円以上はしますが、発売から二年も経過すれば一線級とは言い難いスペックと見なされるようになってしまいます。ソフトウェアもハードウェア同様更新が激しく、Pythonのモジュール等もどんどん新しいものが出たり既存のものが更新されるので、動かしたいライブラリが動かない等のトラブルが発生する可能性が非常に高いです。
また、自分専用の独自環境を構築してしまっている場合、何かトラブルが発生した際にネット上で検索したり、掲示板などで質問しても有用なアドバイスが貰える事はあまり期待できません。自分自身で解決するしかない状態に陥ると、ハードウェアやドライバ絡みのエラーの原因を調べるのは初心者にとって非常にシンドイ作業になります。
自作PC等を作った経験があり、ハードウェア環境のトラブル解決に自信を持っている方であっても、ただでさえ学ぶべき事は多いので、追加のトラブルの種を抱え込む事になる環境は少なくともある程度慣れてからにする事をお勧めします。
(B)クラウドにハードウェア、Pythonを任せてブラウザでアクセス
このパターンが実は一番手っ取り早く、楽だと思うのでオススメです。OSによる違いを意識する必要がないので、Windowsの場合は~の設定をし、Macの場合は~が必要、などを下調べする事も不要ですぐに開始できるのが大きいです。
データサイエンティストなど統計解析系のバックグラウンドをお持ちの方は親しんでいる環境と思いますが、ハードウェアの管理/更新はクラウド側でやって貰えるのと、同じ環境を使っている仲間が多いので、何かモジュールなどでトラブルがあっても誰かエキスパートが既に解決策を見つけてくれている可能性も高いです。
具体的な「サービス提供ベンダー」としては
・GoogleのGoogle Colaboratory(略称:Colab)
制限はあるが無料。有料サービスもあり。
・PaperspaceのGradient
制限はあるが無料。有料サービスもあり。
・AmazonのSageMaker
無料枠はあるが有料。
で、「ブラウザでアクセスする先のソフトウェア」は、
・Colaboratory
GoogleがJupyter Notebookを改良してGoogle提供のサービス(Google Colaboratory)として利用可能にしたもの。無料で使え、性能も良いが、Jupyter notebookに慣れた人にとっては改良しすぎでJupyterで出来ていた事が出来なくなっていると感じる事もある。
・Jupyter Notebook
学術界で人気の高い、ブラウザを使って文書とコードを一緒に管理/実行できる仕組み。Python以外にも他のプログラミング言語で使う事も可能
・nbdev
Jupyter Notebookの開発機能を強化したもので、Colabのようなやり過ぎ感はない。
各ソフトウェアの概要は下記でまとめています。
Colab:TensorFlow入門者のための優れた学習環境
Google Colab Proが日本から利用可能に
データサイエンティストがJupyter notebookを愛する10の理由
nbdev:探索的プログラミングをPythonで実現する開発環境(1/4)
nbdev:探索的プログラミングをPythonで実現する開発環境(2/4)
nbdev:探索的プログラミングをPythonで実現する開発環境(3/4)
nbdev:探索的プログラミングをPythonで実現する開発環境(4/4)
(C)(D)クラウドにハードウェア、Pythonを任せて統合開発環境も使う
ブラウザで開発するのはどうしても違和感があってやはり統合開発環境を使って開発がしたい、と思う方は「ややセットアップの手間がかかる」のと「独自のカスタマイズができる故にカスタマイズした部分にトラブルが発生した際は自己調査で解決しなければいけなくなる可能性もある」のですが、(C)や(D)のパターンも良いと思います。
ここでの統合開発環境(IDE)はVSCode(Visual Studio Code:Microsoftが開発したWindows、Linux、macOSで動くソースコードエディタ)となります。Python専用のIDEではないのですが、拡張機能をインストールする事で様々なプログラミング言語に対応可能な人気のあるIDEです。
自分のパソコンに自由にソフトがインストールできる環境でしたら(D)と思いますが、インストールが制限されている環境であれば(C)パターンを試す余地があると思います。
(C)パターンの解説
Google Colabをプロ仕様に設定する
(D)パターンの解説
Google Colab上でVS Codeを動かしてブラウザでアクセス
開発環境の自作
以下の3つは、初心者向けの話ではないです。
クラウド環境を構築する
各GPUのカタログスペックと実際にジョブを動かした際の性能がだいぶ異なる事があり、GCPでモデルトレーニングのパフォーマンス比較をしてみた際の結果は下記にまとめています。
なお、個人向けに販売されているGPUと法人/データセンター/クラウドベンダー向けに販売されているGPUでは価格にかなりの差があるので、クラウド環境のGPUの利用単価は高めに設定されています。そのため、GPUを長時間使用するようになってくると、人工知能/機械学習用に個人用パソコンを自作する事も視野に入ってくるかと思います。
その場合でも、勢いで購入ボタンを押したくなる気持ちを抑えて、まずはクラウドサービス(AWS, Azure, GCP等)上に自分自身の仮想マシン(Amazon EC2、Azure Virtual Machines、 Google Compute Engine)を構築して、独自の開発環境(python, frame work, Jupyter Notebook)を様々な構成で構築して実際に動かすタスクのパフォーマンスや必要となるハードウェアスペックをチェックする事をオススメします。各クラウドには無料枠があるのでお試しにお金はかかりませんし、セットアップの手間はどうせ自作した際にもかかるので予習になります。
市販のパーツを組み合わせて自作PCを構築する
ゲーム用の高価なゲーミングPCや仮想通貨をマイニングするPC、4K/8K動画編集PCとパーツが被るので、一般的なPCを自作するよりかなりお高くなってしまうのと、ドライバやライブラリの不具合に悩まされるかもしれませんが、クラウドを使い続けるよりは安価に構築できるケースはあります。興味がある方は以下の記事を参考にしてみてください。
人工知能学習用にパソコンを自作する際に知っておくべき事(2020年版)
GeForceシリーズのGPUの消費電力と電気代比較一覧表
ディープラーニング学習用途に最適なLinuxディストリビューションとは?
GeForce RTX 3060搭載のWindows10のPCでTensorFlowとCUDAを有効にする
GeForce RTX 3060搭載のLinuxのPCでTensorFlowとCUDAを有効にする
Google Colabのランタイムをリモートホストに設定する
特化型のハードウェアを購入する
有名な所としてはNVIDIAがJetsonというマザーボードの上にGPUとそれを動かすために最低限必要なパーツのみを載せたハードウェアを比較的安価に販売しています。
1万円台から買える機種もあるため、自作の工作機械などにAIを組み込む際の選択肢として人気があります。私も「Jetsonの方がColabより早いんですよ」と勧められた事があり、いつか買って確かめたいと思っているのですが、まだ踏み切れていません。
情報収集した限り、ハードウェア工作が得意で大好きな人向けの選択肢として考えておいた方が無難なようです。AmazonにNVIDIA Jetson AGX Xavier(10万円越えの最高位機種)に対する非常に対照的な★5レビューと★1レビューがあったので、参考までに以下に翻訳しておきます。
未知のハードウェアを探求していく事を楽しめる人と、既に動かしたいモデルや使いたいライブラリが明確にあってJetsonで安価に動作させたいと考えていた人の違いだと思います。
「素晴らしいデバイス!(開発者が使う場合)」
2020年5月3日アメリカ合衆国 購入済みこのデバイスは可能性を秘めています!これは、Linux ARM64の現状として素晴らしいです。粗い部分があり、ソースから多くのものをコンパイルすることになり、多くのものが機能しないことがわかるでしょう。しかし、機能する部分については驚くべきことです。このデバイスの30Wでの生の消費電力量は信じられません。また、ユニットは現在「クワイエット」モードで出荷されており、目立つスロットは冷却されます。優れたパフォーマンスを備えた「クール」モードでは動作音は非常に静かです。
「私はプロの開発者です。NVIDIA Jetsonを絶対に避けることをお勧めします」
2021年1月9日 アメリカ合衆国 Amazonで購入済み私はJetson Nanoで非常にネガティブな経験をしました。非常に遅い速度に加えて、Jetpackおよび複数の有名なAI/ビジョン開発パッケージとの非互換性のためです。AGXで改善されている事を期待していました。それは実際にはもっと悪化していました。内蔵しているハードウェアは、非常に強力なCPU / GPUの組み合わせとなる可能性がありますが、ソフトウェアサポートを提供するNVIDIAの無能さによって完全に損なわれています。基本的な問題は、CUDA / CUDA-AXがSDK Manager(または他の方法)を介してユニットにインストールされることですが、高度なハッキングなしにCUDA対応ライブラリを簡単に実装することはできません。例えば、NVIDIAにはOpenCVが含まれていますが、CUDAは*有効ではありません*。これにより、NVIDIAエンジニアのスキルの高度さがわかります。
OpenCV、PCL、Eigen、Open3D等ではCUDAはサポートされていません。何故なら、NVIDIAはまだUbuntu18.04(訳注:Ubuntu18.04は2018年4月リリースです。なお、2021年3月現在はUbuntu20.04に対応した版も出ています)と古い依存関係を保ったままの暗黒時代にいるからです。従って、これを機能させたい場合は、コンパイル、テスト、再コンパイル、そして最終的な結論に達するまでに少なくとも数週間を費やすことになります。最終的にはあなたは安定したシステムが所持出来るかもしれませんが、それはバンドエイドで応急処理して保持されたものです。
AIの有効利用とエッジデバイスの使用を真剣に考えている場合、NVIDIAのJetson製品群は論理的な選択のように思えるかもしれません。ただし、NVIDIAの開発者でさえ製品をよく理解していないことに注意してください。また、「Jetpackの非互換性」の結果として生じた問題を修正しようとしている主要なライブラリのGihubフォークを使用しているプログラマは世界中に数千人います。
ここまで読んでも貴方が納得がいかない場合は、起動時にディスクのマウントに問題がある場合やその他のハードウェア障害が発生した場合でも、例えばgtkterm / minicomを介してデバイスとシリアル接続する事は出来ないことを考慮してください。貴方は接続してデバイスの出力を確認する事は出来ますが、私が察するにNVIDIAのTTYUSBのハードウェアドライバーサポートは完全ではないので、デバイスと直接対話することはできません。貴方はほとんどのJetsonユーザーは、本来の性能の半分を機能させるためだけに、古くて時代遅れになったライブラリをインストールしている事に気付くでしょう。そして、最新のライブラリを使用している人達は、それを使う為に高度なハッキングをしています。
Jetsonで動作するライブラリを集めたマスターリポジトリはありません。Xavier AGXは最悪です。文字通り目を閉じて、そこにある他のNUC(訳注:ミニPC)を指すことができます。それは、Jetsonよりもパフォーマンスが優れているか、少なくともわずかな時間で実用的なプロトタイプを作成する事が出来ます。
私がここで何を言おうとしているのかはっきりしない場合に備えて、以下に要約させてください。JetsonデバイスはNVIDIAの後知恵であり、ハードウェアに対するしっかりとしたサポートはありません。彼らは製品の後ろにいません、それは既知の問題のためのアップデート(またはパッチ)が提供されていない事を考えると明らかです。明示的にJetson専用に構築されていないものは動きません。また、Jetson用に使用可能なものは古く、最新のリポジトリに格納されている版とは互換性がありません。あなたは警告を受けました。
NVIDIAは絶対に避けてください。