oneAPI 1.3 暫定仕様書 Rev. 1 の解説 (7)

その他

この記事は、https://www.oneapi.io/spec/ で 2023年9月14日に公開された『oneAPI 1.3 Provisional Specification Rev. 1』 (HTMLPDF) をベースにしています。原文は2000 ページ近くあり、翻訳の時間とリソースも限られるため、全文翻訳ではなく、記事形式で区切った仕様とその解説を提供することにしました。


この回では、『oneAPI 1.3 Provisional Specification Rev. 1』の「oneDNN」の節を取り上げています。

oneDNN

oneAPI ディープ・ニューラル・ネットワーク・ライブラリー (oneDNN) は、ディープラーニング・アプリケーションとフレームワーク向けのビルディング・ブロックを含むパフォーマンス・ライブラリーです。oneDNN は以下をサポートします。

  • CNN プリミティブ (畳み込み、内積、プーリングなど)
  • RNN プリミティブ (LSTM、Vanilla、RNN、GRU)
  • 正規化 (LRN、バッチ、レイヤー)
  • 要素ごとの操作 (ReLU、Tanh、ELU、Abs など)
  • Softmax、Sum、Concat、Shuffle
  • 最適化されたデータレイアウト間との並べ替え
  • 8 ビット整数、16 ビット、32 ビット、そして bfloat16 浮動小数点データタイプ
// Tensor の次元
int N, C, H, W;

// ユーザーの DPC++ オブジェクト
sycl::device dev {sycl::gpu_selector {}}; // デバイス
sycl::context ctx {dev}; // コンテキスト
sycl::queue queue {dev}; // キュー
std::vector<sycl::event> dependencies; // 入力イベント依存関係
// ソース
float *buf_src = static_cast<float *>(
        sycl::malloc_device((N * C * H * W) * sizeof(float), dev, ctx));
// 結果
float *buf_dst = static_cast<float *>(
        sycl::malloc_device((N * C * H * W) * sizeof(float), dev, ctx));

// ユーザーの DPC++ GPU デバイスとコンテキストをカプセル化するエンジンを作成
dnnl::engine engine = dnnl::sycl_interop::make_engine(dev, ctx);
// ユーザーの DPC++ GPU  キューをカプセル化するストリームを作成
dnnl::stream stream = dnnl::sycl_interop::make_stream(engine, queue);
// 基盤となるストレージとして buf_src と buf_dst を使用するメモリー・オブジェクトを作成
dnnl::memory mem_src({{N, C, H, W}, dnnl::memory::data_type::f32,
                             dnnl::memory::format_tag::nhwc},
        engine, buf_src);
dnnl::memory mem_dst({{N, C, H, W}, dnnl::memory::data_type::f32,
                             dnnl::memory::format_tag::nhwc},
        engine, buf_dst);
// ReLU 要素ごとのプリミティブを作成
dnnl::eltwise_forward relu {
        {{dnnl::prop_kind::forward_inference, dnnl::algorithm::eltwise_relu,
                 mem_src.get_desc(), 0.f, 0.f},
                engine}};
// 入力依存関係を渡して、出力依存関係を取得するストリームで、
// ReLU プリミティブを実行
sycl::event event = dnnl::sycl_interop::execute(relu, stream,
        {{DNNL_ARG_SRC, mem_src}, {DNNL_ARG_DST, mem_dst}}, dependencies);

このセクションには次の節が含まれます。

オープンソース実装

インテルは、Apache* ライセンスの下でオープンソース実装 (英語) を公開しています。

実装の注意点

この仕様は、oneDNN の高レベルの説明を提供し、オープンソース実装 (英語) 固有の詳細をすべて網羅しているわけではありません。具体的には、高度に最適化されたメモリー形式やプロファイル・ツールとの統合についてはこの仕様の対象外です。これは、仕様の移植性を考慮した意図的なものです。この仕様で定義される API を使用するコードは、オープンソース実装やこの仕様のほかの潜在的な実装で移植性があることが期待されます。

将来的にこの節では、仕様のさまざまな実装がどのように協調し共存するか、詳しく説明する予定です。

テスト

インテルの oneDNN バイナリーの配布には、ライブラリーの機能テストに利用できるサンプルコードが含まれています。

オープンソース実装 (英語) には包括的なテストスイートが含まれます。手順については README (英語) を参照してください。


法務上の注意書き

The content of this oneAPI Specification is licensed under the Creative Commons Attribution 4.0 International License (英語). Unless stated otherwise, the sample code examples in this document are released to you under the MIT license (英語).

This specification is a continuation of Intel’s decades-long history of working with standards groups and industry/academia initiatives such as The Khronos Group*, to create and define specifications in an open and fair process to achieve interoperability and interchangeability. oneAPI is intended to be an open specification and we encourage you to help us make it better. Your feedback is optional, but to enable Intel to incorporate any feedback you may provide to this specification, and to further upstream your feedback to other standards bodies, including The Khronos Group SYCL* specification, please submit your feedback under the terms and conditions below. Any contribution of your feedback to the oneAPI Specification does not prohibit you from also contributing your feedback directly to other standard bodies, including The Khronos Group under their respective submission policies.

By opening an issue, providing feedback, or otherwise contributing to the specification, you agree that Intel will be free to use, disclose, reproduce, modify, license, or otherwise distribute your feedback at its sole discretion without any obligations or restrictions of any kind, including without limitation, intellectual property rights or licensing obligations.

This document contains information on products, services and/or processes in development. All information provided here is subject to change without notice.

© Intel Corporation. Intel、インテル、Intel ロゴ、その他のインテルの名称やロゴは、Intel Corporation またはその子会社の商標です。

* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

« パート 6        目次        パート 8 »
タイトルとURLをコピーしました