SYCLomatic ： 新しい CUDA* からSYCL* へのコード移行ツール
SYCL* と oneAPI でベンダーへの依存から
ソフトウェアを解放
SigOpt のインテリジェントな実験プラットフォーム
Issue

49
2022

目次

注目記事

The Parallel Universe2

編集者からのメッセージ

3

SYCLomatic ： 新しい CUDA* から SYCL* へのコード移行ツール

6

SYCL* と oneAPI でベンダーへの依存からソフトウェアを解放12

SigOpt のインテリジェントな実験プラットフォーム

18

インテル® Xeon® スケーラブル ・プロセッサーでの分散トレーニング

28

このオープンソース ・プロジェクトにぜひ貢献してください

CUDA* から SYCL* への移行がさらに容易に

エンドツーエンドの推薦システムの大衆化

Tencent AI Arena プラットフォーム上での AI モデルのトレーニングに関するケース
スタディー

プレシジョン ・ メディシンで費用対効果の高いゲノミクスを実現

32

シングルセル遺伝子解析の高速化

39

Sentieon DNASeq* と NVIDIA Clara Parabricks* のパフォーマンスの比較

エンドツーエンドの Scanpy パイプラインでインテル® Xeon® プロセッサーが NVIDIA*
Tesla* A100 を凌駕

クロスプラットフォーム ・ ソフトウェア開発にツールを活用

Windows* Subsystem for Linux* 2 と Visual Studio* Code を使用して Linux* とWindows* 向けに oneAPI をビルドする方法© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

44

The Parallel Universe

3

編集者からのメッセージ
Henry A. Gabb インテル コーポレーション シニア主席エンジニア
HPC と並列コンピューティング分野で長年の経験があり、 並列プログラミングに関する記事を多数出版しています。 『Developing Multithreaded Applications ： A Platform Consistent Approach』の 編 集 者 / 共 著 者 で、 イ ン テル と Microsoft* に よる Universal Parallel Computing ResearchCenters のプログラム ・ マネージャーを務めました。

インテルが Codeplay Software を買収
2022 年 6月にインテルは Codeplay Software を買収しました。これは重要な意味を持ちます。オープンスタンダード、 クロスアーキテクチャー開発のリーダーである Codeplay の買収は、 SYCL* と oneAPI エコシステムの採用を促進するでしょう。 以下は、 ブログ記事 「インテルが Codeplay Software を買収」 （英語） からの抜粋です。
「Codeplay は、 oneAPI で採用された Khronos のオープンスタンダードのプログラミング ・
モデルである SYCL* に関する専門知識とリーダーシップ、 および SYCL* や OpenCL* などのオープン ・エコシステムの活動から、 RISC-V* に至る、 幅広い業界への大きな貢献で世界的に認められている企業です。 Codeplay は、 oneAPI を大衆に届けるという使命を担い、 多様な
ハードウェア ・プラットフォームをサポートする製品をグローバルに幅広く提供しています。」
これを 記念して、 Codeplay か ら の 寄 稿 を含め、 最 初の 2 つ の 記 事 で SYCL* を取り上げ ま す。 注目記 事「SYCLomatic ： 新しい CUDA* から SYCL* へのコード移行ツール」 では、 新しいオープンソース ・プロジェクトを紹介します。 SYCLomatic は、 ツールを改善するため、 ユーザーからの貢献とフィードバックを求めています。 この
プロジェクトは、 単一ベンダーの独占的なエコシステムから開発者を解放する重要なステップである、 SYCL* 標
準の採用を促進するコミュニティーのコラボレーションを可能にします。 続く記事 「SYCL* と oneAPI でベンダーへの依存からソフトウェアを解放」 では、 Codeplay の Rob Burns 氏と Joe Todd 氏が SYCLomatic が実際にどのように機能するのかを実証します。
「SigOpt の インテリジェントな 実 験 プ ラットフォ ーム」 は、 最 新 の 推 薦システムを実行する際 の 課 題について 議 論し、 そのようなシステムを 作成 するエンドツーエンドのプロセスを大 衆化する方法を示します。
「インテル® Xeon® スケーラブル ・ プロセッサー上での分散トレーニング」 では、 Tencent の共同研究者とともに、
Tencent AI Arena プラットフォーム用の AI モデルのトレーニングに関するケーススタディーを紹介します。

© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

4

ご存じの方もいらっしゃるかと思いますが、 私は生命科学の専攻であったため、 遺伝学に関する記事が 2 つあるのは喜ばしいことです。 Sentieon 社の Don Freed 氏、 Zhipan Li 氏と共同で執筆した 「プレシジョン ・
メディシンで費用対効果の高いゲノミクスを実現」 では、 米国食品医薬品局 （FDA） の遺伝子ベンチマークを使用して、 インテル® Xeon® プロセッサーが競合他社よりも優れたパフォーマンスと費用対効果を提供することを示します。 「シングルセル遺伝子解析の高速化」 では、 インテル ラボと共同研究チームが、 インテル®
Xeon® プロセッサーがエンドツーエンドの遺伝学パイプラインにおいて優れたパフォーマンスを発揮する方法を紹介します。 これらの記事では、 競合他社がインテル® Xeon® プロセッサーのパフォーマンスを阻害して、 スピー
ドアップの結果を誇張することがある点についても説明しています。
本号の締めは、 Windows* Subsystem for Linux* 2 と Visual Studio* Code を使用して、 Linux* と Windows*
向けに oneAPI をビルドするという興味深いデモです。「クロスプラットフォーム・ソフトウェア開発にツールを活用」には多くの興味深い点がありますが、 1 つの Visual Studio* Code インスタンスで Linux* と Windows* が並んで動作する様子は格別です。 デュアルブート ・ システムで Linux* と Windows* を切り替える煩わしさが、 過去のものになるかもしれないことを示しています。
コードの現代化、 ビジュアル ・コンピューティング、 データセンターとクラウド ・コンピューティング、 データサイエンス、
システムと IoT 開発、 oneAPI を利用したヘテロジニアス並列コンピューティング向けのインテル ・ ソリューション
の詳細は、 Tech.Decoded （英語） を参照してください。
Henry A. Gabb
2022 年 7 月

ポッドキャスト

災害管理の使命と科学的発見

アニメーター、 デジタルコンテンツ制作者、 建築エンジニア、 熟練したゲーマーの皆さん、インテル® oneAPI ベース & レンダリング ・ ツールキットでビジュアライゼーションの限界に挑戦してみてください。 詳細 >© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

聴取する （英語）将来に通用するコード。
プロプライエタリーの壁を超えて成長。

複数の言語をサポートし、 ヘテロジニアス計算パフォーマンスを実現する、単一のオープンなプログラミング ・ モデルで、 コードの幅を広げましょう。
オープンスタンダードに根ざしたインテル® oneAPI は、 クロスアーキテクチャーのライブラリー、コンパイラー、 ツールを提供し、 コードをより多くのハードウェアに対応させ、比類ないパフォーマンスを実現します。
インテル® oneAPI の詳細

The Parallel Universe

6

SYCLomatic ： 新しい
CUDA* から SYCL* へのコード移行ツール
このオープンソース ・プロジェクトにぜひ貢献してください

Kent Moffat インテル コーポレーション シニア製品マネージャー

CPU、GPU、FPGA、およびその他のアーキテクチャーでハイパフォーマンスと効率的な開発生産性を実現するには、開発者が目の前のタスクに最適なハードウェアを選択できる統一されたプログラミング ・ モデルが必要です。 それには、 標準化され、 拡張可能な、 高水準でオープンスタンダードのヘテロジニアス ・プログラミング言語が不可欠です。 また、 開発者の生産性を向上させるとともに、 どのアーキテクチャーでも一貫したパフォーマンスを提供する必要があります。 Khronos Group の C++ ベースの SYCL* 標準は、 C++ の機能を拡張し、マルチアーキテクチャーとディスジョイント ・メモリー構成をサポートすることで、 これらの課題に対処しています。

© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

7

SYCL* の導入を容易にするため、 開発者は SYCL* の開発をゼロから始めるのではなく、 既存の CUDA* GPU
コードを移行したいと考えるかもしれません。 以前、 インテル® DPC++ 互換性ツール （インテル® DPCT） を使用
して CUDA* から SYCL* へ移行する記事を掲載しました。 このツールは、 インテル® oneAPI ベース ・ ツールキットに含まれており、 インテルのテクニカル ・コンサルティング ・エンジニアによってサポートされています。

SYCLomatic オープンソース ・プロジェクト
この互換性ツールは、 開発者の要望に応え、 「SYCLomatic」 という名前でオープンソース ・プロジェクトとしてリリースされています。 多くの組織がこのツールを使用しており、 一部の組織ではその機能を強化し、 カスタマ
イズして自分たちのニーズに合わせてチューニングしています。 その 1 つがアルゴンヌ国立研究所です。
「CRK-HACC は、 現在活発に開発が行われている宇宙論的 N 体シミュレーション ・ コードです。
Aurora の準備のため、 インテル® DPC++ 互換性ツールを使用して、 20 以上の （CUDA*） カーネルを SYCL* に素早く移行できました。 コード移行ツールの現在のバージョンはファンクターへの移行をサポートしていないため、 簡単な Clang ツールを記述して、 生成された SYCL* ソースコードをニーズに合うようにリファクタリングしています。 オープンソースの SYCLomatic プロジェクトでは、
私たちのこれまでの研究を統合して、 より堅牢なソリューションを提供し、 ファンクターを利用可能な
移行オプションにすることを計画しています。」
アルゴンヌ国立研究所
宇宙物理学 & 先進コンピューティング
HACC （Hardware/Hybrid Accelerated Cosmology Code）
Steve （Esteban） Rangel 氏
LLVM 例外付き Apache* 2.0 ライセンスを利用し、 GitHub* でホストされている SYCLomatic プロジェクトは、
CPU、 GPU、 FPGA 向けのオープンなヘテロジニアス開発を推進するため、 開発者が貢献したり、 フィードバックを送ることができるコミュニティーを用意しています。 GitHub* ポータルにある「CONTRIBUTING.md」というガイドで、プロジェクトへの技術的貢献の手順が説明されています。 開発者の皆さん、 ぜひ本ツールを使用し、 ツールを進化させるためフィードバックや貢献をお寄せください。 このオープンソース ・プロジェクトは、 SYCL* 標準の採用を推進するコミュニティーに協力でき、開発者を単一ベンダーの独占的エコシステムから解放する重要なステップとなります。
SYCLomatic に加えられた改善点は、 インテル® DPC++ 互換性ツール製品にもフィードバックされます。

SYCLomatic ツールの仕組み
SYCLomatic は、 CUDA* から SYCL* へ の 移 行を支 援し、 通常、 CUDA* コードの 90 ～ 95% を自動的に
SYCL* コードに移行します。1 開発者は残りのコーディングを手動で行い、 ターゲット ・アーキテクチャーで求められるパフォーマンスを達成できるようにチューニングします （図 1）。

1

