私はKerasを学び始めています。これはTensorflowとTheanoの上にある層だと私は思います。しかし、私はAMD R9 280XなどのAMD GPUにしかアクセスできない。
OpenCLに対するKeras/Tensorflowのサポートを通じて自分のAMD GPUを利用できるように、Python環境をどのように設定できますか?
私はOSXで走っています。
私はTensorflowのOpenCL 1.2バックエンドを書いています https://github.com/hughperkins/tensorflow-cl
OpenCL用のこのテンソルフローのフォークには、次のような特徴があります。
これが利用可能なTensorflowの唯一のOpenCLフォークではありません。 Codeplayによって開発されているフォークもあります https://www.codeplay.com 、Computecppを使って、 https://www.codeplay.com/products/computesuite/computecpp =私の知る限りでは、それらのフォークはどのGPUデバイスで動作するかという点で私のものよりも強い要件を持っています。デバイスがサポートされているかどうかを判断するには、Platform Support Notes(computeppページの下部にあります)を確認する必要があります。コードプレイフォークは、実際には公式のGoogleフォークです。こちらには、 https://github.com/benoitsteiner/tensorflow-opencl があります。
この記事に関する最初の質問は、KerasとTensorflowをAMD GPUで動かす方法です。
この質問に対する答えは次のとおりです。
1.)Tensorflowを正しく動作させることができれば(オプションで仮想/ conda環境内で)Kerasは動作します。
2.)TensorflowをAMD GPU上で動作させるには、他の人が述べているように、これがうまくいく方法の1つは、OpenClを使用するようにTensorflowをコンパイルすることです。そのためには下記のリンクを読んでください。しかし、簡潔にするために、ここで必要な手順を要約します。
AMD独自のドライバが必要になります。これらは現在Ubuntu 14.04(UbuntuがUIのレンダリング方法を変更することを決定する前のバージョン)でのみ利用可能です。 Ubuntu 16.04のサポートは、この記事の執筆時点ではAMDProDriversを介した少数のGPUに限定されています。 AMD GPUについて深く学びたいと思う読者はこれに気付くべきです!
OpenClをサポートしてTensorflowをコンパイルするには、OpenClヘッダー、ComputeCppという前提条件も入手してインストールする必要があります。
前提条件が満たされたら、ビルドを構成します。 Tensorflowをコンパイルするための3つのオプションがあることに注意してください:Std Tensorflow(安定版)、Benoits SteinerのTensorflow-opencl(開発版)、そしてgithubから引き出すことができるLuke IwanskiのTensorflow-opencl(非常に実験的)。また、openclのバージョンのいずれかからビルドすることにした場合、openclを使用することは想定されていないため、openclを使用するという質問はなくなります。逆に言えば、もしあなたが標準テンソルフローから設定するなら、configureスクリプトがopenclを使うように頼むときに "Yes"を選ぶ必要があり、CUDAのために "NO"を選ぶ必要があることを意味します。
それから次のようにテストを実行します。
$ bazel test --config = sycl -k --test_timeout 1600 - // tensorflow/... - // tensorflow/contrib/... - // tensorflow/Java/... - // tensorflow/compiler/...
更新日:私のセットアップでこれを行うと、セットアップに非常に時間がかかります。時間がかかる部分は、実行されているすべてのテストです。これが何を意味するのかわかりませんが、私のテストの多くは1600秒でタイムアウトしています。より多くのテストがタイムアウトになるのを犠牲にして、おそらく期間を短くすることができます。あるいは、テストなしでテンソル流を構築することもできます。これを書いている時点では、テストの実行はすでに2日かかりました。
あるいはpipパッケージを次のようにビルドするだけです。
bazel build --local_resources 2048,.5,1.0 -c opt --config=sycl //tensorflow/tools/pip_package:build_pip_package
実際にCodeplayでブログ記事をお読みください:Lukas Iwanskyが、TensorflowをOpenClと連携させる方法に関する包括的なチュートリアル記事を2017年3月30日に投稿しました。したがって、これはごく最近の記事です。私がここで書いていないいくつかの詳細もあります。
上記の多くの記事で示されているように、わずかな情報がウェブ間に広がっています。 Lukasの投稿が価値に関して追加しているのは、すべての情報が1つの場所にまとめられているため、TensforflowとOpenClを設定するのが少し面倒なことです。ここにリンクを提供するだけです。
https://www.codeplay.com/portal/03-30-17-setting-up-tensorflow-with-opencl-using-sycl
もう少し完全なウォークスルーがここに掲載されています。
http://deep-beta.co.uk/setting-up-tensorflow-with-opencl-using-sycl/
それは主にユーザーに彼/彼女がする必要があることを明示的に伝えることによって異なります:
Tensorflow-clを使用した代替アプローチが上で言及されていることに注意してください。
https://github.com/hughperkins/tensorflow-cl
現時点ではどちらのアプローチが優れているかはわかりませんが、このアプローチはあまり活発ではないようです。投稿される問題が少なくなり、それらの問題を解決するための会話が減少しています。昨年は大きなプッシュがありました。この記事の執筆時点で、Hugh氏は数日前にいくつかの更新をプッシュしているようだが、追加のプッシュは2016年11月以来消えている。 (更新:あなたがドキュメンテーションのreadmeのいくつかを読んだならば、主要な開発者が人生で忙しいので、このバージョンのtensorflowoは今コミュニティサポートだけに頼ります。)
更新(2017-04-25):以下のtensorflow-openclのテストに基づいていくつかの注意点があります。
以下は、私の設定用のCIFAR10データセット(iGPU付きA10-7850)を使用して1エポックを計算するためのいくつかの数値です。あなたの走行距離はほぼ確実に変わります!
この特定のケースでは、パフォーマンスが悪くなっていることがわかります。私はこれを次の要因に帰します。
より多くのVRAMとより多くのストリームプロセッサを搭載したAMD GPUを使用している場合は、はるかに優れたパフォーマンス値が得られるはずです。私は何が可能であるかを知るために人々が何を達成しているかを読むことに興味があるでしょう。
更新がプッシュされた場合はいつでもこの回答を維持します。
3.)AMDのRocMイニシアチブとmiOpen(cuDNNに相当する)ライブラリを使用するという代替手段が現在示唆されています。これらは、ディープラーニングを可能にするオープンソースライブラリです。注意点は、現在RocMサポートはLinuxにしか存在しないこと、そしてmiOpenはまだ一般に公開されていないことですが、Raja(AMD GPUの責任者)は AMA で述べています。 AMD GPUについて深く学習することは可能なはずです。実際、Tensorflowだけでなく、Cafe 2、Cafe、Torch 7、およびMxNetのサポートも予定されています。
PlaidML Kerasバックエンドを介してAMD GPUを使用することができます。
最速:PlaidMLは一般的なプラットフォーム(TensorFlow CPUのような)よりも10倍速く(またはそれ以上)、製造元やモデルに関係なくすべてのGPUをサポートしています。 PlaidMLは、AMD、Intel、NVIDIA、ARM、および組み込みGPUに関する深い学習を加速します。
最も簡単:PlaidMLはインストールが簡単で複数のフロントエンドをサポートします(現在はKerasとONNX)
無料:PlaidMLは完全にオープンソースであり、独自の制限付きライセンスを持つベンダーのライブラリに依存しません。
ほとんどのプラットフォームでは、高速ディープラーニングを開始するのは、いくつかのコマンドを実行するのと同じくらい簡単です(Python(v2またはv3)がインストールされていると仮定して)。
virtualenv plaidml
source plaidml/bin/activate
pip install plaidml-keras plaidbench
どのアクセラレータを使用するかを選択します(多くのコンピュータ、特にラップトップには複数のコンピュータがあります)。
plaidml-setup
次に、MobileNetの推論パフォーマンスのベンチマークを試してください。
plaidbench keras mobilenet
または、MobileNetのトレーニングを試してください。
plaidbench --batch-size 16 keras --train mobilenet
ケラスセットで使用する
os.environ["KERAS_BACKEND"] = "plaidml.keras.backend"
詳細については
https://github.com/plaidml/plaidml
https://github.com/rstudio/keras/issues/205#issuecomment-348336284
これは昔からの質問ですが、ここ数週間で自分で解決しようとしたので。
さて、最後に、OpenCLなどを理解しようとしている3-4週間の後、私はあなたがすぐに始めるのを助けるためにこのチュートリアルを見つけました。それはhipCaffeを立ち上げて実行するためのステップバイステップです。ただしnVidiaとは異なり、ハードウェアをサポートしていることを確認してください。 https://rocm.github.io/hardware.html 。サポートされているハードウェアがなくても機能すると思いますか?がんばろう。あなたは警告されました。 ROCMを起動して実行したら(そして検証テストを実行したら)、ここにhipCaffeのチュートリアルがあります - ROCMを取得した場合は、10分以内にMNIST検証テストを行うことになります。 https://rocm.github.io/ROCmHipCaffeQuickstart.html
TheanoはOpenCLをサポートしていますが、まだ初期段階です。 Theano自体はOpenCLには興味がなく、 コミュニティサポート に依存しています。
ほとんどの 操作はすでに実装されており、ほとんどの場合、指定された操作を調整して最適化することです。
OpenCLバックエンドを使用するには、自分自身で buildlibgpuarray
する必要があります。
個人的な経験から、運が良ければCPUのパフォーマンスが向上することがわかります。メモリ割り当ては非常に単純に実装されているように見え(したがって計算は遅くなります)、メモリが不足するとクラッシュします。しかし、コードの最適化やバグ報告の手助けをすることをお勧めします。
あなたが他のAMD gpuのへのアクセスを持っているならば、ここを見てください: https://github.com/ROCmSoftwarePlatform/hiptensorflow/tree/hip/rocm_docs
これでROCmプラットフォーム上のテンソルフローについて正しい方向に進むことができますが、 https://rocm.github.io/hardware.html に関するSellyの投稿はこのルートに関するものです。そのページは網羅的なリストではない、私は自分でXeon E5 v2 Ivy Bridgeがv3以上をリストしているにもかかわらずROCmでうまく動作することを発見した、しかしもう少しうるさい。時間が経つにつれて、いくつかの小さな例外を除いて、gfx8以降。
UPDATE - configure中にhiptensorflowにopenclサポートのオプションがあるようです。 openclの実装がうまくいっていれば、gfx8 +やpolaris gpuがなくてもリンクを調べるといいでしょう。それは長い時間がかかるプロセスですが、よく書かれた指示に続く1時間か3時間(ハードウェアに依存します)は見つけるために失うことが多すぎません。
Tensorflow 1.3はAMD ROCmスタックでサポートされています。
既成のdocker画像も公開されています。