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

その他

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


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

はじめに

oneAPI Collective Communications Library (oneCCL) は、ディープラーニング・アプリケーションで行われる通信パターンのプリミティブを提供します。oneCCL は、複数の oneAPI デバイスを搭載するプラットフォームのスケールアップと、複数の計算ノードで構成されるクラスターのスケールアウトの両方をサポートします。

oneCCL は、ディープラーニング (DL) アルゴリズムで使用される次の通信パターンをサポートします。

  • allgatherv
  • allreduce
  • alltoallv
  • broadcast
  • reduce
  • reduce_scatter

oneCCL は次のような最適化と関数に対する制御を提供します。

  • 通信操作の優先順位付け
  • 永続的な通信操作 (1 度きりの初期化と繰り返し実行の分離を可能にします)

名前空間

このセクションでは oneCCL 名前空間の規則について説明します。

oneapi::ccl 名前空間

oneapi::ccl 名前空間には、ライブラリーによって定義されたパブリック識別子が含まれる必要があります。

ccl 名前空間

代替の ccl 名前空間は、oneapi::ccl 名前空間のエイリアスと見なされます。

現在のバージョンの oneCCL 仕様

これは、oneCCL 仕様のバージョン 1.0 です。

定義

oneCCL の概念


oneCCL 仕様では、次の概念のリストが定義されています。

  • デバイス
  • コンテキスト
  • キー値のストア
  • コミュニケーター
  • ストリーム
  • イベント
  • 操作属性

デバイス

注: 以下では、ネイティブデバイス/コンテキスト/ストリーム/イベントが SYCL デバイスのランタイム・スコープで定義されています。

using native_device_type = sycl::device;
using native_context_type = sycl::context;
using native_stream_type = sycl::queue;
using native_event_type = sycl::event;

oneCCL 仕様では、device (CPU、システム内の特定の GPU カード、または通信操作に関わるその他のデバイスなど) を計算デバイスとして定義します。device は、コミュニケーターのランク (通信操作でアドレス指定可能なエンティティー) に対応します。

oneCCL 仕様は、ネイティブ・オブジェクトなし (ホストに対応) と、ネイティブ・オブジェクト (native_device_type) を使用する device クラスのインスタンスを作成する方法を定義します。

構文とパラメーターについては、こちら (英語) を参照してください。

コンテキスト

oneCCL 仕様では、コンテキストをリソース管理と、コンテキストで指定された複数のデバイスで通信操作を行う計算デバイス context の抽象化として定義します。

oneCCL 仕様は、ネイティブ・オブジェクトなしでネイティブ・オブジェクト (native_context_type) を使用する context クラスのインスタンスを作成する方法を定義します。

構文とパラメーターについては、こちら (英語) を参照してください。

Key-Value Store (キー値のストア)

kvs_interface は、oneCCL コミュニケーターの作成中にランク間の接続を確立する際に、使用する key-value store (KVS) インターフェイスを定義します。インターフェイスには、get と set メソッドのブロックが含まれます。

構文とパラメーターについては、こちら (英語) を参照してください。

コミュニケーター

oneCCL 仕様は、通信ランクのグループを記述する communicator クラスを定義します。ランクは通信操作にアクセス可能なエンティティーであり、単一の oneCCL デバイスに対応します。

communicator は、同種類の oneCCL デバイス間のメモリーバッファーの通信操作を定義します。すべての oneCCL デバイスは、同じタイプのネイティブ・デバイス・オブジェクト (CPU のみ、または GPU のみ) をラップするか、ネイティブ・オブジェクトをラップしません。

それぞれのプロセスは、複数ランクに対応することがあります。

注: プロセスごとの複数ランクのサポートはオプションです。

ユーザーが指定するサイズ、ランクからデバイスへのマッピング/ランク、コンテキスト、および KVS を使用して新しいコミュニケーターを作成します。

注: device と context オブジェクトが省略されると、ネイティブ・オブジェクトを使用せずに ccl::create_device() と ccl::create_context() 関数を使用して作成されます。

構文とパラメーターについては、こちら (英語) を参照してください。

ストリーム

oneCCL 仕様では、コミュニケーター通信操作の実行コンテキストをカプセル化する抽象化としてストリームを定義します。

ストリームは、コミュニケーターの通信操作に渡されます。

oneCCL 仕様は、ネイティブ・オブジェクトなしでネイティブ・オブジェクト (native_stream_type) を使用する stream クラスのインスタンスを作成する方法を定義します。

構文とパラメーターについては、こちら (英語) を参照してください。

イベント

oneCCL 仕様では、コミュニケーター通信操作の実行コンテキストをカプセル化する抽象化としてイベントを定義します。

oneCCL の各種通信操作は、操作の進行状況を追跡するイベント・オブジェクトを返す必要があります。イベントのベクトルをコミュニケーター通信操作に渡して、操作の入力依存関係を指定することができます。

注: 入力イベント処理のサポートはオプションです

oneCCL 仕様は、ネイティブ・オブジェクト (native_event_type) を使用して event クラスのインスタンスを作成する方法を定義します。

構文とパラメーターについては、こちら (英語) を参照してください。

操作属性

操作属性を介して通信操作の動作を制御できます。


法務上の注意書き

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 またはその子会社の商標です。

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

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