出典 ： 2021 年 9 月現在のインテルによる推定。 Rodinia、 SHOC、 PENNANT など、 70 種類の HPC ベンチマークとサンプルの測定結果に基づいています。 結果は異なることがあります。

© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe8

図 1. SYCLomatic のワークフロー

コード移行の成功例
多くの研究機関やインテルのお客様が、 SYCLomatic と同じ技術を持つインテル® DPC++ 互換性ツールを使用
して、 複数のベンダーのアーキテクチャー上で CUDA* コードから SYCL* （または oneAPI の SYCL* 実装である
データ並列 C++） への移行に成功しています。 例として、 ストックホルム大学の GROMACS 2022 （英語）、 Zuse
Institute Berlin （ZIB） （英語） の easyWave、 Samsung Medison （英語）、 Bittware （英語） などが挙げられ
ます （その他の例は、 oneAPI DevSummit のコンテンツ （英語） を参照してください）。 また、 アルゴンヌ国立研究所の Aurora スーパーコンピューター （英語）、 ライプニッツ・スーパーコンピューティング・センター （LRZ） （英語）、
GE Healthcare （英語） など、 複数のお客様が現在および将来のインテル® Iris® Xe アーキテクチャー ・ ベースのGPU でコードをテストしています。

例 ： CUDA* ベクトル加算の SYCL* への移行
移行プロセスの実用的な概要を説明するため、 ここではベクトル加算の簡単な CUDA* 実装を使用します。 そして、
SYCLomatic が生成するコードを詳しく見ていきます。 主に、 CUDA* と SYCL* が大きく異なるコードセクションに注目します。
このタスクには、 インテル® oneAPI ベース ・ ツールキットの SYCLomatic とインテル® oneAPI DPC++/C++ コンパ
イラーを使用します。 ツールキットをインストールするには、 「インテル® oneAPI インストール ・ ガイド」 （英語） の手順に従ってください。 次のワークフローを使用して、 既存の CUDA* アプリケーションを SYCL* へ移行します。
1. intercept-build ユーティリティーを使用して Makefile が実行するコマンドをインターセプトし、 JSON 形式のコンパイル・データベース・ファイルに保存します。 このステップは、シングルソースのプロジェクトではオプションです。
2. SYCLomatic を使用して CUDA* コードを SYCL* へ移行します。
3. 生成されたコードの正当性を検証し、 警告メッセージで明示的に示された場合は、 手動で移行を完了します。
『インテル® DPC++ 互換性ツール ・デベロッパー ・ガイドおよびリファレンス』 （英語） を確認して警告を修正します。
4. インテル® oneAPI DPC++/C++ コンパイラーでコードをコンパイルし、 プログラムを実行して、 出力を確認します。

© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

9

その後、 インテル® VTune™ プロファイラーを含むインテル® oneAPI の解析およびデバッグツールを使用して、コードをさらに最適化できます。
ベクトル加算の例について考えてみます。 ベクトル加算では、 ベクトル A と B の要素を加算してベクトル C に格納します。 CUDA* カーネルは、 これを次のように計算します。
__global__ void vector_sum(const ﬂoat *A,
const ﬂoat *B,
ﬂoat *C,
const int num_elements){
int idx = blockDim.x * blockIdx.x + threadIdx.x;
if (idx < num_elements) C[idx] = A[idx] + B[idx];}

CUDA* のスレッドブロック （スレッドのグループ） は SYCL* のワークグループに相当しますが、 スレッドのインデッ
クスの計算方法は異なります。 CUDA* では、 組込み変数を使用してスレッドを識別します （上記のコードで idx
変数をどのように計算しているかを見てください）。 SYCL* に移行すると、 同じカーネルは次のようになります。
void vector_sum(const ﬂoat *A,
const ﬂoat *B,
ﬂoat *C,
const int num_elements,
sycl::nd_item<3> item_ct1){
int idx = item_ct1.get_local_range().get(2) *item_ct1.get_group(2) +item_ct1.get_local_id(2);if (idx < num_elements) C[idx] = A[idx] + B[idx];}

CUDA* のスレッドと同様に、 SYCL* のワークアイテムは、 グローバル空間でのグローバル識別子、 またはワークグ
ループ内のローカル識別子を持ちます。 これらの識別子は nd_item 変数から得られます。 そのため、 グローバル
識別子を明示的に計算する必要はありません。 しかし、 この例では SYCL* でこれを行う方法を示しているため、
CUDA* の組込み変数と類似していることが分かります。 nd_item は、 CUDA* では dim3 型なので、 3 次元であることに注意してください。 この例では、 nd_item を 1 次元にすることができます。 これにより、 ワークアイテム
がベクトルの各要素にマップされます。 CUDA* カーネルを実行するには、 ブロックサイズと必要なブロック数を設定しなければなりません。 SYCL* では、 実行範囲を定義する必要があります。 以下のコードに示すように、 グローバ
ル範囲とローカル範囲を組み合わせた nd_range 変数でこれを行います。 グローバル範囲はワークアイテムの総数を表し、 ローカル範囲はワークグループのサイズを表します。

© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

10

const int num_elements = 512;
dpct::device_info prop;
dpct::dev_mgr::instance().get_device(0).get_device_info(prop);
const size_t max_block_size = prop.get_max_work_group_size();const size_t block_size = std::min<size_t>(max_block_size, num_elements);
range<1> global_rng(num_elements);
range<1> local_rng(block_size);
nd_range<1> kernel_rng(global_rng, local_rng);

SYCL* カーネルを呼び出すため、 parallel_for と実行範囲を使用して、 カーネルをキューに送信します。
各ワークアイテムはカーネルを一度呼び出します。 この例では、 各ベクトル要素に対して同じ数のワークアイテムがあります。 以下のようなコードになります。
dpct::get_default_queue().parallel_for(kernel_rng, [=](nd_item<1> item_ct1){
vector_sum(d_A, d_B, d_C, num_elements, item_ct1);});

ここまで、 カーネルを実装して実行する方法を見てきましたが、 カーネルを実行する前に、 メモリー割り当てと、データのデバイスへのコピーについて考える必要があります。
1. まず、 ホスト側でオペランドベクトル用のメモリーを割り当てて初期化します。
2. その後、 デバイス上でも同じことを行います。 CUDA* は cudaMalloc ルーチンを使用します。 デフォルトでは、インテル® DPCT はこのルーチンを統合共有メモリー （USM） を使用する malloc_device に移行します。
3. 次に、 memcpy コマンドを使用して、 ホストメモリーからデバイスにベクトルをコピーします。

これらのステップが完了したら、 カーネルを実行します。 実行が完了したら、 結果をホストへコピーバックして、結果の正当性を確認します。最後に、ホストとデバイスで free と sycl::free をそれぞれ呼び出して、メモリーを解放します。

まとめ
Khronos の SYCL* C++ 標準は、 複数のアーキテクチャーで動作するヘテロジニアス ・コードを開発するオープン
なパスです。 新しいオープンソース ・プロジェクトである SYCLomatic は、 以前のインテル® DPC++ 互換性
ツールと同様に、 CUDA* から SYCL* へのコード移行の利点を提供します。 そして、 誰でもこのツールの改善やチューニングに貢献できます。 ぜひお試しください。

© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe11

開発者向けのリソース• プログラミング ・ モデルの比較 ： CUDA* と SYCL* （英語）• SYCL* について （英語）• oneAPI 仕様 （英語）• インテル® oneAPI ツールキット• GitHub* の SYCLomatic プロジェクト （英語） | CONTRIBUTING.md ガイド （英語）• 初心者向け：書籍：『C++ と SYCL* によるヘテロジニアス・システムのプログラミングの習得』 （英語） | トレーニング：SYCL* の基本 （英語）• コード ・プロジェクト ： oneAPI を使用して CUDA* コードを SYCL* へ移行する （英語）• インテル® DevCloud （英語）：インテル® oneAPI ツールを利用して、さまざまなインテル® アーキテクチャー （CPU、GPU、 FPGA） でコードを開発およびテストできる無償環境です。 iSUS で翻訳した日本語版はこちら。

『oneAPI GPU 最 適 化 ガイド』 を入手して、 並列化からカーネル、 メモリーに至るまで最高のパフォーマンスを実現してください。
インテル® oneAPI ベース ・ ツールキット
は、 さまざまなアーキテクチャーに対応したハイパフォーマンスなアプリケーション
やソリューションの開発を可能にします。

詳細

Github* に ア ク セ ス し てoneAPI サ ン プ ル コ ー ド を取得しましょう。
詳細© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

Github* にアクセス （英語）The Parallel Universe

12

SYCL* と oneAPI でベンダーへの依存から
ソフトウェアを解放
CUDA* から SYCL* への移行がさらに容易に

Rod Burns Codeplay Software
Joe Todd Codeplay Software

アクセラレーターの利用は年々増加しており、 特にソフトウェア開発者は GPU を活用し、 さまざまな HPC や
AI アルゴリズムを高度に並列化されたシステムで実行しています。 MarketsandMarkets の調査 1 （英語） によると、 データセンター ・アクセラレーター市場は、 2021 年の 137 億ドルから 2026 年には 653 億ドルに成長すると予測されています。
過去 10 年ほどの間、 ソフトウェア開発者は、 本来グラフィックス処理用に設計され、 現在では AI やマシン
ラーニングを含む幅広い分野で使用されている GPU を利用する高度な並列ソフトウェアを記述するため、 主に
CUDA* に依存してきました。 ソフトウェア開発者にとって、 CUDA* は独自のプログラミング・インターフェイスであり、
NVIDIA のプロセッサー上でしか使用できないことが課題でした。 このため、 開発者は単一ベンダーに縛られ、最新のプロセッサー ・アーキテクチャーでのイノベーションが制限されてきました。

1

https://www.marketsandmarkets.com/Market-Reports/data-center-accelerator-market-48984803.html （英語）© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

13

