2016-09-08 4 views
1

TensorFlowに新しいハードウェアを追加していますが、デバイスコンテキストに問題があります。TensorFlowデバイスコンテキスト

コードから目的を理解するだけで、コンピューティンググラフ内のノードのデバイスとデータを管理するように見えます。すなわち、データの入力データと出力のためのデバイスは、Device Contextで指定され、Executorはこれらのデバイス間でTensorsを前後に渡します。すべてのOpKernelContextには、指定されたカーネルの特定の実行を管理するDevice Contextが含まれているように見えます。

現在、私の新しいハードウェアでは、デバイスコンテキストはすべて最終的にセグメンテーションの原因となるnullです。既存のC++のスタイルでは、特定のデバイスタイプ(つまり、GPU、CPU)のデバイスコンテキストを「登録」できるマクロがあると思いますが、これらを見つけることはできません。私の質問は、デバイス用に作成されたOpKernelContextに適切なDevice Contextを追加する方法です。

私は自分のハードウェアに固有のデバイスコンテキストクラスを作成していないことに注意してください。 ThreadPoolDeviceに固有のDeviceContext実装がないようです。これは、基本クラスのDeviceContextがThreadPools用に実装されているためです。

私はDeviceContextについてどんな説明もあります。 2つの目的が

答えて

2

DeviceContext オブジェクト:現時点では

  1. は、彼らはGPUに固有であるため、ほとんどの発信者は、おそらく(GPU ::ストリーム/ MaintainLifetime)を無視することができますいくつかのStreamExecutor、特定のビットをあります。

    OpKernelsの下位デバイスリソースへのハンドルが必要で、DeviceContextオブジェクトには計算に使用される「ストリーム」オブジェクトが保持されます。

    他のデバイスがリソースとして実装する必要のある不透明なハンドルをDeviceContextに実装する必要はありません。ストリームエディタを使用しないデバイスを使用する前にTODOを実行する必要があります。

  2. もう1つのコンポーネントは、デバイスとCPU間のコピーを処理するコードです。あなたは、CPUがホストデバイスであり、この観点から特別に扱われる必要がないため、DeviceContextがCPUに対して存在しないことは間違いありません。

    しかし、例として、GPUのコードを見てみることができます。 tensorflow/core/common_runtime/gpu_device_context.hは、DeviceContextインターフェイスを実装するGPUデバイスコンテキストの例です。インタフェースの実装はhereであり、実際にmemcopiesを実行するためのGPUUtilクラスのコードに委譲します。 StreamExecutorフレームワークを使用して基になるコピーを処理することもありますが、自分のデバイスは、ホスト間のコピーに使用するAPIを使用します。

    デバイスからデバイスにコピーする場合は、特別な登録が必要です。 GPUからGPUへの例は、実装の場合は here 、その機能の登録の場合はhereです。

いくつかの点で、私たちは少しクリーナーになるこのリファクタリングかもしれませんので、登録は(デバイスへのデバイスへのCPU、CPUへのデバイス、デバイス)全て均一です。現時点では少し奇妙なことです。

他のデバイスをサポートするための現時点で進行中の作業ですが、私たちはあなたと他のユーザーと協力してこのサポートを完成させています。

+0

ありがとうございました!だから私は、まずTo-doリストでDeviceContextsにその "不透明なハンドル"を作成することだと思います。あなたが探しているものの詳細を私に教えれば、それに取り掛かることができます。あなたはGitの問題や私が作業を開始することができます何かを開始することができます。 –

+0

https://github.com/tensorflow/tensorflow/issues/4359 – vrv

+0

「register_gpu_gpu_copy」はどこで定義され使用されていますか?私はTensorFlowのどこにもそれを見つけることができません。私はそれが何らかの種類のマクロであると想定していますが、それに一致するようなマクロは見つかりません。正規表現のグロッピングはあまり与えるものではない –