市場は変化しており、 インテル （特に近日発売予定のインテル® Iris® Xe GPU） や、 RISC-V* 命令セット ・アーキ
テクチャーを利用した新しい特殊プロセッサーなど、 幅広いプロセッサー・ベンダーからの選択肢が増えています。
ソフトウェア開発者は、 既存のプロセッサーを最大限に活用するだけでなく、 この爆発的に増加する新しいアーキ
テクチャーやイノベーションに適応し、 活用する必要がありますが、 さまざまなベンダーの新しいプロセッサーごとに新しいコードを記述することなく、 これを実現する方法はあるのでしょうか ?
SYCL* と oneAPI は柔軟で非独占的な代替手段を提供します。 SYCL* は、 高度に並列化されたプロセッサー ・ターゲット上で動作するソフトウェアを記述する、 業界で定義されたロイヤルティー ・フリーでオープンスタンダー
ドのインターフェイスです。 SYCL* はすでに広く採用されており、 世界最速のスーパーコンピューターのいくつかでパフォーマンスの移植に使用されています。 米国のアルゴンヌ国立研究所、 ローレンス ・ バークレー国立研究所、 オークリッジ国立研究所では、 研究者が SYCL* を使用して、 それぞれのスーパーコンピューター ― Aurora（インテル® GPU を使用）、Perlmutter、Polaris、Summit （NVIDIA* GPU を使用）、Frontier （AMD* GPU を使用）
― で実行可能なソフトウェアを記述し、最高のパフォーマンスを達成しています。 ヨーロッパでは、Lumi スーパーコンピューター ・ チームが、 ヨーロッパ大陸の既存および将来のマシンでパフォーマンスを移植するため、 主要
なプログラミング ・ モデルとして SYCL* を選択しています。 また、 ほかの政府機関や民間企業では、 マルチベン
ダーのシステムに複雑なソフトウェアを導入するため SYCL* を採用しています。
SYCL* は、 アクセラレーター ・ アーキテクチャー向けのオープンで標準ベースのプログラミング 環境である
oneAPI の中核をなしています。 oneAPI は、 一般的なライブラリーとフレームワークを定義し実装することで、高度な並列ソフトウェアをさまざまなアーキテクチャーで実行し、 ハイパフォーマンスと移植性を実現できるようにします。 oneAPI には、 高度に最適化されたアプリケーションの記述に必要なビルディング ・ブロックと、 一般的な数学およびニューラル ・ ネットワーク ・アルゴリズムのライブラリーが含まれています。 これにより、 ソフトウェア
開発者は、 HPC および AI アプリケーションの作成に必要なすべてを手に入れることができます。
SYCL* は素晴らしいけれども、 すべてのコードを CUDA* から SYCL* へ移行するのは難しいのではないか、 と考える方もいらっしゃるでしょう。 それがどれほど簡単かを示すため、 N 体シミュレーション ・プロジェクトを CUDA*から SYCL* に移行する方法を説明します。
N 体シミュレーションは、 定義された一連の方程式を使用して、 架空の銀河における重力相互作用を示すために使用されます （図 1）。 このプロジェクトは、 Sarah Le Luron 氏が C++ で記述した既存のオープンソースの N 体
シミュレーションをベースにしています。 このコードは、 NVIDIA* GPU 上でシミュレーション計算の一部を並列に実行するカーネルを実装しており、 CPU で実行する場合と比べて実行時間を短縮します。

© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

14

図 1. 架空の銀河の N 体シミュレーション

このカーネルコードを SYCL* に移行するにはどうしたらよいのでしょうか ? このプロジェクトではカーネルが1 つですが、ほかのアプリケーションでは、コードベースに何百もの CUDA* カーネルがある可能性があります。
次のステップにより、 手間のかかる作業の多くを排除し、 開発時間を大幅に短縮できます。
最初のステップ では、 最 近 オープ ンソース化され た、 CUDA* を SYCL* へ 移 行する半自動 化ツールであ る
SYCLomatic（英語）を使用します。 このツールは、1 つまたは複数の CUDA* ソースファイルを SYCL* ソースコードに移行します。 変換するソースファイルを指定するだけで、 移行されたコードを含む C++ ソースファイルが生成されます。 図 2 は、 intercept-build スクリプトを使用したこの手順がいかに簡単であるかを示しています。
このスクリプトは、 コマンドとフラグを追跡して JSON ファイルに保存します。 これは、 複数のソースファイルを持つプロジェクトで便利です。 移行するソースファイルを指定すると、 SYCLomatic ツールは SYCL* コードファイル
一式と、 移行を単純化するいくつかのヘルパークラスや関数を生成します。

図 2. SYCLomatic のワークフロー© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

15

SYCLomatic が生成するコードの一部を見てみましょう （図 3）。 元のコードと移行されたコードを比較すると、組込みの平方根メソッドが変更されていることが分かります。 これは、 CUDA* バージョンから対応する SYCL*
バージョンへの単純な変換です。 また、 ツールはコメントを生成しており、 アプリケーションの最適化や正当性の確保に必要な追加の変更に関するガイドやヒントを開発者に提供していることが分かります。 その他の変更点については、 プロジェクト ・ リポジトリー （英語） で確認できます。 特筆すべきは、 この N 体プロジェクトでは、
SYCLomatic が生成したソースコードにこれ以上変更を加える必要がないことです。 これは、 SYCLomatic がいかに有効であるかを示していますが、 通常、 開発者はプロジェクトに対してある程度の手動でのコード変更を行う必要があります。

図 3. SYCLomatic を使用して CUDA* （左） から SYCL* （右） へ移行

移行が完了したら、 SYCL* コードをさまざまなプロセッサーで実行できます。 ここでは、 DPC++ コンパイラーを使用して NVIDIA* GPU ターゲットを使用します。 DPC++ は、 oneAPI イニシアチブの一部であるオープンソースの SYCL* コンパイラーです。 インテル® プロセッサー、 NVIDIA* GPU、 および AMD* GPU をサポートしています。
NVIDIA および AMD ターゲットを使用する際の環境設定方法については、Codeplay のウェブサイト（英語）とオー
プンソースの DPC++ リポジトリー （英語） を参照してください。
この N 体シミュレーションの CUDA* バージョンと SYCL* バージョンを同じ NVIDIA GeForce* GPU 上で実行すると、ネイティブ CUDA* または SYCL* のいずれを使用しても、同等のパフォーマンスが得られます（図 4）。 画像から、双方の N 体重力シミュレーションのカーネル時間は近く、 SYCL* バージョンのほうがネイティブ CUDA* に比べてわずかに高速であることが分かります。この値は実行時の条件により変わりますが、研究組織と商業組織の両方で、
SYCL* で CUDA* とほぼ同等のパフォーマンス結果を達成した例があります。 Zuse Institute Berlin の動画（英語）では、 彼らが Tsunami シミュレーション ・コードでこれを達成した事例が紹介されています。

© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

16

図 4. 元の CUDA* N 体コード （上） と移行後の SYCL* コード （下） は同等のパフォーマンスを達成

DPC++ を使用して NVIDIA* GPU 上で SYCL* を実行することでパフォーマンスの移植性を確保できますが、
ハードウェアのパフォーマンスを最大限に引き出すにはコードの微調整が必要になることがあります。 NVIDIA*
ハードウェア上で SYCL* コードを実行できるだけでなく、 NVIDIA Nsight* を含む NVIDIA* プロファイル ・
ツールの利点も得られます （図 5）。 コードや設定を変更することなく、 使い慣れたツールを使用してアプリ
ケーションの微調整や最適化を行い、 最高のパフォーマンスを達成できます。

図 5. NVIDIA Nsight* を使って CUDA* バックエンドで SYCL* アプリケーションのプロファイルが可能© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

17

これらのツールから得られる情報を調べることで、 カーネルとメモリーの最適化を追跡し、 注目すべきコード位
置を簡単に特定できます。 また、 より詳細な情報を得たい場合は、 コンパイラーの出力を参照して、 生成された低レベルの PTX 命令を調べることも可能です。 つまり、 開発者は NVIDIA* GPU 用の NVIDIA Nsight* やインテル® プラットフォーム用のインテル® VTune™ プロファイラーなど、 ターゲット ・アーキテクチャーに最適なツールを SYCL* で使うことができます。 CUDA* から SYCL* への道は、 見かけほど難しいものではなく、 その
利点は明らかです。 SYCL* で記述されたコードは、 将来を見据えたソフトウェア開発環 境を実現します。
ソフトウェア開発チームは、 インテル、 NVIDIA、 AMD などの既存のアクセラレーター・プロセッサーをターゲットにし な がら、 新しい RISC-V* ベースのアクセラレーターなど、 最 新のアーキテクチャーを採用する
準備ができます。
ここで紹介したオープンソースの N 体プロジェクトのコードを検証し、 SYCLomatic を使用して CUDA* コードを
SYCL* に移行し、 次世代プロセッサー向けにソフトウェアの将来性を確保してください。

インテル® DPC++ 互換性ツール

CUDA* アプリケーションを標準ベースのデータ並列 C++ コードに移行© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

詳細 （英語）The Parallel Universe

18

SigOpt のインテリジェントな
実験プラットフォーム
エンドツーエンドの推薦システムの大衆化

Jian Zhang インテル コーポレーション AI ソフトウェア ・ エンジニアリング ・ マネージャー
Tobias Andreasen SigOpt マシンラーニング ・ スペシャリスト

ストリーミング ・ サービスから e コマース ・プラットフォーム、 ソーシャル ・ ネットワークまで、 あらゆるものが成長するにつれて、 利用可能なデータや効率的なアルゴリズムの必要性も高まっています。 これらのプラットフォームを強化し、 エンドユーザーを惹きつけるため、 推薦システムに投資する企業が増えてきています。 最新の推薦システ
ムでは、 複雑なディープラーニング （DL） モデルに対して高いサービスレベル契約を確保しながら、 膨大なデータ処理と特徴量エンジニアリングの両方を処理する複雑なパイプラインが必要とされます。 さらに、 これらの複雑なDL モデルは、 トレーニング ・ コストを抑えつつ、 最高のパフォーマンスを保証するため、 常に更新と再トレーニン
グを行う必要があります。
この記事では、 最新の推薦システムを運用する上での課題を紹介し、 これらの課題に取り組むため、 Apache
Spark* をベースにした最適化された並列データ処理と、 SigOpt AutoML によるユーザーガイド付きの自動モデ
ル大衆化を含む、エンドツーエンド （E2E） の大衆化ソリューションを提案します。 そして、このソリューションにより、一般的な推薦システムのワークロードにおいて、 商用クラスター上で E2E パイプライン効率がどのように改善されるかを示します。

© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

19

目的
推薦システムの課題
推薦システムの目的は、 ユーザーに関するコンテキストと、 すべての利用可能な嗜好に関するコンテキストに基づ
いて、 ユーザーの嗜好を自動的に予測することです。 推薦システムは、 小売や e コマース、 ヘルスケア、 交通機関などにおいて着実に増加しています。 プラットフォームによっては、 自動推薦システムによる推薦が売上の 30% を占めることもあります。 Amazon で消費者が購入する商品の 35%、Netflix でユーザーが視聴する商品の 75% は、それぞれ自動推薦からと言われています （出展 ： How Retailers Can Keep Up with Consumers （英語））。1
図 1 に、 データ処理とモデリングという 2 つの主要なワークストリームからなる最新の推薦システムのアーキテク
チャーを示します。 データ処理では、 データの収集と前処理を行い、 特徴量エンジニアリングを用いてモデルのトレーニングに使用する特徴量を生成します。 モデリングは、 モデルのトレーニングと供給の 2 つのサブカテゴ
リーに分類されます。

図 1. 推薦システムのアーキテクチャー1https://www.mckinsey.com/industries/retail/our-insights/how-retailers-can-keep-up-with-consumers （英語）© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

20

E2E 推薦システムの構築では精度が重要ですが、 モデルやデータセットが大きくなりすぎると問題が発生します。
• 大規模なデータセット：推薦システムは、 しばしば大規模なデータセット （テラバイト、 場合によってはペタバイト）を使ってトレーニングされるため、 データの保存と処理に大規模なクラスターが必要になります。 また、 データ処理クラスターとトレーニング / 推論クラスター間のデータ移動に時間がかかることも課題です。
• データの前処理 ： データセットの読み込み、 クリーニング、 前処理、 および DL モデルやフレームワークに適した形式への変換が必要です。 このため、 処理するデータの種類に応じて、 バッチ処理 / ストリーミング処理などの複雑なデータ処理が必要になります。
• 特徴量エンジニアリング ： 多数の特徴量を作成し、 設計し、 テストする必要があるため、 エラーが発生しやすく、時間がかかります。
• モデルとアルゴリズム ： 企業は、 最適なビジネス予測を行うため、 複雑なモデルとアルゴリズムを開発します。
これらのモデルには、 深い専門知識と独自の能力が必要です。
• 実験の繰り返し ： 最適なモデルを構築し、 維持するためには、 何度も実験を繰り返す必要があります。
• 膨大な埋め込みテーブル ： カテゴリー特徴は、 埋め込みと大量のメモリーを必要とし、 帯域幅を大量に消費する傾向があります。
• 分散トレーニング ： 重いモデルは通常、 非常に高い計算能力を必要とするため、 分散トレーニングが必須であり、ハードウェアとソフトウェアのスケーラビリティーが重要な課題となります。

人工知能 （AI） の大衆化
AI の大衆化の目的は、 すべての組織やエンドユーザーが AI を安価に利用できるようにすることです。 現在、 AI の利用は、 この分野で特別なトレーニングを受けたデータ ・ サイエンティストやデータアナリストに限定されています。
そのため、 より多くのユーザーが AI を利用できるようにすることが、 AI の大衆化の目的の 1 つとなっています。
さらに、 AI は高価なハードウェアを必要とするため、 データセンターに存在する一般的なハードウェアで AI をスケールさせることも、 AI の大衆化の目的の 1 つです。
大衆化が必要な項目は複数あります。
• データ ： AI はデータがなければ分析情報を生成できないため、 データの大衆化が優先されます。 データ量だけでなく、 データ品質の向上や容易なデータアクセスと高速化も重要です。
• インフラストラクチャー ： AI の有効性は、 インフラストラクチャーに依存します。 ソフトウェアとハードウェア ・プラットフォームのアーキテクチャー、 効率的なリソース割り当て管理、 自動スケーリングは、 すべてインフラス
トラクチャーの大衆化にとって重要な要素です。
• ハードウェア ： AI は計算集約型であるため、 特殊な、 場合によっては高価なアクセラレーターを必要とします。
大衆化により、 AI フレームワークを高価なアクセラレーターから一般的なハードウェアに移行し、 コスト軽減を図ります。
• アルゴリズム ： 正確な予測や推論を行うには、 モデルやアルゴリズムが非常に複雑になる可能性があります。
大衆化は、 AI アルゴリズムの使用、 開発、 共有を容易にし、 参入障壁を軽減します。

© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

21

SigOptSigOpt のインテリジェントな実験プラットフォームは、 ユーザーが最適なモデルを作成するのを支援します。
SigOpt は、 モデリング ・フレームワークに依存しません。 モデリングプロセスを通じて行われたすべてのことを自動的に追跡し、 ログに記録するため、 ユーザーはホストされたダッシュボードですべてを可視化できます。 また、
SigOpt は独自の最適化アルゴリズムを提供し、 ユーザーが最高のパフォーマンスを発揮できるようにモデルの最適化を支援します。 SigOpt は、 複数のメトリックを最適化し、 これらのメトリックと最終モデルへの影響を監視するため、 しきい値と制約の両方を追加する機能を提供します。

Smart Democratization Advisor
ディープラーニング推薦モデル （DLRM） を本番環境に導入する際にユーザーが苦労しているのを見て、 SigOpt
ではトレーニング時間の長さ、 メモリー消費量の多さ、 収束の遅さ、 通信オーバーヘッドなどの共通の課題に対応するため、 DLRM の大衆化に取り組むことにしました。 そして、 SigOpt AutoML 用のパラメーター化された設定ファイルを生成するヒューマン ・ インテリジェンス強化ツールキット、 Smart Democratization Advisor（SDA） を開発しました （図 2）。 SDA は SigOpt を利用して、 インテリジェントな最適化によるトレーニングの高速化、 モデルサイズの縮小、 最適な勾配降下法の特定、 膨大なルックアップ ・ テーブルを検索する必要性の軽減を自動で実現します。

図 2. SDA の概要

SDA は、 DLRM のような特定のモデルをどのようにパラメーター化するかという専門家レベルの知識に基づいて、データ、 特徴形状、モデルに関する入力情報に応じて、 最適なレイヤー数、 オプティマイザー、 ハイパーパラメーターを決定し、 SigOpt AutoML 用のパラメーター化された構成を自動生成します。

© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

22

生成された設定には、 ターゲットの特徴、 モデル、 モデルメトリック、 およびエポック、 ステップなどのトレーニン
グ固有のパラメーターが含まれます。 SDA は、 時間のかかる手動でのモデル ・ チューニングと最適化プロセスを自動化されたハイパーパラメーター最適化 （HPO） に変換して、 AI の大衆化プロセスを簡素化し、 効率を高め、
データ ・ サイエンティストがより多くの価値を提供できるようにします。

SDA の例
SDA は、 すべての組込みモデルに対して、 モデル・パラメーター、 トレーニング・パラメーター、 SigOpt パラメーターなどを含むパラメーター設定を YAML 形式で自動生成します。 図 3 は、 モデル ・ パラメーター （層数、 層あたりの隠れユニット、 埋め込みサイズ、 ドロップアウト率など）、 トレーニング・パラメーター （学習率、 学習率減衰、ウォー
ムアップ ・ステップ、 バッチサイズ、 オプティマイザーなど）、 SigOpt パラメーター （観測上限、 並列バンド幅など）を含むワイド & ディープモデルの例です。 ユーザーはどのカテゴリーでも自由にパラメーターを追加 / 削除できます。

図 3. SDA により生成されたワイド & ディープモデル用の YAML ファイル© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

23

YAML ファイルを生成したら、 SigOpt 最適化ループを開始できます。 SDA が生成したモデル ・ パラメーターを使用することで、 SigOpt の実験回数を大幅に削減することが可能です。 一方、 SDA は SigOpt のマルチメトリック
最適化を活用し、 AutoML の効率をさらに向上させることができます。 この共同ソリューションにより、 モデルを本番環境に投入する時間を短縮できます。

パフォーマンスの評価
SDA のパフォーマンスを評価するため、 いくつかの実験を計画し、 SDA が典型的な推薦システムを自動的に大衆化できるか、 またオリジナルモデルと比較してどのようなパフォーマンスを示すかを確認しました。
DLRM （英語） は、 Meta がオープンソース化したパーソナル化モデルです （図 4）。 DLRM は、 協調フィルタリ
ングと予測分析ベースのアプローチという、 推薦システムにおける 2 つの視点の統合によって考案されました。
DLRM は、 実稼働規模のデータを効率良く処理し、 最先端の結果を提供できます。 疎な特徴を処理するため埋め込みを活用し、 密な （数値） 特徴を処理するため多層パーセプトロン （MLP） を採用し、 さらに統計的手法を使用して明示的に特徴と相互作用します。 最後に、 その相互作用を別の MLP で後処理して、 イベントの確率を予測します。

図 4. DLRM モデルのアーキテクチャー

一般的な CPU 上での DLRM には課題があります。 最初の NumPy* データ処理とモデル ・ トレーニングに数日かかる場合があります。 データ処理については、 シングルスレッドの NumPy* データ処理がボトルネックになります。
この課題に対応するため、 インテルは PySpark ベースの推薦システム向けに並列データ処理ツールキット RecDP（英語） を開発し、 オープンソース化しました。 RecDP は、 データ処理を行う際にマルチスレッドとマルチノードの利点を十分に活用し、 オリジナルのデータ処理ソリューションに比べて最大で 100 倍のスピードアップを実現できます。
テストは、 ノードごとに 2 基のインテル® Xeon® Platinum 8358 プロセッサー、 512GB メモリーが搭載され、40Gb イーサネットで接続された 4 ノードのクラスターで実施されました。 そして、 1TB のインテル® SSD DC
P4500 NVMe がデータドライブとして使用されました。 表 1 に詳細なシステム構成を示します。

© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

24

表 1. システム構成

SDA からの改善を評価するため、 4 つのテストケースを用意しました （表 2）。
• オリジナルの DLRM ： E2E モデル ・ トレーニング時間をメトリックとするオリジナルの DLRM モデル。
• SDA を利用した DLRM ： SDA で最適化されたモデル （すべてのモデル ・ チューニングと最適化を含む）。
• SigOpt AutoML ： 5 つの SigOpt 実験の合計実行時間。
• SDA を利用した SigOpt AutoML ： SDA によって生成された設定を使用した SigOpt 実験の合計実行時間。

© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe25

表 2. テスト構成

4 つのテストケースの DLRM パフォーマンスの比較を図 5 に示します。 SDA はオリジナルの DLRM モデルと同じAUC（ROC 曲線下の面積）を維持しながら、オリジナルの DLRM モデルと比較して 5.4 倍のパフォーマンス向上と、
SigOpt AutoML の 5 回の実験で 5.2 倍のスピードアップを達成しています。

図 5. DLRM パフォーマンスの比較© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

26

SDA は、 SigOpt のマルチメトリックとメトリックのしきい値がなければ、 このような結果を出すことはできません。
SigOpt のチューニング過程におけるマルチメトリック （精度とトレーニング時間） の効果を評価するため、 SigOpt
AutoML と SDA のパフォーマンスをマルチメトリックを使用した場合としない場合で比較しました。 図 6 から、
マルチメトリックとメトリックのしきい値が、 トレーニング時間を短縮し、 最良のメトリックで最大 1.26 倍のスピードアップを達成していることが分かります。

図 6. マルチメトリックのパフォーマンス

マルチメトリックの効果を分析するため、 マルチメトリックを使用した場合としない場合の時間と AUC を調査しました （図 7）。 マルチメトリックとメトリックのしきい値により、 同じ AUC でありながら、 トレーニング時間が短い
実験数が増加しました。

図 7. マルチメトリックとメトリックのしきい値を使用した場合としない場合の最良のメトリックの比較© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

27

まとめ
推薦システムは、 ビジネス価値をもたらすため普及が拡大していますが、 そのユニークな性質から多くの課題もあります。 E2E AI の大衆化は、 それらの課題を解決し、 すべての組織とユーザーが AI にアクセスし、 手頃な価格で利用できるようにすることを目標としています。 この記事では、 AI の大衆化を単純化および自動化するため、インテルの AI 大衆化キットのコンポーネントの 1 つである SDA を紹介しました。 SDA は、 内蔵の専門知識を基に、 SigOpt AutoML 用のパラメーター化された設定ファイルを生成するツールキットです。 パフォーマン
スの評価では、 SDA を利用した SigOpt AutoML は、 同じ AUC を維持しながら DLRM モデルで最大 5 倍のパフォーマンス向上を実現し、 非常に有望な結果を示しました。 また、 SigOpt のマルチメトリックとメトリッ
クのしきい値により、 さらに効率を向上させることができました。
SDA は、 AI の大衆化へ向けた SigOpt の最初の試みです。 使ってみたい方は、 RecDP リポジトリーを参照してください。 今後も記事を紹介していく予定です。 プロジェクトで SigOpt を使用するには、sigopt.com/signup（英語）にアクセスして、 サインアップしてください （無料）。

© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

28

インテル® Xeon®
スケーラブル ・プロセッサー上での分散トレーニング

Tencent AI Arena プラットフォーム上での AI モデルのトレーニング
に関するケーススタディー

Ashiq Imran、 Wenyue Hu、 Ashraf Bhuiyan、 AG Ramesh、 および Geetanjali Krishna インテル コーポレーション
Wenxi Zhu および Minwen Deng Tencent

ディープラーニング （DL） モデルのトレーニングには GPU が必要であるというのはよくある誤解です。 複雑なDL モデルの多くは、 分散トレーニングを利用して CPU でより効率良くトレーニングできます。 インテル® Xeon®
スケーラブル ・プロセッサーには、 インテル® ディープラーニング ・ブースト命令による AI アクセラレーションが組込まれています。 この記事では、 TensorFlow* と Horovod* を使用してクラスター上で分散トレーニングを設定する方法を説明します。
TensorFlow* は、 DL アプリケーション向けのオープンソースでクロスプラットフォームのライブラリーであるインテル® oneAPI ディープ ・ ニューラル ・ ネットワーク （インテル® oneDNN） を使用して、 インテル® プロセッ
サーやその他のアーキテクチャー （英語） 向けに最適化され、 広く使用されている DL フレームワークです。
インテル® oneDNN による TensorFlow* の最適化は、 畳み込み、 行列乗算、 バッチ正規化など、 パフォーマン
スを重視する主要な操作を高速化します。 Horovod* は、 TensorFlow* や PyTorch* などの一般的なフレーム
ワークで分散 DL を容易にするオープンソースのパッケージです。 複数の GPU や CPU によるモデルのトレーニングに広く使用されています。

© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

29

Tencent が提供する AI Arena は、 マルチエージェント ・ インテリジェンスと複雑な意思決定の研究を行う
オープン ・プラットフォームであり、 AI 研究者が実験環境を容易に構築できるよう、 幅広いサービスが含まれています。 Tencent の大ヒットしたモバイルゲーム 「王者栄耀」 は、 AI Arena プラットフォームを使用して、マルチエージェントの競合と協調、 不完全な情報、 複雑な行動制御、 巨大な状態行動空間を含む AI エージェ
ントを構築した実例です。 この AI エージェントは、 プレーヤーがもっと楽しめるようにゲームの操作性を向上します。 この記事では、 インテル® Xeon® スケーラブル ・プロセッサー ・ ベースの 16 ノードのクラスター上でTencent のプロダクションレベルのモデル ・ トレーニングを使用し、 単一ノードと比較して最大 15.2 倍のスピード
アップを達成した事例を紹介します。

分散ディープラーニング （DL） トレーニングの実行
分 散 DL トレ ーニング を実 行する方法は 2 つ ありま す。 1 つ目の方法は、 インテル® oneDNN が 有 効 な
TensorFlow* を含むビルド済みの Docker* コンテナを使います。 これには、 必要なものがすべて揃っています。
docker pull intel/intel-optimized-tensorflow:2.6.0-ubuntu-18.04-mpi-horovod

2 つ目の方法は、 インテル® oneDNN が有効な TensorFlow* 2.6 以降 （英語）、 Horovod* 0.22.1 以降 （英語）、および Open MPI 4.0 以降 （英語） を手動でインストールします。 GCC バージョンの確認を忘れないでください。
Ubuntu* 16.04 以降を使用している場合は、 GCC 8.4.1 以降をインストールします。
次のコマンドを使用して、 Linux* クラスター上で Horovod* フレームワークを使用して分散 TensorFlow* を実行します。 最初に、 次の環境変数を設定します。
export LD_LIBRARY_PATH=<path to OpenMP lib>:$LD_LIBRARY_PATH
export PATH=<path to Open MPI bin>:$PATH
export OMP_NUM_THREADS=#of_cores of the machine [e.g., lscpu | grep "Core"]
export KMP_AFFNITY=granularity=fine,compact,1,0
export KMP_BLOCKTIME=1

トレーニングを開始する前に、 次のコマンドを使用してシステムのソケット数を確認できます。
lscpu | grep "Socket"

次のコマンドは、 2 ソケットのサーバーでトレーニングを実行します。 ここでは、 ワーカーの総数は 2 です。
horovodrun -np 2 -H localhost:2 --autotune python train.py

次のコマンドは、 それぞれ 2 ソケットを搭載した 4 台のサーバーでトレーニングを実行します。 ここでは、 ワーカーの総数は 8 （ソケットごとに 1 ワーカー） です。
horovodrun -np 8 -H server1:2,server2:2,server3:2,server4:2 --autotune python train.py© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

30

次のコマンドは、 それぞれ 1 ソケットを搭載した 8 台のサーバーでトレーニングを実行します。 ここでも、 ワーカーの総数は 8 です。
horovodrun -np 8 \-H server1:1,server2:1,server3:1,server4:1,server5:1,server6:1,server7:1,server8:1 \--autotune python train.py

このように、 モデルで達成したいトレーニング時間に応じて、 サーバーの台数を増減できます。 トレーニング時間は、使用するサーバーの台数に対してほぼ線形にスケーリングすることが期待されます。 ハイパーパラメーターの最適化も、 複数の GPU でトレーニングする場合と同様に行われます。 学習率と有効バッチサイズは、 多くの場合、
ワーカー数によってスケーリングできます。 学習率の向上は、 多くの場合、 バッチサイズの増加を相殺できます。

ケーススタディー ： Wukong* AI のトレーニング
人工知能プログラム Wukong* AI は、 Tencent の人気 MOBA ゲーム 「王者栄耀」 をプレイし、 トップ・プロ・プレーヤーのパフォーマンスを超えました。 Wukong* AI は強化学習 （RL） を使用しています。 RL の目標は、
AI エージェントを強化するため、 適切なポリシーを選択して最適化することです。 ポリシーの選択は、 ディープ
RL トレーニングで最適化できます。 分散トレーニングを使用して、 第 2 世代インテル® Xeon® スケーラブル ・プロセッサー ・ ベースのクラスター上の複数の RL 学習器に学習プロセスを拡張します。
まず、 1 ノードと 1 ワーカーでベースライン ・ パフォーマンスを測定し、 その後、 目標のトレーニング時間に達するまでワーカーを増やしてスケールアップします。 このケーススタディーでは、16 ノードで必要なパフォーマンスを達成し、分散トレーニングによりベースライン ・ パフォーマンスの最大 15.2 倍の高速化を実現しました （図 1）。 インテル®
Xeon® プロセッサー ・ ベースのクラスター上でほぼ線形のスピードアップが達成されていることが分かります。

図 1. 分散トレーニングによりベースライン ・ パフォーマンスと比較して大幅なスピードアップが得られる© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

31

インテル® Xeon® スケーラブル ・プロセッサーは、 さまざまなプロダクション ・ ワークロードのトレーニングに必要なパフォーマンスを提供します。 Horovod* を分散トレーニングに使用することで、 トレーニング時間を短縮できます。
ここでは、 最近の Tencent AI Lab のケーススタディーを紹介しました。
インテルは、 次世代のインテル® Xeon® スケーラブル・プロセッサーへのハードウェア・アクセラレーションの追加や、ソフトウェア ・アクセラレーションの追加など、 引き続きユーザーのニーズに応えていきます。 今後のブログや記事にもご期待ください。

リソースとサポート
以下のサイトから詳細な情報を得ることができます。
• TensorFlow* （英語）• PyPI* で公開されているインテルの TensorFlow* の最適化 （英語）• インテル® oneAPI ディープ ・ニューラル ・ ネットワーク ・ ライブラリー （インテル® oneAPI DNN） （英語）

技術的な質問については、以下のコミュニティーやフォーラムで答えを見つけたり、サポートを受けることができます。
• TensorFlow* の問題 （GitHub*） （英語）• インテル® Optimized AI Frameworks （英語）• Horovod* （英語）システム構成TensorFlow* ソースコード

https://github.com/tensorflow/tensorflow （英語）TensorFlow* バージョン

2.6.0

CPU

76

コアごとのスレッド数2

ソケットごとのコア数

19

ソケット

2

NUMA ノード数2

ベンダー ID

GenuineIntel

BIOS バージョン ID

Smdbmds

CPU ファミリー

6

モデル

85

モデル名

インテル® Xeon® Platinum 8255C プロセッサー @ 2.50GHz

BIOS モデル名

3.0

ステッピング5

インテル® ハイパースレッディング ・ テクノロジー

有効

インテル® ターボ ・ブースト ・ テクノロジー

有効

メモリー

256GB

OS

CentOS* 8.2 （Core）
カーネル 4.18.0-305.3.1.el8.x86_64 x86_64© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

32

プレシジョン・メディシンで費用対効果の高いゲノミクスを実現
Sentieon DNASeq* と NVIDIA Clara Parabricks* のパフォーマンスの比較

Henry A Gabb インテル コーポレーション
Don Freed および Zhipan Li Sentieon Inc.

次世代シークエンシング （NGS） 技術は、 全ゲノム解析および全エクソーム解析に必要なコストと時間を大幅に削減しました。 NGS と効率的な二次解析により、 プレシジョン ・メディシン （精密医療） が臨床現場に、 さらにはポイントオブケアにももたらされました。 Sentieon （英語） は、 ゲノム解析ソフトウェアを第 3 世代インテル®
Xeon® スケーラブル ・プロセッサーと第 4 世代インテル® Xeon® スケーラブル ・プロセッサー （開発コード名
Sapphire Rapids） 向けに最適化しました。 このソフトウェアは、 マルチコアシステム上でスケーリングするように設計されており、 臨床要件が迅速なターンアラウンド （例えば、 救急診療で 1 人の患者のゲノムから副作用を予測する場合） であっても、 高スループット （例えば、 腫瘍研究室で同じ腫瘍または異なる患者の複数のサンプルを分析する場合） であっても、 最高のパフォーマンスを達成できます。
Sentieon のソフトウェアは、 最新のプロセッサー、 特にインテル® Xeon® プロセッサー向けにベクトル化されており、 独自のプログラミング言語や専用のハードウェアを使わずにハイパフォーマンスを実現するため、 ベンダーへの依存を排除し、 ソフトウェアの開発、 展開、 保守のコストを削減できます。 我々は、 Sentieon のパフォーマンスと精度を、 NVIDIA Clara Parabricks* などの競合製品と比較し、 専用ハードウェアの費用対効果と必要性を確認することにしました。

© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

33

比較用の最新データは、 「Benchmarking the NVIDIA Clara Parabricks Germline Pipeline on AWS （AWS*
上での NVIDIA Clara Parabricks* 生殖細胞系列パイプラインのベンチマーク）」 （英語） で公開されています。
この記事には、 以下の HG001 テストのパフォーマンスとコストのデータが掲載されています。
• 全エクソーム解析 （WES） @ 50x、 75x、 および 100x カバレッジ• 全ゲノム解析 （WGS） @ 30x および 50x カバレッジ

ここでは、Parabricks* と Genome Analysis Toolkit （GATK） （英語） のパフォーマンスが比較されている （図 1）、
PrecisionFDA Truth Challenge （英語） の HG001 WGS 30x テストに注目します。 GATK はバリアント呼び出し精度を判断する基準となっていますが、 Java* で記述されているため、 パフォーマンスの絶対的基準ではありません。 イリノイ大学と Mayo Clinic が発表した 「Sentieon DNASeq* Variant Calling Workflow Demonstrates
Strong Computational Performance and Accuracy （Sentieon の DNASeq* バリアント呼び出しワークフロー
が強力な計算パフォーマンスと精度を実証）」 （英語） で Sentieon が精度を落とすことなく GATK を大幅に上回ることは実証済みであるため、 ここでは GATK の比較は行わず、 Sentieon ソフトウェア （C++ で記述され、 最新のベクトル CPU 向けに最適化されている） と Parabricks* （CUDA* で記述され、 NVIDIA* GPU 向けに最適化されている） を比較します。

図 1. さまざまな AWS EC2* インスタンス ・ タイプでの GATK ベースラインに対する NVIDIA Clara Parabricks*
実行時間 （分） の比較 （出展 ： Benchmarking the NVIDIA Clara Parabricks Germline Pipeline on AWS（AWS* 上での NVIDIA Clara Parabricks* 生殖細胞系列パイプラインのベンチマーク）、 図 4）。

Sentieon と Parabricks* のパフォーマンスをできるだけ厳密に比較するため、 図 1 のベンチマークの説明とパフォーマンス ・ データを使用し、 図 1 の haplotypecaller、 後処理、 fq2bam の各ステップを、 バリアント
呼び出しパイプラインの典型的なステージに対応付けました （表 1）。 このマッピングは、 Parabricks* ベンチ
マークに記載されている以下の記述に基づいて行いました。

© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

34「fq2bam ステップには、 bwa-mem と座標ソートの一部が含まれ、 後処理には座標ソートの一部、
重複のマーキング、 bqsr が含まれます。 haplotypecaller （applybqsr） ステップは
入力 bam に適用され、 バリアント呼び出しステップに供給されます。」
パイプライン ・ ステージ
アライメント
ソート
重複排除
BQSR
BQSR 適用
バリアント呼び出し

Parabricks*

Sentieon

fq2bamBWA MEM + ソート・ユーティリティー

後処理

haplotypecaller

LocusCollector + 重複排除、
QualCalHaplotyper

表 1. パフォーマンスの比較に使用したバリアント呼び出しパイプラインと対応する Parabricks* と Sentieon のステージ。

さまざまな計算プラットフォームにおける Sentieon と Parabricks* のパフォーマンスの比較を図 2 と表 2 に示します。 プラットフォームと料金の詳細は表 3 に示します。 第 3 世代インテル® Xeon® スケーラブル ・プロセッ
サーは良好なパフォーマンスを発揮し、 第 4 世代インテル® Xeon® スケーラブル ・プロセッサー （開発コード名
Sapphire Rapids） は最高の総合パフォーマンスを発揮しています。 しかし、 パフォーマンスだけでなく、 ゲノム
あたりのコストと消費電力も考慮する必要があります。
インテル® Xeon® プロセッサーのゲノムあたりのコスト （$ 1.54） は、 NVIDIA* A100 Tensor Core プロセッサー（$4.59） に比べ安価です （表 3）。 第 4 世代インテル® Xeon® スケーラブル ・プロセッサーの AWS EC2* 料金が同程度であれば、 ゲノムあたりのコストは $1 未満になります （$2.1635/ 時間 * 26.8 分 = $0.97）。 また、 これらのベンチマークに使用された第 4 世代インテル® Xeon® スケーラブル ・プロセッサーはプレリリース ・ ハードウェア
であるため、 最終製品のパフォーマンスは向上する可能性があることも特筆すべき点です。
消費電力については、 c6i.metal インスタンスの 2 つのインテル® Xeon® Platinum 8352M プロセッサーが370W を必要とするのに対し、 p4d.24xlarge インスタンスの 8 つの NVIDIA* A100 Tensor Core プロセッサー
は 3,200W を必要としています。 Parabricks* の最高のパフォーマンスは、 8.6 倍の電力と 3.0 倍のコストを必要としますが、 第 3 世代インテル® Xeon® 8352M プロセッサーの 1.5 倍のパフォーマンスしか実現しません。

© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe35

図 2. クラウドとオンプレミスのさまざまなプラットフォームでの Sentieon と Parabricks* のパフォーマンスの比較。
Parabricks* の時間は公表されている結果 （英語） の引用、 または図 1 の目視による概算値です。
Sentieon の時間は、 2022 年 3 月現在の Sentieon による測定値です。 第 3 世代インテル® Xeon® スケーラブル ・ プロセッサー ・ ベースのシステムには、 2 ソケットの2.40GHz インテル® Xeon® Platinum 8368 プロセッサー （152 コア、 インテル® ハイパースレッディング ・ テクノロジー有効）、 256GB DDR4-3200 メモリー、
1TB インテル® SSD 660p および 2TB インテル® SSD DC P4510 が搭載されています。 第 4 世代インテル® Xeon® スケーラブル ・ プロセッサー ・ ベースのシステムは、
2 基の第 4 世代インテル® Xeon® スケーラブル ・ プロセッサー （（開発コード名 Sapphire Rapids） 40 コア以上、 インテル® ハイパースレッディング ・ テクノロジー有効）、
製品化前の BIOS、 256GB DDR メモリー （16 （1DPC） /16GB/4800MT/ 秒）、 1TB インテル® SSD D3-S4610 が搭載されたプレリリース ・ プラットフォームです。
どちらのシステムにも Ubuntu* 20.04 オペレーティング ・ システムがインストールされています。 性能は、 使用状況、 構成、 その他の要因によって異なります。

パイプライン ・ステージ
g4dn.12xlarge

NVIDIA Clara Parabricks*

SentieonAWS EC2* インスタンス ・ タイプ

インテル® Xeon® スケーラブル ・プロセッサー

g4dn.metal

p3dn.24xlarge

p4d.24xlarge

c6i.metal

第 3 世代

第 4 世代アライメント、
ソート

60

35

22

17

33.0

31.3

21.1

重複排除、
BQSR

5

5

3

5

4.5

3.2

2.2

BQSR 適用、
バリアント
呼び出し

15

10

10

6

5.2

5.3

3.5

合計時間 （分）

80

50

35

28

42.7

39.8

26.8

表 2. クラウドやオンプレミスのさまざまなプラットフォームにおける Parabricks* と Sentieon の実行時間 （分単位）。
Parabricks* の時間は公表されている結果 （英語） の引用、 または図 1 の目視による概算値です。

© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

36

AWS EC2*
インスタンスプロセッサー

オンデマンド料金 スポット料金（US$/ 時間）
（US$/ 時間）

ゲノムあたりのコスト （US$）

c6i.metal

インテル® Xeon® Platinum
8352M プロセッサー$5.44$2.1635$2.1635/ 時間 * 42.7 分 = $1.54

g4dn.12xlarge

NVIDIA* T4 Tensor Core

$3.912$1.2439$1.2439/ 時間 * 80 分 = $1.66

g4dn.metal

NVIDIA* T4 Tensor Core

$7.824$2.3472$2.3472/ 時間 * 50 分 = $1.96

p3dn.24xlarge

NVIDIA* Tesla* V100

$31.212$9.3636$9.3626/ 時間 * 35 分 = $5.46

p4d.24xlarge

NVIDIA* A100 Tensor Core

$32.7726$9.8318$9.8318/ 時間 * 28 分 = $4.59

表 3. インテルと NVIDIA の AWS EC2* インスタンスの料金の比較。 2022 年 3 月 11 日現在の AWS EC2* の米国西部 （オレゴン） リージョンのオンデマンド料金とスポット料金です （Amazon EC2* Pricing を参照）。

上記で引用した Parabricks* に関するブログでは、 GATK と同等のバリアント呼び出し精度 （F1 スコア） が報告されていますが、 Sentieon は、 米国食品医薬品局が運営する PrecisionFDA Truth Challenge （英語）において、 一貫して優勝しています （図 3）。 HG001 ベンチマークはこのコンテキストからのものです。 最新のPrecisionFDA Truth Challenge V2 （英語） では、 Sentieon はほかの 19 チームと競い、 12 カテゴリー中
4 カテゴリーで優勝しました。 Parabricks* はエントリーされていません。

図 3. 第 1 回 PrecisionFDA Truth Challenge の結果。
Sentieon が 6 カテゴリー中 2 カテゴリーで優勝しました。

© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

37

Sentieon は CUDA* のような独自のプログラミング言語を使用していないため、 ベンダーへの依存を回避できます。 Sentieon のソフトウェアは、 標準 C++ で記述され、 最新のプロセッサーのベクトル処理能力を活用するよ
うに最適化されています。 Sentieon は、 高価で消費電力の大きいハードウェアではなく、 アルゴリズムの改良に
よってパフォーマンスを実現しています。 すべての短鎖および長鎖シークエンシング・プラットフォームをサポートし、最適化している Sentieon は、FDA のオープンチャレンジで常に優勝しています。 これは、インテル® Xeon® スケー
ラブル ・プロセッサー上の Sentieon が、 ゲノム二次解析のリーダー ・プラットフォームであることを実証しています。

© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

コードの境界を乗り越える
インテル® DevCloud for oneAPI でクロスアーキテ
クチャー ・プログラミングのパワーを体験してください。

デモ

Mandelbrot デモを異なるアーキテクチャーで実行して、クロスアーキテクチャーのパフォーマンスを確認できます。

学習

サンプルコードを含む 25 の Jupyter* Notebook で
データ並列 C++ を実際に体験できます。

開発

最新のインテルの CPU、 GPU、 FPGA で将来に対応した
アプリケーションを計画してテストできます。

今すぐ開始 （英語） >コンパイラーの最適化に関する詳細は、最適化に関する注意事項 （software.intel.com/articles/optimization-notice#opt-jp） を参照してください。
Intel、インテル、Intel ロゴ、その他のインテルの名称やロゴは、Intel Corporation またはその子会社の商標です。
© Intel Corporation

The Parallel Universe39

シングルセル遺伝子解析の高速化
エンドツーエンドの Scanpy パイプラインでインテル® Xeon®
プロセッサーが NVIDIA* Tesla* A100 を凌駕

Sanchit Misra インテル ラボ 上級科学研究員
Narendra Chaudhaury インテル ラボ 科学研究員
貢献者 ： Padmanabhan Pillai インテル コーポレーション 上級科学研究員、 Bharat Kaul 同 Parallel Computing
Lab ディレクター、 Henry Gabb 同シニア主席エンジニア、 Andrey Gorshkov 同 AI ソフトウェア ・ エンジニアリング ・
マネージャー、 Pavel Yakovlev 同 AI フレームワーク ・ エンジニア、 および Gurbinder Gill Katana Graph シニア ・
ソフトウェア ・ エンジニア

計測の分解能の向上は、 さまざまな分野に革命をもたらしてきました。 例えば、 顕微鏡や望遠鏡の発明は科学に驚くほど大きなインパクトを与えました。 シングルセル解析は、 生物学における同様の革命の好例です。 人間の身体は 40 兆個近い細胞からできています。 歴史的に、 これらの細胞は、 ときには一度に数百万個という大きな単位で調べられてきたため、 細胞間の違いをとらえることができませんでした。 シングルセル解析は、 細胞の個性を見るものです。 新しいタイプの細胞を識別し、 これらの細胞を区別するメカニズムを明らかにし、 特定の病気や薬に細胞がどのように反応するかを示すことによって、細胞分化の謎が解明され始めています。 この比較的新しい分野は、癌から Covid-19 関連の研究に至るまで、 生物学的発見への計り知れない可能性をすでに示しています。

© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

40

データ計測技術の進歩により、 シングルセル ・ データの量は急速に増加しており、 個々のデータセットのサイズも同様の速度で増加しています。 このようなデータの解析には、 通常、 データ ・ サイエンス ・ パイプラインの実行が含まれます。 パイプラインのステップは、 パラメーターを変更しながら繰り返されることが多いため、 ほぼリアルタ
イムで実行できる対話型のパイプラインが有効です。

インテル® Xeon® プロセッサー 1 基で、 130 万個のマウス細胞のScRNA-seq 解析をわずか 7 分半で実現
細胞分化のさまざまな側面を研究するシングルセル解析には、 多くの種類があります。 シングルセル RNA-seq（scRNA-seq） 解析は、 細胞間の遺伝子発現プロファイルの違いを研究します。 この解析には、 個々の細胞の遺伝子発現を測定する高度な技術であるシングルセル RNA シークエンシングが利用されます。
scRNA-seq 解析の典型的なワークフローは、 各細胞の遺伝子発現量の行列から始まります （図 1）。 データの前処理では、 ノイズを除去し、 データを正規化して、 データセットの個々の細胞におけるすべてのヒト遺伝子の活性を取得します。 このステップでは、 データ収集から生じるアーティファクトを修正するため、 マシンラーニングがしばしば使用されます。 その後、 次元縮小を行い、 類似した遺伝子活性を持つ細胞をグループ化するためクラスタ
リングを行い、 クラスターを可視化します。 800,000 以上のダウンロード実績がある Scanpy （英語） は、 この解析に最もよく使用されているツールキットの 1 つです。
130 万個のマウス脳細胞からなるデータセットでは、 図 1 に示すパイプラインが通常、 標準 Scanpy 実装 （ベースライン） を使用した Google Cloud Platform* （GCP*） 上の単一 CPU インスタンス （n1-highmem-64） で
5 時間近く （英語） かかります。 同じパイプラインについて、 NVIDIA は、 NVIDIA RAPIDS* を使用した単一のNVIDIA* A100 GPU 上で 686 秒 （英語） というエンドツーエンドの実行時間を報告しています。

図 1. 遺伝子活性行列から始まり、 異なる細胞クラスターの可視化までのシングルセルの RNA シークエンシング ・ データの解析手順を示すパイプライン。

インテル ラボは、 インテル® oneAPI データ ・ アナリティクス ・ ライブラリー （インテル® oneDAL）チームおよびKatana Graph （英語） と協力して、 より優れた並列アルゴリズムを使用してパイプラインを高速化し、 アーキテ
クチャーに合わせてパフォーマンスをチューニングしています。 この取り組みはまだ進行中ですが、 表 1 と図 2 に
現在のパフォーマンスとクラウド利用コストを示します。 この結果は、 Intel Investor Meeting 2022 （英語） で発表されました。 GCP* 上の同じ単一 CPU インスタンス （n1-highmem-64） で、 パイプライン全体をわずか626 秒で終了できるようになりました。 第 3 世代インテル® Xeon® スケーラブル ・プロセッサー （開発コード名
Ice Lake） が動作する新しい n2 インスタンス ・ タイプでは、 パフォーマンスがさらに向上しています。 また、 パイ
プラインのメモリー要件を軽減したため、 ハイメモリーの n2-highmem-64 インスタンスの代わりにハイ CPU の© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

41n2-highcpu-64 インスタンスを使用できるようになりました。 GCP* 上の n2-highcpu-64 のシングル ・ インス
タンスでは、 パイプライン全体がわずか 459 秒 （7.65 分） で終了しています。 これは、 ベースラインの 5 時間と比較して約 40 倍高速です。 NVIDIA* A100 GPU のパフォーマンスと比べても約 1.5 倍高速です。
高速化とメモリー要件の軽減により、 クラウド ・ コンピューティングのコストを大幅に軽減できました （表 1）。
GCP* 上の n2-highcpu-64 インスタンスのコストはわずか $0.29 です。 これは、 ベースライン Scanpy を実行する n1-highmem-64 の約 1/66、 NVIDIA* A100 GPU の 1/2.4 です。
CPU
n1-highmem-64
64 vCPU （ベースラ
イン Scanpy）

GPU
a2-highgpu-1g
Tesla* A100 40GBGPU
（GPU により高速化された Scanpy）

CPU
n1-highmem-64
64 vCPU （CPU に
より高速化された
Scanpy）

CPUn2-highmem-64
64 vCPU （CPU に
より高速化された
Scanpy）

CPUn2-highcpu-64
64 vCPU （CPU に
より高速化された
Scanpy）

1120

475

16.9

11.3

16.6

PCA

44

17.8

6.9

5.6

5.6

t-SNE

6509

37

216.2

175.6

172.8

148

2

11.1

7.8

8.1

KNN

154

62

73.8

60.0

64.2

UMAP

2571

21

167.4

100.8

96.2

Louvain
クラスタリング

1153

2.4

13.9

10.3

8.9

Leiden
クラスタリング

6345

1.7

52.8

36.4

34.5

サブグループの
再解析

255

17.9

23.9

20.8

19.2

Rest

39

49.2

42.7

33.6

32.8

エンドツーエンドの実行時間 （秒）

18338

686

625.7

462.1

458.8

オンデマンド料金（US$/ 時間）1

3.786

3.673

3.786

4.192

2.294

総コスト （US$）

19.284

0.700

0.658

0.538

0.292

パイプライン ・ステップ

データの読み込みと前処理

K 平均法 （1 反復）

表 1. さまざまな GCP* インスタンスにおける 130 万個のマウス脳細胞の scRNA-seq 解析の実行時間とクラウドコスト。
最初の 2 つのカラムは単一 CPU インスタンス （n1-highmem-64） 上のベースライン Scanpy と 単一 GPU インスタンス（a2-highgpu-1g） 上の GPU により高速化された Scanpy の公表されている （英語） 実行時間とクラウドコスト。
最後の 3 つのカラムは、 2 つの世代の CPU インスタンス ・ タイプの単一 CPU インスタンス （n1-highmem-64、
n2-highmem-64、 n2-highcpu-64） 上の CPU により高速化された Scanpy の測定された実行時間とクラウドコスト2。

1

2022 年 5 月 15 日現在の https://cloud.google.com/compute/vm-instance-pricing の記載に基づく。
2022 年 5 月 25 日現在のインテル社内のテスト結果。

2© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

42

図 2. さまざまな GCP* インスタンスにおける 130 万個のマウス脳細胞の scRNA-seq 解析の実行時間とスピードアップ。
次のデータを使用 ： （1） 単一 CPU インスタンス （n1-highmem-64） 上のベースライン Scanpy と単一 GPU インスタンス（a2-highgpu-1g） 上の GPU により高速化された Scanpy の公表されている （英語） 実行時間、 （2） 2 つの世代の CPU
インスタンス ・ タイプの単一 CPU インスタンス （n1-highmem-64、 n2-highmem-64、 n2-highcpu-64） 上のCPU により高速化された Scanpy の測定された実行時間3。 折れ線グラフは、 n1-highmem-64 インスタンス上のベースライン Scanpy と比較したスピードアップを示しています。

データ ・ サイエンス ・ パイプラインの高速化方法
以下は、 このパイプラインのパフォーマンスを向上するため行ったステップの要約です。
• データの前処理を効率化するため、 ウォーム ・ファイル ・ キャッシュを適用し、 JIT コンパイラー Numba を使用してマルチスレッド化しました。 これにより、 ベースラインの前処理パフォーマンスが 70 倍以上向上しました。
• また、 K 平均法クラスタリング、 KNN （K 近傍法）、 PCA （主成分分析） の効率的な実装を含む scikit-learn* 向け
インテル® エクステンション （英語） を使用しました。
• Scanpy は元々 scikit-learn* の tSNE （t-distributed Stochastic Neighbor Embedding） 実装を使用していましたが、 インテル® Xeon® プロセッサーでは非効率的でした。 tSNE の効率的な実装を構築することで、40 倍近い高速化を達成しました。
∘Barnes-Hut アルゴリズムの共有メモリー並列実装∘Morton コードを用いた 4 分木の構築、 ソート、 要約の各ステップの並列化• さらに、 UMAP （Uniform Manifold Approximation and Projection） を最適化しました。
∘Python* ソースコードの C++ への変換
∘疑似乱数ジェネレーターの効率良いインテル® AVX-512/ インテル® AVX2 ベースの実装を作成∘固有値計算ステップにインテル® oneAPI マス ・ カーネル ・ ライブラリー （インテル® oneMKL） を使用• Katana Graph との協力により提供された Louvain 法および Leiden 法コミュニティー検出アルゴリズムの効率良い実装をパイプラインに統合

32022 年 5 月 25 日現在のインテル社内のテスト結果。

© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

43

これらの取り組みにより、大規模データセットの解析時間が大幅に短縮し、研究者はインテル® Xeon® プロセッサー
上では 40 倍、 NVIDIA* A100 GPU 上と比べても 1.5 倍高速に作業を完了できるようになりました。

まとめ
シングルセル解析は多くの分野に適用できます。 腫瘍学、 微生物学、 神経学、 生殖学、 免疫学、 消化器系や泌尿器系など、 多くの分野で応用されています。 作業時間の短縮により、 さまざまな細胞をより深く理解できるようになり、 大きな集団的利益をもたらす医学的進歩への道が開けることが期待されます。 私たちは、 scRNA-seq
解析パイプラインをさらに洗練させるため、 tSNE、 UMAP、 Leiden ステップの改良に注力しています。

システム構成GCP n1-highmem-64 ： 1 イ ン ス タ ン ス GCP n1-highmem-64 ： 64 vCPU （開 発 コ ード 名 Skylake）、
合計メモリー 416GB、 BIOS ： Google*、 ucode ： 0x1、 Ubuntu* 20.04、 5.13.0-1024-gcp
GCP n2-highmem-64 ： 1 イ ンス タ ンス GCP n2-highmem-64 ： 64 vCPU （開 発 コ ード 名 Ice Lake）、
合計メモリー 512GB、 BIOS ： Google*、 ucode ： 0x1、 Ubuntu* 20.04、 5.13.0-1024-gcp
GCP n2-highcpu-64 ： 1 イ ン ス タ ン ス GCP n2-highcpu-64 ： 64 vCPU （開 発 コ ー ド 名 Ice Lake）、
合計メモリー 64GB、 BIOS ： Google*、 ucode ： 0x1、 Ubuntu* 20.04、 5.13.0-1024-gcp© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

44

クロスプラットフォーム ・
ソフトウェア開発にツールを活用Windows* Subsystem for Linux* 2 と Visual Studio* Codeを使用して Linux* と Windows* 向けに oneAPI をビルドする
方法

Tony Mongkolsmai インテル コーポレーション テクノロジー ・ エバンジェリスト

皆さんこんにちは。 インテルで 19 年間、 パフォーマンス ・ ツール、 並列化ツール、 AI システム ・プラットフォームのソフトウェア ・ エンジニアおよびソフトウェア ・アーキテクトとして得た私の経験を皆さんと共有し、 ソフトウェア、
テクノロジー、 インテルについて皆さんの考えをお聞かせいただければ嬉しく思います。 最初に、 現代のソフトウェ
ア開発者が抱えるジレンマを解決しましょう。
物心ついたときから、 私はプログラミングや問題を解くことが好きでした。 プログラミングがまだそれほど一般的ではなかった 1985 年、 小学 1 年生のときに BASIC を使ってプログラミングを始めました。 幸か不幸か、 これまで数十のプログラミング言語を学び、 いくつかの IDE でプログラミングし、 Windows* と Linux* の両方の環境でソフトウェアを開発する経験に恵まれました。 また、 ウェブ /UI フレームワーク、 クラウド開発、 ディープラーニン
グなど、 急速に進化する分野で開発する必要がありました。

© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

45

この間、 一貫して言えることは、 エンジニアはより生産性を高めるため、 常にツールと戦っているということです。
開発者として、 私はより多くの仕事をこなすため、 あるいはプライベートの時間を確保するため、 できるだけ効率的でありたいと思っています。 そのため、 これは私個人にとって大きな意味を持ちます。

対象を絞り込む
現代のソフトウェア開発者は 1 つのツールやプラットフォームだけを理解していれば良い訳ではありません。
マイクロサービスや Kubernetes* 向けの Go* コードの記述には、 React*/Angular*/Vue*/JavaScript* コードの記述とは全く異なるツールチェーンを使用します。 また、 多くの場合、 Windows*/Linux*/Mac* 間のクロスプラッ
トフォーム ・ サポートが必要とされます。
幸い、 クロスプラットフォームの IDE とサポートは進化しています。 私は長年 Vi を使用していますが （Emacs*の方が強力なのは知っています）、 最新の IDE が好きです。 エンジニアにとって、 さまざまなプラットフォーム
でワークフローを標準化することは効率の向上につながります。 私が通常使用する言語 （C/C++、 Python*、
JavaScript*、 Go*） は すべ て Microsoft* Visual Studio* Code （VSCode） 内 で う ま く 動 作 し、 Microsoft*
Windows* Subsystem for Linux* （WSL） の最近の更新によりクロスプラットフォーム開発にも対応できます。
ここでは、 私のインテル® Core ™ i9 プロセッサー搭載の Alienware* R13 システム （インテルからの支給品ではありません） で、 いくつかのクロスプラットフォームの oneAPI サンプルを動かしてみたいと思います。

WSL と VSCode のセットアップ
WSL のセットアップは簡単です。 Windows* のコマンドプロンプトを開いて、 次のコマンドを実行するだけです。
> wsl --install

必要な再起動を行った後、 WSL 用の Ubuntu* 20.04 がインストールされます。
問題が発生した場合は、 Microsoft の 「トラブルシューティング ・ ガイド」 の説明に従って、 システムを WSL 対応にするのに必要な手順を実行します。
次に、 VSCode をセットアップします。 Linux* のインストール手順に従って WSL で VSCode をセットアップするのではなく、 Microsoft* の手順 （英語） に従って VSCode で Remote WSL 拡張を有効にします。
有効にしたら、 VSCode WSL 接続ウィンドウとして新しい WSL ウィンドウ （図 1） を選択するだけです。

© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

46

図 1. 新しい WSL ウィンドウを開く

インテル® oneAPI ツールキットのインストール
ここでは、 システム 上 の Linux* と Windows* の 両 方 で oneAPI ベースのコード が 動 く か 確 認 するため、インテル® oneAPI ツールキットのリリースページ （英語） （図 2） からインストールするツールキットを選択し、指示に従ってインストールしました （図 3）。 WSL ターミナルでは apt インストールを使用し、 Windows* では
オンライン ・ インストーラーを使用しました。

図 2. インテル® oneAPI ツールキットの選択© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

47

図 3. インテル® oneAPI ツールキットのインストール

コードの実行
開発環境の準備ができたら、 GitHub* から oneAPI-samples リポジトリーをクローンしました。
このコードは Windows* と Linux* の両方に対応するように設計されているので、 WSL の VSCode ウィンドウで[Libraries] > [oneMKL] > matrix_mul_mkl ディレクトリーをロードし、 bash ターミナルを開き、 以下のコマンド
で oneAPI 環境をセットアップしてサンプルコードをビルドしました。
> source /opt/intel/oneapi/setvars.sh> make

行列乗算サンプルがビルドされ、 実行されました （図 4）。

© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

48

図 4. サンプルコードのビルドと実行

Windows* バイナリーを使用したサンプルの作成と実行は、 新しいシステムであったため、 少し手間がかかりました。
Microsoft* Visual Studio* 2022 Community Edition と GNU* Make をインストールする必要がありました。
その後は、 VSCode をロードして実行するだけでした。
> C:\Program Files (x86)\Intel\oneAPI\setvars.bat> make

思いがけない発見
多くの方はご存じかもしれませんが、 WSL 上ではなく、 Windows* 上の VSCode を操作していたら、 分割ターミ
ナルに WSL プロンプトを表示できることが分かりました（図 5）。これは私にとって驚くべき発見でした。これにより、同じ VSCode インスタンスで、 Windows* と Linux* の両方のサンプルをビルドして実行することができました。
1 つの IDE で、 1 つのシステムで、 クロスプラットフォーム開発ができるのです ! クロスプラットフォーム開発の苦しみに何年も耐えてきた私にとって、 これは言葉では言い表せないほどの感動でした。

© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

The Parallel Universe

49

図 5. 同じ VSCode インスタンスでの Windows* と Linux* の実行まとめ
今回素晴らしかったことは、 新しいシステムでわずか 2 時間ほどでセットアップできたことです。 今後は、 インテル®
Arc™ GPU での検証、 ほかの開発ワークフロー （Jupyter* Notebook など）、 クラウド ・コンピューティングや AI
システム ・プラットフォーム開発などのソフトウェアに関するトピックについて、 テクノロジー業界のソフトウェア ・エンジニアとしての経験を共有しながら、 執筆する予定です。 最後までお読みいただきありがとうございます。

© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
コンパイラーの最適化に関する詳細は、 最適化に関する注意事項を参照してください。

インテルのテクノロジーを使用するには、 対応したハードウェア、 ソフトウェア、 またはサービスの有効化が必要となる場合があります。 詳細については、OEM または販売店にお問い合わせいただくか、 http://www.intel.co.jp/ を参照してください。
実際の費用と結果は異なる場合があります。
インテルは、 サードパーティーのデータについて管理や監査を行っていません。 ほかの情報も参考にして、 正確かどうかを評価してください。
最適化に関する注意事項 ： インテル® コンパイラーでは、 インテル® マイクロプロセッサーに限定されない最適化に関して、 他社製マイクロプロセッサー用に同等の最適化を行えないことがあります。 これには、 インテル® ストリーミング SIMD 拡張命令 2、 インテル® ストリーミング SIMD 拡張命令 3、インテル® ストリーミング SIMD 拡張命令 3 補足命令などの最適化が該当します。 インテルは、 他社製マイクロプロセッサーに関して、 いかなる最適化の利用、 機能、 または効果も保証いたしません。 本製品のマイクロプロセッサー依存の最適化は、 インテル ® マイクロプロセッサーでの使用を前提としています。 インテル® マイクロアーキテクチャーに限定されない最適化のなかにも、 インテル® マイクロプロセッサー用のものがあります。 この注意事項で言及した命令セットの詳細については、 該当する製品のユーザー ・ リファレンス ・ ガイドを参照してください。 注意事項の改訂 #20110804。
https://software.intel.com/en-us/articles/optimization-notice#ja-jp
性能に関するテストに使用されるソフトウェアとワークロードは、 性能がインテル® マイクロプロセッサー用に最適化されていることがあります。
SYSmark* や MobileMark* などの性能テストは、 特定のコンピューター ・ システム、 コンポーネント、 ソフトウェア、 操作、 機能に基づいて行ったものです。 結果はこれらの要因によって異なります。 製品の購入を検討される場合は、 他の製品と組み合わせた場合の本製品の 性能など、 ほかの 情報や性能テストも参考にして、パフォーマンスを総合的に評価することをお勧めします。 構成の詳細は、補足資料を参照してください。 性能やベンチマー
ク結果について、 さらに詳しい情報をお知りになりたい場合は、 ht tp://w w w.intel.com/benchmarks/（ 英語） を参照してください。
性能の測定結果はシステム構成の日付時点のテストに基づいています。 また、 現在公開中のすべてのセキュリティー ・ アップデートが適用されているとは限りません。 詳細は、 システム構成を参照してください。 絶対的なセキュリティーを提供できる製品またはコンポーネントはありません。
本資料は、 （明示されているか否かにかかわらず、 また禁反言によるとよらずにかかわらず） いかなる知的財産権のライセンスも許諾するものではありません。
インテルは、 明示されているか否かにかかわらず、 いかなる保証もいたしません。 ここにいう保証には、 商品適格性、 特定目的への適合性、 および非侵害性の黙示の保証、 ならびに履行の過程、 取引の過程、 または取引での使用から生じるあらゆる保証を含みますが、 これらに限定されるわけではありません。
© Intel Corporation. Intel、 インテル、 Intel ロゴ、 その他のインテルの名称やロゴは、 Intel Corporation またはその子会社の商標です。
* その他の社名、 製品名などは、 一般に各社の表示、 商標または登録商標です。
JPN/2210/PDF/XL/SPI/ND