JP2022545222A - 複数のプロセッサを有するコンピュータにおける通信 - Google Patents

複数のプロセッサを有するコンピュータにおける通信 Download PDF

Info

Publication number
JP2022545222A
JP2022545222A JP2022510938A JP2022510938A JP2022545222A JP 2022545222 A JP2022545222 A JP 2022545222A JP 2022510938 A JP2022510938 A JP 2022510938A JP 2022510938 A JP2022510938 A JP 2022510938A JP 2022545222 A JP2022545222 A JP 2022545222A
Authority
JP
Japan
Prior art keywords
processor
data
computer
processors
memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2022510938A
Other languages
English (en)
Other versions
JP7357767B2 (ja
Inventor
ルーク サウスウェル オズボーン リチャード
デイヴィッド ファイルズ マシュー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Graphcore Ltd
Original Assignee
Graphcore Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Graphcore Ltd filed Critical Graphcore Ltd
Publication of JP2022545222A publication Critical patent/JP2022545222A/ja
Application granted granted Critical
Publication of JP7357767B2 publication Critical patent/JP7357767B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17318Parallel communications techniques, e.g. gather, scatter, reduce, roadcast, multicast, all to all
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17325Synchronisation; Hardware support therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/177Initialisation or configuration control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/522Barrier synchronisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Artificial Intelligence (AREA)
  • General Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Neurology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Medical Informatics (AREA)
  • Multi Processors (AREA)

Abstract

複数のプロセッサを含むコンピュータであって、各プロセッサが、コンピュータの演算段階の間にデータに関する動作を実行し、プリコンパイル済みの同期バリアに続いて、コンピュータの交換段階の間に少なくとも1つの他のプロセッサとデータを交換するように構成され、コンピュータのプロセッサにはインデックスが付けられ、交換段階において各プロセッサによって行われるデータ交換動作が、そのインデックス値に依存する、コンピュータ。

Description

本開示は、複数のプロセッサを含むコンピュータにおいて異なるプロセッサ間で行われるデータ転送動作を制御することに関する。
大規模な並列動作を実行する際には、コンピュータ内に複数のプロセッサが提供される。そのようなコンピュータは、各プロセッサが単一のチップ上に提供されるシステムであり得る。プロセッサは、各々自体が複数の処理ユニットを含み得る。いくつかの事例では、プロセッサの各々は、異なるデータセットの同じ動作セットを実行するように構成することができる。プロセッサの各々は、演算段階の間に計算を実行した後に、交換段階の間に他のプロセッサのうちの1つ又は複数と結果を交換する。プリコンパイル済みのバリアは、演算段階と交換段階との間に設けられる。結果の交換により、より大きな動作環境において各々が異なるタスクを実行する異なるプロセッサ間での同期を達成することができる。
複数のプロセッサを含むコンピュータの応用の一例は、例えば、ディープニューラルネットワークの環境においてなど、機械学習アルゴリズムの環境において見られる。機械知能の分野の当業者によく知られているように、機械知能アルゴリズムは、複数の相互接続ノードのグラフによって表すことができる「知識モデル」の反復更新の実行を中心とする。各ノードは、その入力の関数を表す。いくつかのノードは、グラフへの入力を受信し、いくつかのノードは、1つ又は複数の他のノードからの入力を受信する一方で、いくつかのノードの出力は、他のノードの入力を形成し、いくつかのノードの出力は、グラフの出力を提供する(いくつかの事例では、所定のノードは、これらのグラフへの入力、グラフからの出力及び他のノードとの接続のすべてをも有し得る)。さらに、各ノードの関数は、1つ又は複数のそれぞれのパラメータ(例えば、重み)によってパラメータ化される。学習段階の間、その目標は、実験的な入力データセットに基づいて、全体としてのグラフが可能入力範囲に対する所望の出力を生成するように、様々なパラメータに対する値を見出すことである。これを行うための様々なアルゴリズムが当技術分野で知られており、確率的勾配降下法に基づく誤差逆伝播アルゴリズムなどが挙げられる。入力データに基づく複数の反復にわたり、パラメータは、それらの誤差を減少するために徐々に調節され、従って、グラフは解に収束する。次いで、後続の段階では、特定の入力セットを与えたときの出力の予測を行うため、又は、特定の出力セットを所与えたときの入力(原因)について推論するために、学習済みモデルを使用することができる。
典型的には、各ノードの少なくともいくつかの処理は、グラフの他のいくつかの又はすべてのノードとは無関係に実行でき、大きなグラフは、並行処理及び/又は並列処理の絶好の機会に触れる。各処理ユニットは、異なるノードと関連付けられた処理を実行するために使用することができるコンピュータである。この方法では、単一のニューラルネットワークを訓練するために、複数の処理ユニットを集合的に使用することができる。これは、各処理ユニットが異なるデータセットを使用してニューラルネットワークの各処理ユニットに対する重みの更新を導出するというデータ並列処理を適用することによって達成される。次いで、更新は、交換段階の間に処理ユニット間で同期化される。
従って、コンピュータのプロセッサ間でデータを交換する際、各プロセッサは、異なる時間に異なるデータフラグメントを交換する必要があることを理解することができる。その上、各プロセッサは、コンピュータ内のそれぞれのプロセッサの位置に依存する受信データに対して、データの格納及び減少(reduction)などの異なる動作を実行するように構成することができる。従って、コンピュータ内の各プロセッサがそのそれぞれの動作を適切な時間に実行することを保証する必要がある。
記載されるように、コンピュータのプロセッサ間でデータが交換されることを保証するため、各プロセッサは、データ交換に必要な適切な動作を適切な時間に実行する必要がある。これを達成するための方法の1つは、コンピュータの各プロセッサに対して異なる実行可能コード(実行可能イメージ)のセットをコンパイルすることである。各プロセッサに対して異なるコードセットをコンパイルすることにより、各プロセッサは、プロセッサ間の適切なデータ交換を可能にするために、データ交換に適切な動作を異なる時間に実行するようにプログラムすることができる。しかし、各プロセッサに対して別個のプログラムをコンパイルすることに関し、プロセッサの数に応じてコンパイル時間が大幅に増大し、コンパイル時間が不必要に長くなる可能性があるとの問題がある。
本発明は、特に、機械学習モデルを使用して訓練を実行する際の使用に適用可能な、プロセッサ間でデータを交換するための技法を提供するが、この環境に限定されない。
本出願の実施形態によれば、コンピュータ内のプロセッサのセットのプロセッサの各々には、単一の実行可能なコンピュータコードのセットが提供され、実行可能なコンピュータコードは、実行可能イメージの形態を取ることができる。プロセッサのセットのプロセッサの各々には、インデックス値が提供され、インデックス値は、実行の間の特定の時間に実行可能なおコンピュータコードのセットにおいて表現される動作のうちのどの動作を実行するかを決定する。インデックス値に依存する動作は、プロセッサ間のデータの交換を制御する動作である。従って、プロセッサは、各プロセッサに対して別個の実行可能なコードのセットをコンパイルする必要なく、それぞれのインデックス値に応じて適切な交換動作を実行するように構成される。
第1の態様によれば、複数のプロセッサを含むコンピュータであって、各プロセッサが、コンピュータの演算段階の間にデータに関する動作を実行し、プリコンパイル済みの同期バリアに続いて、コンピュータの交換段階の間に少なくとも1つの他のプロセッサとデータを交換するように構成され、各プロセッサは、実行可能命令のセットと複数のプロセッサの中のプロセッサを識別するインデックス値とを含むプログラムを含む少なくとも1つのストレージと、実行可能命令によって指定された計算において使用するためのデータを格納する少なくとも1つのデータメモリと、インデックス値に応じて、コンピュータの交換段階の間に少なくとも1つのデータメモリと少なくとも1つの他のプロセッサとの間のデータ転送を実行するための動作を選択することと、交換段階の間にデータ転送を実行するために選択された動作を実行することと、を行うための実行可能命令の1つ以上のサブセットを実行するように配置された少なくとも1つの実行ユニットと、を含む、コンピュータが提供される。
いくつかの実施形態では、少なくともいくつかのプロセッサについて、インデックス値に応じてデータ転送を実行するための動作を選択することは、データが転送される少なくとも1つの他のプロセッサを選択することを含む、コンピュータが提供される。
いくつかの実施形態では、少なくともいくつかのプロセッサについて、動作は、インデックス値に応じて選択された少なくとも1つのデータメモリの領域と少なくとも1つの他のプロセッサとの間でデータを転送させる。
いくつかの実施形態では、少なくともいくつかのプロセッサについて、少なくとも1つの実行ユニットは、インデックス値に基づく算術演算を実行することによって、データメモリの領域のアドレスを計算するように構成される。
いくつかの実施形態では、少なくともいくつかのプロセッサについて、少なくとも1つの実行ユニットは、インデックス値に応じて実行可能命令のセットの少なくとも1つの命令に分岐するように構成され、少なくとも1つの命令の各々は、少なくとも1つの実行ユニットによって実行されると、データメモリの領域と少なくとも1つの他のプロセッサとの間でデータを転送させる。
いくつかの実施形態では、少なくともいくつかのプロセッサについて、動作は、データメモリの領域に少なくとも1つの他のプロセッサから受信されたデータを格納することを含む。
いくつかの実施形態では、少なくともいくつかのプロセッサについて、動作は、インデックス値に応じて、少なくとも1つのデータメモリに格納されたデータを選択することと、選択されたデータを少なくとも1つの他のプロセッサに送信することとを含む。
いくつかの実施形態では、最小のいくつかのプロセッサの少なくとも1つの実行ユニットは、データパケットを生成するために選択されたデータを処理するように構成され、データパケットは、選択されたデータと、少なくとも1つの他のプロセッサのバッファのアドレスを含むヘッダと、を含む。
いくつかの実施形態では、コンピュータは、データ転送において転送されるデータを静的にルーティングするように構成されたルーティングハードウェアを含む。
いくつかの実施形態では、少なくともいくつかのプロセッサについて、動作は、少なくとも1つの他のプロセッサから受信されたデータと、少なくとも1つのデータメモリに格納されたデータを組み合わせることを含み、少なくとも1つの実行ユニットは、インデックス値に応じて、少なくとも1つのデータメモリからデータを選択するように構成される。
いくつかの実施形態では、プロセッサの各々について、少なくとも1つのデータメモリは、少なくとも1つの機械学習モデルに対する複数のデルタ重みを含み、少なくとも1つのデータメモリと少なくとも1つの他のプロセッサとの間のデータ転送は、少なくとも1つのデータメモリと少なくとも1つの他のプロセッサとの間の1つ又は複数のデルタ重みの転送を制御することを含む。
いくつかの実施形態では、少なくともいくつかのプロセッサについて、少なくとも1つの実行ユニットは、インデックス値に応じて、データメモリから1つ又は複数のデルタ重みを選択し、少なくとも1つの他のプロセッサに選択された1つ又は複数のデルタ重みを転送させるように構成される。
いくつかの実施形態では、少なくともいくつかのプロセッサについて、少なくとも1つの実行ユニットは、インデックス値に応じて、データメモリから1つ又は複数のデルタ重みを選択することと、選択された1つ又は複数のデルタ重みを、複数のプロセッサの少なくとも1つの他のプロセッサから受信された1つ又は複数のデルタ重みと集約(reduce)させることと、を行うように構成される。
いくつかの実施形態では、コンピュータの各プロセッサは、システムオンチップである。
第2の態様によれば、複数のプログラムを生成するためのコンピュータ実装方法が提供される。各プログラムは、複数のプロセッサを含むコンピュータの実行ユニットによる実行に適し、各プロセッサは、プログラムを保持するための少なくとも1つのメモリと、プログラムを実行するための少なくとも1つの実行ユニットと、データを保持するためのデータストレージとを有する。コンピュータ実装方法は、単一の実行可能命令のセットをコンパイルすることと、各プロセッサに対してプロセッサと関連付けられたインデックス値を決定することと、各プロセッサに対して、単一の命令のセット及びインデックス値を含むローカルプログラムを生成することを含む。各ローカルプログラムは、プロセッサに割り当てられると、コンピュータの演算段階の間にデータに関する動作を実行することと、インデックス値に応じて、コンピュータの交換段階の間に少なくとも1つのデータメモリと少なくとも1つの他のプロセッサとの間のデータ転送を実行するための動作を選択することと、プリコンパイル済みの同期バリアに続いて、交換段階の間にデータ転送を実行するために選択された動作を実行することと、をプロセッサの少なくとも1つの実行ユニットで実行させるようにスケジューリングされる。
いくつかの実施形態では、各ローカルプログラムについて、インデックス値に応じて、データ転送を実行するための動作を選択することは、データが転送される少なくとも1つの他のプロセッサを選択することを含む。
いくつかの実施形態では、各ローカルプログラムについて、動作は、インデックス値に応じて選択された少なくとも1つのデータメモリの領域と少なくとも1つの他のプロセッサとの間でデータを転送させる。
いくつかの実施形態では、各ローカルプログラムについて、少なくとも1つの実行ユニットは、インデックス値に基づく算術演算を実行することによって、データメモリの領域のアドレスを計算するように構成される。
いくつかの実施形態では、各ローカルプログラムについて、少なくとも1つの実行ユニットは、インデックス値に応じて実行可能命令のセットの少なくとも1つの命令に分岐するように構成され、少なくとも1つの命令は、少なくとも1つの実行ユニットによって実行されると、データメモリの領域と少なくとも1つの他のプロセッサとの間でデータを転送させる。
いくつかの実施形態では、各ローカルプログラムについて、動作は、データメモリの領域に少なくとも1つの他のプロセッサから受信されたデータを格納することを含む。
いくつかの実施形態では、各ローカルプログラムについて、動作は、インデックス値に応じて、少なくとも1つのデータメモリに格納されたデータを選択することと、選択されたデータを少なくとも1つの他のプロセッサに送信することとを含む。
いくつかの実施形態では、各ローカルプログラムは、プロセッサに割り当てられると、データパケットを生成するために選択されたデータを処理することを、プロセッサの少なくとも1つの実行ユニット上で実行させるようにスケジューリングされ、データパケットは、選択されたデータと、少なくとも1つの他のプロセッサのバッファのアドレスを含むヘッダと、を含む。
いくつかの実施形態では、コンピュータは、データ転送において転送されるデータを静的にルーティングするように構成されたルーティングハードウェアを含む。
いくつかの実施形態では、各ローカルプログラムについて、動作は、少なくとも1つの他のプロセッサから受信されたデータと、少なくとも1つのデータメモリに格納されたデータを組み合わせることを含み、少なくとも1つの実行ユニットは、インデックス値に応じて、少なくとも1つのデータメモリからデータを選択するように構成される。
いくつかの実施形態では、各ローカルプログラムについて、少なくとも1つのデータメモリは、少なくとも1つの機械学習モデルに対する複数のデルタ重みを含み、少なくとも1つのデータメモリと少なくとも1つの他のプロセッサとの間のデータ転送は、少なくとも1つのデータメモリと少なくとも1つの他のプロセッサとの間の1つ又は複数のデルタ重みの転送を制御することを含む。
いくつかの実施形態では、各ローカルプログラムについて、少なくとも1つの実行ユニットは、インデックス値に応じて、データメモリから1つ又は複数のデルタ重みを選択し、少なくとも1つの他のプロセッサに選択された1つ又は複数のデルタ重みを転送させるように構成される。
いくつかの実施形態では、各ローカルプログラムについて、少なくとも1つの実行ユニットは、インデックス値に応じて、データメモリから1つ又は複数のデルタ重みを選択することと、選択された1つ又は複数のデルタ重みを、複数のプロセッサの少なくとも1つの他のプロセッサから受信された1つ又は複数のデルタ重みと集約させることと、を行うように構成される。
いくつかの実施形態では、コンピュータの各プロセッサは、システムオンチップである。
本発明をどのように実施できるかを示すために本発明をより良く理解するため、ここでは、例として、添付の図面を参照する。
ニューラルネットにおける分散訓練を示す概略図である。 簡単な「ストリーミング」ラインall-reduceアルゴリズムを実施するためのプロセッサのラインを示す概略図である。 all-reduce動作の概略図である。 reduce-scatter動作の段階の概略図である。 all-reduce動作の動作タイミングの概略図である。 インデックス値に応じて選択された動作によるプロセッサ間のデータの交換の概略図である。 インデックス値に応じて選択された動作によるプロセッサ間のデータの交換の概略図である。 マルチタイルプロセッサの概略図である。 マルチタイルプロセッサ内の演算及び交換段階を示す概略図である。 バルク同期並列システムのデータの交換を示す。 コンピュータのマルチタイルプロセッサの配列を示す。 コンピュータのタイル間のデータパケットの交換を示す。 マルチタイルプロセッサのタイルの簡略化された概略図である。 マルチプロセッサコンピュータのタイルの配列を示す。 コンピュータの各プロセッサに対してプログラムをコンパイルするための方法を示す。 インデックス値に応じて選択された動作によるプロセッサ間のデータの交換の概略図である。
本発明の態様は、機械学習作業負荷に対するアクセラレータとして動作するように設計されたマルチタイルプロセッサを含むコンピュータの環境において開発されてきた。しかし、本発明は、機械学習の環境に限定されない。アクセラレータは、複数の相互接続プロセッサを含む。いくつかの実施形態では、各プロセッサは、マルチタイルプロセッサの形態を取ることができる。本発明の実施形態を実装するために使用することができるマルチタイルプロセッサについては、参照により本明細書に組み込まれる米国特許出願第15/886315号明細書で説明されている。その代替として、各プロセッサは、単に、単一のモノリシックプロセッサの形態を取ることができる。
ここでは、添付の図を参照して、本発明の例示的な実施形態をより詳細に説明する。
図12を参照すると、図12は、本出願の実施形態によるコンピュータ700の例を示している。コンピュータ700は、複数のプロセッサ2i、2ii、2iii、2iv、2v、2vi(集合的にプロセッサ2と呼ばれる)を含む。プロセッサ2の各々は、別名チップとして知られている集積回路において具体化することができる。従って、プロセッサ2の各々は、システムオンチップである。
複数のプロセッサ2の各々は、それぞれのプロセッサ2の少なくとも1つの実行ユニット420によって実行可能な命令を格納する少なくとも1つの命令メモリ410を含む。また、各プロセッサ2は、インデックス値を格納する少なくとも1つのストレージ415も含む。図12では、ストレージのユニット405、410、415の各々は、別個の記憶素子として示されているが、いくつかの実施形態では、これらの2つ以上は、単一のメモリユニットの一部を形成してもよい。ストレージのユニット405、410、415の各々は、隣接するメモリバンクとして示されているが、1つ又は複数のストレージのユニット405、410、415の各々は、それぞれのプロセッサ2全体にわたって分散された複数のメモリユニットを含んでもよい。同様に、少なくとも1つの実行ユニット420の各々は、複数の実行ユニットであってもよい。インデックスストレージ415は、レジスタであってもよい。
命令メモリ410内の命令のセットとインデックスストレージ415内のインデックスは、一体となって、それぞれのプロセッサ2に対するプログラムを構成する。各プロセッサ2は、データメモリ405に保持されたデータ値を修正するため、並びに、他のプロセッサ2への及び他のプロセッサ2からのデータ転送を行うという動作を実行するために、命令メモリ410に保持された命令を実行するように構成された少なくとも1つの実行ユニットを含む。命令メモリ410内の命令は、プロセッサ2の各々において同じである。しかし、インデックスストレージ415に保持されたインデックス値は、プロセッサ2間で異なる。コンピュータ700の各プロセッサ2は、そのそれぞれのインデックスストレージ415に異なるインデックス値を格納する。各プロセッサ2によってストレージ415に保持されたインデックス値は、コンピュータ700の複数のプロセッサ2のうちのそのプロセッサ2を一意的に識別する。プロセッサ2の各々は、コンピュータ700のプロセッサ2間で適切にデータを転送するために、その格納されたインデックス値に応じて、異なるデータ転送動作セットを実行するように構成される。インデックス値は、メモリ405からどのデータを転送するかを制御し、受信データに関して実行される動作を制御する。
ルーティングハードウェア(図12には図示せず)は、プロセッサ2間でデータをルーティングするためにコンピュータ700内に位置する。ルーティングハードウェアは、図10に関してより詳細に説明されるように、外部の相互接続部72の形態を取ることができる。データは、プロセッサ2間においてデータパケットの形態で送信される。ルーティングハードウェアは、データパケットを静的にルーティングするように構成される。静的なルーティングでは、ルーティングハードウェアは、データパケットをルーティングするための固定ルーティング情報を含むルーティングテーブルを含む。
コンピュータ700は、演算段階と交換段階を交互に行う。演算段階の間、コンピュータ内のプロセッサ2の各々は、プリコンパイル済みの同期バリアに達するまで演算を実行する。バリアの後、コンピュータ700は、交換段階に移動し、交換段階では、プロセッサ2はデータを交換し合う。
命令メモリ410内の命令のいくつかは、実行ユニット420によって実行されると、データメモリ405に格納されたデータを使用して実行ユニット420に計算を実行させる。命令メモリ410内の命令のいくつかは、実行ユニット420によって実行されると、データメモリ405に保持されたデータを別のプロセッサ2に転送させる。命令メモリ410内の命令のいくつかは、実行ユニット420によって実行されると、さらなるプロセッサ2から受信されたデータを、プロセッサのデータメモリ405に格納させる。
従って、命令は、実行ユニット420によって、その実行ユニット420を含むプロセッサ2とコンピュータ700のさらなるプロセッサとの間のデータ転送を制御するために実行される。インデックスストレージ415に格納されたインデックスは、実行ユニット420によって、データ転送を制御するために使用される。これは、異なる方法で実施することができる。いくつかの実施形態では、命令メモリ410からの命令は、入力としてインデックス値を取り入れ、実行されると、インデックス値に基づいて実行される計算に応じてどのようにデータ転送を実行するかを実行ユニット420に決定させる。いくつかの実施形態では、インデックス値は、あるデータ転送動作を実行するために、命令メモリ410から特定の命令を選択するために使用される。
インデックス値は、実行ユニット420によって、複数のプロセッサ2のうち、データメモリ405からデータを転送する特定のプロセッサを選択するために使用することができる。一例では、プロセッサ2iは、インデックスストレージ415に格納されたインデックス値に基づいて、複数のプロセッサからプロセッサ2iiを選択する。次いで、実行ユニット420は、選択されたプロセッサ2iiにデータを転送させる。それを行うため、実行ユニット420は、プロセッサ2iiのアドレスを含むデータパケットを生成するためにデータを処理し、次いで、パケットを発送し、パケットは、コンピュータ2のルーティングハードウェアによってプロセッサ2iiに提供される。
インデックス値は、実行ユニット420によって、データが格納される送信先プロセッサのアドレスを選択するために使用することができる。例えば、プロセッサ2iの実行ユニット420は、プロセッサ2iのインデックス値に基づいて、プロセッサ2iiのデータメモリ205内のアドレスを決定する。次いで、実行ユニット420は、データが格納される予定のプロセッサ2iiのメモリ405内のアドレスを含む1つ又は複数のヘッダを含む1つ又は複数のデータパケットを生成するために、プロセッサ2iiに転送される予定のデータを処理する。実行ユニット420は、これらのデータパケットをプロセッサ2iiに送信させ、データパケットは、データパケットのヘッダに示されるアドレスのメモリ405に格納される。
インデックス値は、実行ユニット420によって、データメモリ405から転送する特定のデータを選択するために使用することができる。実行ユニット420は、転送するデータのデータメモリ405内のアドレスを決定する。次いで、実行ユニット420は、選択されたデータをプロセッサのうちの1つ(例えば、プロセッサ2ii)に転送させる。実行ユニットは、入力としてインデックス値のアドレスを取り入れて計算を実行することによって、又は、特定のデータを転送させるための命令を命令メモリ405から選択することによって、転送するデータのデータメモリ405内のアドレスを決定することができる。
インデックス値は、実行ユニット420によって、プロセッサ2における受信データの取扱いを制御するために使用することができる。例えば、プロセッサ2iiがプロセッサ2iからデータを受信すると、プロセッサ2iiの実行ユニット420は、それぞれのインデックス値を使用して、データが格納されるデータメモリ405内の場所を制御することができる。それに加えて又はその代替として、プロセッサ2iiがプロセッサ2iからデータを受信すると、プロセッサ2iiの実行ユニット420は、それぞれのインデックス値を使用して、データメモリ405からデータを選択し、受信データとメモリ405から選択されたデータの両方に関与する動作(例えば、データを組み合わせる)を実行することができる。次いで、プロセッサ2iiは、動作の結果をメモリ405に格納することができる。
図12では、プロセッサ2iとプロセッサ2iiとの間のデータ転送のみが示されているが、コンピュータ700の他のプロセッサ2間でデータ転送を行えること、並びに各プロセッサ2に対して、プロセッサ2i及び2iiに対して上記で説明される方法のいずれかで実行する特定のデータ転送動作を選択するためにそれぞれのプロセッサ2のインデックス値を使用できることが理解されよう。
本発明の実施形態は、機械学習モデルを訓練する際に、コンピュータのプロセッサ間のデータの交換に対して適用することができる。開示される技法のそのような例示的な適用を説明するため、図1を参照すると、図1は、ニューラルネットワークを訓練するための分散アーキテクチャの概略ブロック図を示している。訓練データ源100が提供される。この訓練データ源100は、訓練しているニューラルネットワークモデルに適用可能な訓練データを保持することができるデータベース又は他の任意の種類のデータストアであり得る。ニューラルネットワークモデルによる処理は、それ自体が、複数のプロセッサ110a、110b、110cなどにわたって分散される。図1では、3つのユニットのみが示されているが、いかなる数のプロセッサも利用できることが容易に理解されよう。各プロセッサ110a、b、cは、訓練データ源100から訓練データのバッチを受信する。各プロセッサ110a、b、cは、モデルを定義するパラメータ112a、112b、112cのセットを保持する。訓練データの受信バッチは、計算関数114の現行のパラメータセットと併せて処理され、計算関数114の結果は、いわゆるデルタを生成するために使用され、デルタは、訓練データのバッチ及び現行のパラメータセットに計算関数を適用した結果として生じたオリジナルのパラメータと新しいパラメータとの差を表す。多くのニューラルネットワークでは、これらのパラメータは、「重み」と呼ばれ、従って、デルタ値は、「デルタ重み」と呼ばれる。図1では、重みは、112a、b、cでラベル付けされ、デルタ重みは、116a、b、cでラベル付けされている。実際には、重み及びデルタ重みは、プロセッサによってアクセス可能な適切なストアに格納されることが理解されよう。重み及びデルタ重みをローカルメモリに保持することができる場合は、訓練プロセスは、よりはるかに効率的なものになる。
図1のアーキテクチャの目標は、3つの別個のモデルを訓練することではなく、単一のモデルを分散して訓練することである。従って、目的は、各プロセッサにおいてモデルパラメータ(又は重み)を単一の共通のセットに収束させることである。任意の特定の重みセットから始め、各プロセッサにおいて受信された訓練データのバッチが同一ではないと想定すると、各プロセッサにおいて各計算関数によって生成されるデルタ重みにばらつきが生じることになる。従って、必要なのは、訓練データのバッチの各反復の後にプロセッサにわたってデルタ重みを分散させるための方法である。これは、図1に図示されており、組合せ機能118は、各プロセッサからデルタ重みを受信し、平均関数など、デルタ重みを集約(reduce)する数学関数を実行する。次いで、組合せ機能118の出力が各プロセッサ内の組合せ回路120a、120b、120cにそれぞれフィードバックされる。従って、新しい重みセットは、オリジナルの重みと組合せ機能118からの組み合わされた出力との組合せとして生成され、新しい重み118a、118b、118cは、ローカルメモリに戻されて格納される。次いで、訓練データの次のバッチが各プロセッサに供給され、プロセスは複数回繰り返される。プロセッサの開始重みが同じである場合は、各反復の後、それらの重みは、再び同じ新しい値にリセットされる。デルタ重みは、組合せ機能118に供給され、組合せ機能118で集約され、次いで、それらの集約形態でプロセッサの各々に供給され、オリジナルの重みと組み合わせることができる。
プロセッサ間でデータの交換を効率的に実施できる方法の1つは、コレクティブの使用であり、コレクティブは、コンピュータにおいてデータを処理する際に一般的に使用されるルーチンである。それらのコレクティブは、複数の異なるプロセスにわたってデータの共有及び処理を可能にするルーチンであり、複数の異なるプロセスは、同じプロセッサ上で実行されているものであっても、異なるプロセッサ上で実行されているものであってもよい。例えば、1つのプロセスがデータストアからデータを読み取る場合、そのデータを他のプロセスと共有するために、「ブロードキャスト(broadcast)」プロセスを使用することができる。別の例は、複数のプロセスにおいて特定の関数の結果が必要な場合である。「集約(reduction)」は、複数のプロセスの各々からのデータ値に演算関数の適用を必要とした結果である。「gather」及び「scatter」コレクティブは、複数のデータアイテムを取り扱う。あるコレクティブは、機械学習アプリケーションの処理においてますます重要になった。
MPI(メッセージパッシングインタフェース)は、多くの並列演算アーキテクチャに適用することができるメッセージパッシング規格である。MPIは、機械学習に適用可能な多くのコレクティブを定義する。そのようなコレクティブの1つは、「allreduce」と呼ばれる。allreduce動作は、異なるソースプロセスからの複数のデータ値に作用する演算関数の結果を受信プロセスで提供できるようにする。受信プロセスは、ソースプロセスのうちの1つであり得ることや、複数の受信プロセスが存在し得ることに留意されたい。allreduceコレクティブは、複数のソースプロセスからのデータ値を集約し、その結果をすべてのソースプロセス(集約された結果の受信プロセスとして動作する)に分散する。MPI規格によれば、allreduceコレクティブは、reduceコレクティブにおいてすべてのソースプロセスからのデータ値を集約し(例えば、プロセスのうちの1つで)、次いで、各ソースプロセスに結果をブロードキャストすることによって実施される。
図1Aは、5つのプロセッサN・・・Nのライン接続トポロジにおいてallreduceコレクティブをどのように実施できるかを示す概略図である。これらのプロセッサは、組合せ機能が提供される図1のプロセッサに相当し得る。プロセッサは、ライン構成で接続されるように示されており、各プロセッサは、「順方向」リンクL及び「逆方向」リンクLによってその近隣のプロセッサに接続される。図に示されるように、方向表現が含意するように、順方向リンクは、図1Aでは、左から右にプロセッサを接続し、逆方向リンクは、図1Aでは、右から左にプロセッサを接続する。各プロセッサは、200で指定される処理能力及び202で指定される格納能力を有する。また、各プロセッサは、リンクL/Lを介してその近隣のプロセッサとの接続を可能にする1つ又は複数のリンクインタフェースも有する。
プロセッサ間でデルタ重みを交換するために使用することができるallreduceコレクティブは、図2に示される。図2は、開始状態S1での4つのプロセッサの各々における部分値又は「部分」P、P、P、Pの集合(ベクトル)を示す。この環境では、プロセッサは、プロセッサのネットワークのプロセッサである。各プロセッサN、N、N、Nは、4つの「対応する」部分P、P、P、Pを有することに留意されたい。すなわち、各部分は、プロセッサn上のそのベクトルにおけるP(n)が、プロセッサn+1上のそのベクトルにおけるP(n+1)と同じ位置を有するようなベクトルの位置を有する。添え字(n)は、その部分が存在するプロセッサを示すために使用される(従って、P(0)は、プロセッサN上の部分Pである)。reduce-scatterパスでは、対応する部分が集約され、プロセッサのうちの1つに集約が提供される。例えば、部分P(0)、P(1)、P(2)、P(3)は、(rに)集約され、プロセッサNに配置される。同様に、部分P(0)、P(1)、P(2)、P(3)は、(rに)集約され、プロセッサNに配置される。そして以下同様に続き、中間状態S2では、各プロセッサは、集約r、r、r、rのうちの1つを有する。説明されるように、集約は、任意の組合せ関数
Figure 2022545222000002

によるものであり得、独立演算子(例えば、max)又は結合演算子=P(N(N(N(N)が含まれ得る。次いで、allgatherパスでは、状態S3を起動させるために、各集約がすべてのプロセッサに提供され、ここでは、各プロセッサは、すべての4つの集約を保持する。S1では、「対応する」部分(例えば、P(0)、P(1)、P(2)、P(3))は異なり得るのに対して、状態S3では、各集約(例えば、rであり、r=f{(P(0),P(1),P(2),P(3))})はすべてのプロセッサにおいて同じであることに留意されたい。機械学習では、部分値P、P、P、Pの集合はベクトルである。部分(例えば、更新された重み)のベクトルは、訓練の間にモデルの各パスにおいて生成される。状態S3での各プロセッサにおけるリダクションr、r、r、rは、完全な集約ベクトルである。機械学習の環境では、各部分は、モデルのパラメータに対する更新デルタの集合であり得る。その代替として(本明細書ではさらなる説明が行われない配列では)、各部分は、更新パラメータであり得る。
従って、記載されるように、allreduce動作は、reduce-scatter動作と、それに続くallgather動作からなる。reduce-scatter動作の間、各ノードは、部分の異なる要素を交換する。reduce-scatterが完了すると、すべてのノードは、最終的なallreduceのn分の1を有する。allgatherの間、各ノードは、n-1ステップ後にすべてのノードが完全なデータセットを有するまで、最終的なallreduceの追加の1/nを受信する。
図3A及び3Bは、6つの「仮想」IDリングを使用してreduce-scatter/allgatherの例を示す。これらは、本明細書では、「論理」リングとも呼ばれる。図3Aは、複数の仮想リングにおける部分の集約を示す概略図である。各部分は、6つのフラグメントに分けられる。図3Aでは、大文字R、Y、G、B、P、Lの各々は、各プロセッサに格納された部分の異なるフラグメントを示す。文字は、互いに集約する予定の対応するフラグメントを示し、それらのフラグメントに対する「仮想」又は「論理」リングを定義する。図3Aを見ると、部分P、P、P、P、P、及びPの各々における「R」フラグメントは、結果ベクトル
Figure 2022545222000003

の単一のフラグメントに集約される。Y、G、B、P、Lフラグメントに対しても同様である。
図3Bは、タイミング図を示し、水平軸上の時間は、allreduceプロセスの各ステップにおけるデータ交換及び演算を示す。図3A及び3Bでは、allreduceプロセスは、reduce-scatter段階と、それに続くallgather段階によって実行される。
図3A及び3Bの表記は以下の通りである。各部分は、P、P、P、P、P、及びPで示される。プロセスの開始時、各部分は、それぞれのプロセッサN、N、N、N、N、N上に格納されている。各フラグメントは、フラグメントの順番(fragment ordinant)及び集約されると考えられる仮想リングにおける位置に従ってラベル付けされる。例えば、RAは、プロセッサN-N-N-N-N-Nによって形成される仮想リングの第1のフラグメントであるため、部分PのRフラグメントを示す。RAは、プロセッサNで計算されたRフラグメントを示し、その仮想リングの第2の位置にある。YAは、プロセッサNで計算されたYフラグメントを示す。「0」の添え字は、それがその仮想リングの第1のフラグメントであることを示し、Yリングは、N-N-N-N-N-Nである。特に、Aに付けられる添え字は、仮想リングを反映するものであり、物理的なプロセッサ(又は部分)には相当しないことに留意されたい。図3Aは、順方向リンクの仮想リングのみを示すことに留意されたい。図3Bは、逆方向リンクにおいて同等のプロセスが起こっていることを示し、フラグメントは、Bとして示されている。
ステップ1では、各仮想リングの第1のフラグメント(A)は、プロセッサから次の隣接するプロセッサに転送され、プロセッサでの対応するフラグメントと集約される。すなわち、RAは、NからNに移動し、RAと集約され、RA0,1を形成する。0,1の表記は、仮想リングの第1及び第2のフラグメントの集約によってフラグメントが形成されることを示す。同じステップにおいて、各仮想リングのAフラグメントが同時に送信されることに留意されたい。すなわち、NとNとの間のリンクはYAを送信するために使用され、NとNとの間のリンクはGAを送信するために使用されるなど、以下同様である。次のステップでは、対応する集約されたフラグメントは、順方向リンク上で次の隣接するプロセッサに送信される。例えば、RA0,1は、NからNに送信され、YA0,1は、NからNに送信される。明確にするため、図3Aにおいてすべてのフラグメントに番号が付けられているわけではないことに留意されたい。完全なフラグメント及び番号のセットは、図3Bに示されている。このプロセスは、5つのステップにわたって続けられる。5つのステップが完了した後には、各プロセッサにすべてのフラグメントの集約が存在する。第5のステップの終了時には、この集約は、フラグメントの対応する各リングの最後のプロセッサにある。例えば、R集約は、プロセッサNにある。
allgather段階の開始は、各仮想リングにおける最後のプロセッサから最初のプロセッサへの送信によって始まる。従って、Rフラグメントの最終的な集約はプロセッサNで終了し、allgather段階の第1のステップの準備が整う。Yフラグメントの最終的な集約はプロセッサNで終了する。allgather段階の次のステップでは、集約されたフラグメントは再び、次の隣接するプロセッサに送信される。従って、完全に集約されたRフラグメントは、ここではNにあり、完全に集約されたYフラグメントはここではNにあるなど、以下同様である。この方法では、各プロセッサは、allgather段階の終了時には、部分の完全に集約されたすべてのフラグメントR、Y、G、B、P、Lで終了する。
本発明の例示的な実施形態は、機械学習環境におけるデータの交換を制御するために適用することができる。具体的には、例示的な実施形態は、図2、3A及び3Bに関して上記で説明されるreduce-scatter動作の間のデータの交換を制御するために適用することができる。
図4を参照すると、図4は、図12に関して説明されるコンピュータ700の例示的な実施形態を示している。この例示的な実施形態は、上記で説明されるように、機械学習環境におけるプロセッサ間のデータの交換を制御するために適用することができる。図4では、データは、交換段階の特定の一部の間にコンピュータ700のプロセッサ2間で交換される。
図4に示されるように、特定の一部の間、各プロセッサ2の実行ユニット420は、インデックスストレージ415に保持されたインデックス値に応じて、データメモリ405からデータフラグメント/要素を選択するように構成される。プロセッサNの実行ユニット420は、プロセッサNによってストレージ415に保持されたインデックス値に応じて、RAとラベル付けされたデータを選択してプロセッサNに転送する。プロセッサNの実行ユニット420は、プロセッサNによって保持されたインデックス値に応じて、YAとラベル付けされたデータを選択してプロセッサNに転送する。プロセッサNの実行ユニット420は、プロセッサNによって保持されたインデックス値に応じて、GAとラベル付けされたデータを選択してプロセッサNに転送する。プロセッサNの実行ユニット420は、プロセッサNによって保持されたインデックス値に応じて、BAとラベル付けされたデータを選択してプロセッサNに転送する。プロセッサNの実行ユニット420は、プロセッサNによって保持されたインデックス値に応じて、PAとラベル付けされたデータを選択してプロセッサNに転送する。プロセッサNの実行ユニット420は、プロセッサNによって保持されたインデックス値に応じて、LAとラベル付けされたデータを選択してプロセッサNに転送する。
各プロセッサ2がインデックス値を使用して転送するデータを選択することに加えて、別のプロセッサ2からデータパケットが受信され次第、各プロセッサ2の実行ユニット420は、インデックスストレージ415に格納されたインデックス値に応じて、受信データパケットから導出されたデータフラグメントをメモリ405のどこに格納するかを決定する。また、各プロセッサ2の実行ユニット420は、受信データと組み合わせる他の任意のデータフラグメントの選択も行う。例えば、プロセッサNの実行ユニット420は、プロセッサNからLAとラベル付けされたデータを受信し、そのインデックスに応じて、このデータをメモリ405内の場所Lに保持されたデータLAと集約するという命令を実行する。プロセッサNの実行ユニット420は、プロセッサNからRAとラベル付けされたデータを受信し、そのインデックスに応じて、このデータをメモリ405内の場所Rに保持されたデータRAと集約するという命令を実行する。プロセッサNの実行ユニット420は、プロセッサNからYAとラベル付けされたデータを受信し、そのインデックスに応じて、このデータをメモリ405内の場所Yに保持されたデータYAと集約するという命令を実行する。プロセッサNの実行ユニット420は、プロセッサNからGAとラベル付けされたデータを受信し、そのインデックスに応じて、このデータをメモリ405内の場所Gに保持されたデータGAと集約するという命令を実行する。プロセッサNの実行ユニット420は、プロセッサNからBAとラベル付けされたデータを受信し、そのインデックスに応じて、このデータをメモリ405内の場所Bに保持されたデータBAと集約するという命令を実行する。プロセッサNの実行ユニット420は、プロセッサNからPAとラベル付けされたデータを受信し、そのインデックスに応じて、このデータをメモリ405内の場所Pに保持されたデータPAと集約するという命令を実行する。プロセッサNの実行ユニット420は、プロセッサNからLAとラベル付けされたデータを受信し、そのインデックスに応じて、このデータをメモリ405内の場所Lに保持されたデータLAと集約するという命令を実行する。
転送されるデータフラグメントの各々は、図3A及び3Bに示されるデータフラグメントに相当し得る。そのような事例では、各データフラグメントは、各プロセッサ2によってその訓練データを使用して計算されたデルタ値の部分集合に相当する。集合的に、メモリ405に保持され、文字R、Y、G、B、P、Lによって表されるデータ値は、それぞれのプロセッサ2に提供された訓練データを使用して計算されるデルタ値の部分ベクトルを形成する。図4は、図2に示されるreduce-scatter動作の第1のステップを示し、各プロセッサ2には、1つ又は複数のデルタ重みを含む集約されたフラグメントのセットが提供される。受信側のプロセッサ2に転送される1つ又は複数のデルタ重みの各フラグメントは、その受信側のプロセッサのメモリ405に保持されたデルタ重みの対応するフラグメントと組み合わされる。例えば、図4に示されるステップにおいて、フラグメントRAは、プロセッサNからプロセッサNに転送され、フラグメントRAと組み合わされる。フラグメントを転送し、後続のステップにおいてそれらを組み合わせることにより、reduce-scatter動作が実行される。各ステップでは、プロセッサ間で交換されるフラグメントは、インデックス値ストレージ415に保持されたインデックス値に依存する。各プロセッサ2の少なくとも1つの実行ユニットは、このインデックス値を使用して、どのフラグメントを送信するか及び受信した各フラグメントをメモリのどこに格納するかを決定する。
図4Aを参照すると、図4Aは、allgatherプロセスの間のデータの交換を示しており、allgatherプロセスは、図2に示されるallreduceプロセスの一部として、reduce-scatterプロセスに続いて実行される。図2では、プロセッサのメモリ405に示されるフラグメントの各々は、集約されたフラグメント、すなわち、reduce-scatter動作の開始前に図4のメモリに存在する対応するフラグメントの組合せである。
各プロセッサ2の少なくとも1つの実行ユニット420は、格納しているインデックス値に応じて、集約されたフラグメントを選択して渡すように構成される。プロセッサNの実行ユニット420は、プロセッサNによって保持されたインデックス値に応じて、
Figure 2022545222000004

とラベル付けされたデータを選択してプロセッサNに転送する。プロセッサNの実行ユニット420は、プロセッサNによって保持されたインデックス値に応じて、
Figure 2022545222000005

とラベル付けされたデータを選択してプロセッサNに転送する。プロセッサNの実行ユニット420は、プロセッサNによって保持されたインデックス値に応じて、
Figure 2022545222000006

とラベル付けされたデータを選択してプロセッサNに転送する。プロセッサNの実行ユニット420は、プロセッサNによって保持されたインデックス値に応じて、
Figure 2022545222000007

とラベル付けされたデータを選択してプロセッサNに転送する。プロセッサNの実行ユニット420は、プロセッサNによって保持されたインデックス値に応じて、
Figure 2022545222000008

とラベル付けされたデータを選択してプロセッサNに転送する。プロセッサNの実行ユニット420は、プロセッサNによって保持されたインデックス値に応じて、
Figure 2022545222000009

とラベル付けされたデータを選択してプロセッサNに転送する。これらのデータ転送の各々は、allgather動作の第1のステップを完了する。後続のステップを実行することにより、各プロセッサ2には、集約された各フラグメントが提供される。
各プロセッサ2がインデックス値を使用して転送するデータを選択することに加えて、別のプロセッサ2からデータが受信され次第、受信側のプロセッサは、インデックスストレージ415に格納されたインデックス値に応じて、データをメモリのどこに格納するかを決定する。例えば、プロセッサNの実行ユニット420は、プロセッサNから
Figure 2022545222000010

とラベル付けされたデータを受信し、そのインデックスに応じて、このデータをメモリ405内の場所Lに格納するという命令を実行する。プロセッサNの実行ユニット420は、プロセッサNから
Figure 2022545222000011

とラベル付けされたデータを受信し、そのインデックスに応じて、このデータをメモリ405内の場所Rに格納するという命令を実行する。プロセッサNの実行ユニット420は、プロセッサNから
Figure 2022545222000012

とラベル付けされたデータを受信し、そのインデックスに応じて、このデータをメモリ405内の場所Yに格納するという命令を実行する。プロセッサNの実行ユニット420は、プロセッサNから
Figure 2022545222000013

とラベル付けされたデータを受信し、そのインデックスに応じて、このデータをメモリ405内の場所Gに格納するという命令を実行する。プロセッサNの実行ユニット420は、プロセッサNから
Figure 2022545222000014

とラベル付けされたデータを受信し、そのインデックスに応じて、このデータをメモリ405内の場所Bに格納するという命令を実行する。プロセッサNの実行ユニット420は、プロセッサNから
Figure 2022545222000015

とラベル付けされたデータを受信し、そのインデックスに応じて、このデータをメモリ405内の場所Pに格納するという命令を実行する。プロセッサNの実行ユニット420は、プロセッサNから
Figure 2022545222000016

とラベル付けされたデータを受信し、そのインデックスに応じて、このデータをメモリ405内の場所Lに格納するという命令を実行する。
各プロセッサは、図4及び4Aのメモリに示されるものなどのデータをさらなるプロセッサに転送するための完全な命令のセットを含み、インデックス値は、データ転送を制御する。インデックスは、異なる方法でデータ転送を制御することができる。
いくつかの実施形態では、各プロセッサによって保持されるインデックス値は、メモリ405から別のプロセッサ2への適切なデータフラグメントの転送を実行するために各実行ユニット420によって実行される命令のセットの命令を決定する。また、各プロセッサ2は、フラグメントを受信してメモリ405内の適切な場所に格納するための完全な命令のセットも含む。各プロセッサ2によって保持されるインデックス値は、受信されたフラグメントを適切な場所に格納するためにプロセッサ2の少なくとも1つの実行ユニット420によって実行される命令のセットの命令を決定する。実行ユニット420は、この事例では、関連するデータ転送を実行するために実行される特定の命令のセットを選択するために、インデックス値に依存する分岐動作を実行する。
いくつかの実施形態では、各プロセッサ2の少なくとも1つの実行ユニット402は、データが読み取られるか又は書き込まれるデータメモリ405内のアドレスを決定するために、インデックス値を入力として使用して算術演算を実行する。
図4及び4Aでは、プロセッサ2の各々は、統合されたデータメモリ405及び命令メモリ410を有するものとして示されている。しかし、これらのメモリは、それらのそれぞれのプロセッサ2全体にわたって分散させることができる。いくつかの実施形態では、各プロセッサ2は、複数の処理ユニットを含み得、複数の処理ユニットは、本明細書ではタイルと呼ばれる。そのような配列は、参照により本明細書に組み込まれる米国特許出願第15/886315号明細書で説明されている。各タイルは、それが属するプロセッサ2に対するインデックスのコピーを含み、図12、4及び4Aを参照して上記で論じられるものなど、適切なデータ転送動作を実施するためにインデックス値に依存するその命令のセットから動作を実行するように構成される。
図4Bを参照すると、図4Bは、マルチタイルプロセッサ2の例を示している。プロセッサ2は、複数のプロセッサタイル4のアレイ6と、タイル4間を接続する相互接続部34とを含む。プロセッサ2は、同じICパッケージにパッケージ化された複数のダイのうちの1つとして単独で実装することができる。相互接続部34は、本明細書では、タイル4がデータを交換できるようにするためのものであるため、「交換ファブリック」34と呼ぶこともできる。各タイル4は、プロセッサ及びメモリのそれぞれの例を含む。例えば、例示として、プロセッサ2は、何百もの又は千を超えるタイル4を含み得る。完全を期すため、本明細書で言及される「アレイ」は、必ずしも特定の次元数又は物理的なレイアウトのタイル4を含意するとは限らないことも留意されたい。
実施形態では、各プロセッサ2は、1つ又は複数の外部のリンク8も含み、プロセッサ2を1つ又は複数の他のプロセッサ(例えば、同じプロセッサ2の1つ又は複数の他の例)に接続できるようにする。これらの外部のリンク8は、プロセッサ2をホストプロセッサに接続するための1つ又は複数のプロセッサ・ホスト間リンク、並びに/或いは、同じICパッケージ若しくはカード上の又は異なるカード上のプロセッサ2の1つ又は複数の他の例とまとめて接続するための1つ又は複数のプロセッサ間リンクのうちの1つ又は複数を含み得る。例示的な一配列では、プロセッサ2は、プロセッサ2によって処理されるべき入力データという形態で、プロセッサ・ホスト間リンクのうちの1つを介してプロセッサに接続されるホストプロセッサ(図示せず)から作業を受信する。プロセッサ2の複数の例は、プロセッサ間リンクによってまとめてカードに接続することができる。従って、ホストは、複数のプロセッサ2を有するコンピュータにアクセスし、各プロセッサ2は、ホストアプリケーションに必要な作業負荷に応じて、マルチタイルシステムオンチップとして設計される。
相互接続部34は、アレイ6の異なるタイル4が互いに通信できるように構成される。しかし、同じタイル4上のスレッド間の依存性が潜在的に存在するのと同様に、アレイ6の異なるタイル4上で走らせているプログラムの部分間の依存性も存在し得る。従って、あるタイル4上のコード片が、別のタイル4上の別のコード片による利用が可能になっている依存データを先に走らせるのを防ぐための技法が必要とされる。
各タイル4は、それ自体が、ローカル命令メモリからの命令(コード)の実行や、ローカルデータメモリ内のデータの取扱いが可能なプロセッサである。タイル4は、バレルスレッドプロセッサ及びメモリのそれぞれの例を含み得る。例えば、例示として、プロセッサ2は、何百もの又は千を超えるタイル4を含み得る。完全を期すため、本明細書で言及される「アレイ」は、必ずしも特定の次元数又は物理的なレイアウトのタイル4を含意するとは限らないことも留意されたい。
プロセッサ2上のタイル4間の通信は、時間決定論的に起こる。しかし、タイル間交換の他の形態も可能である。アレイ6の異なるタイル4上で走らせているプログラムの部分間の依存性が存在し得る。すなわち、あるタイル上のデータ処理は、別のタイルからの結果に依存し得る(例えば、別のタイルが依存する結果を提供し得る)。従って、あるタイル4上のコード片が、別のタイル4上の別のコード片による利用が可能になっている依存データを先に走らせるのを防ぐための技法が必要とされる。
AI及びデータ科学の並列プログラミングモデルは、通常、演算、バリア及び交換の3段階の反復実行モデルに従う。その意味は、プロセッサへの及びプロセッサからのデータ転送が、通常、プロセッサ間及び各プロセッサとホストとの間のデータ一貫性を提供するためにバリア依存性を有することである。典型的には、使用されるデータ一貫性モデルは、バルク同期並列(BSP)、ステイル同期並列(SSP)及び非同期である。本明細書で説明される実施形態はBSPモデルを使用するが、代替の形態として他の同期モデルを利用できることが明らかであろう。
図5及び6を参照すると、図5及び6は、BSP交換スキームの実装形態を示しており、各タイル4は、交互サイクルで演算段階33と交換段階32を実行し、演算段階33と交換段階32は、タイル間でバリア同期30によって相互に分離される。図5及び6によって示される事例では、バリア同期は、各演算段階33とそれに続く交換段階32との間に配置される。演算段階33の間、各タイル4は、タイル上で局所的に1つ又は複数の演算タスクを実行するが、他のいかなるタイル4ともこれらの演算の結果の通信を行うことはない。交換段階32では、各タイル4は、先行する演算段階からの演算の1つ又は複数の結果を1つ又は複数の他のタイルと交換できるが、そのタスクが依存性を有するデータを他のタイル4から受信するまで、新しい演算の実行を行うことはない。また、先行する演算段階において演算されたもの以外のデータを他のタイルに送信することもない。交換段階32において、内部制御関連動作などの他の動作を実行できることは除外されない。タイルグループの外部の通信は、BSPメカニズムを任意に利用できるが、代替として、BSPを利用せずに、それ自体の他の何らかの同期メカニズムを代わりに使用することができる。
BSP原理によれば、バリア同期30は、演算段階33から交換段階32に移行する接合点、交換段階32から演算段階33に移行する接合点又はその両方に配置される。すなわち、(a)グループのいずれかのタイルが次の交換段階32に進めるようになる前に、すべてのタイル4がそれらのそれぞれの演算段階33を完了する必要があるか、(b)グループのいずれかのタイルが次の演算段階33に進めるようになる前に、グループのすべてのタイル4がそれらのそれぞれの交換段階32を完了する必要があるか、又は、(c)これらの条件の両方が実施されるかのいずれかである。3つのすべての変形形態では、段階を交互に行うのは個々のタイルであり、同期するのはアセンブリ全体である。次いで、交換段階と演算段階のシーケンスは、複数の反復にわたって繰り返すことができる。BSPの専門用語では、交換段階及び演算段階の各反復は、「スーパーステップ」と呼ばれる場合がある(ただし、文献上では、専門用語が常に一貫して使用されるとは限らないことに留意されたい。すなわち、個々の交換段階及び演算段階の各々が個別にスーパーステップと呼ばれる場合があるのに対して、本明細書で採用される専門用語のように、交換段階及び演算段階が合わせてスーパーステップと呼ばれる場合もある)。
また、同じプロセッサ2又は異なるプロセッサ上のタイル4の複数の異なる独立したグループの各々は、互いに非同期的に動作する別個のそれぞれのBSPグループを形成することができ、演算、同期及び交換のBSPサイクルは所定の各グループ内でのみ課されるが、各グループは他のグループとは無関係にそれを行うことは除外されないことにも留意されたい。すなわち、マルチタイルアレイ6は、複数の内部同期するグループを含み得、各々は、他のそのようなグループとは無関係に及び非同期的に動作する(後にさらに詳細に論じられる)。いくつかの実施形態では、後にさらに詳細に論じられるように、同期及び交換の階層的分類がある。
図6は、(a)演算段階33から交換段階32へのバリア同期(上記を参照)が課される事例における、アレイ6のタイルのいくつか又はすべてのグループ4i、4ii、4iiiの間で実装されるようなBSP原理を示す。この配列では、いくつかの他のタイルが依然として交換を行っている間に、いくつかのタイル4が演算33を開始できることに留意されたい。
プロセッサ2のタイル4間の通信は時間決定論的に起こり、データパケットはヘッダなしで送信される。これについては、我々の先の出願である米国特許出願第15/886315号明細書で説明されている。
実施形態では、プロセッサ2の複数の例は、複数のプロセッサ2に広がるタイル4のさらに大きなアレイを形成するためにまとめて接続される。これは、図7に示されている。プロセッサ2は、(図7に示される外部のリンク8を介して)外部の相互接続部72によってまとめて接続される。この外部の相互接続部72は、同じICパッケージ上、同じカード上の異なるICパッケージ上及び/又は異なるカード上の異なるICパッケージ上のプロセッサ2間で接続することができる。異なるプロセッサ上のタイル4間のデータ交換用の導管を提供するのと同様に、外部の相互接続部72は、異なるプロセッサ2上のタイル4間のバリア同期を実行して異なるプロセッサ2上のタイル4の局所的な終了状態を集約するためのハードウェアサポートも提供する。
図8は、プロセッサ2間の通信(外部の交換)のための例示的なメカニズムを示す。このメカニズムは、非時間決定論である。メカニズムは、外部の相互接続部72における専用ハードウェアロジックで実装される。データは、パケットの形態で、外部の相互接続部72上で送信される。内部の相互接続部34上で送信されるパケットとは異なり、これらのパケットは、ヘッダを有する。すなわち、送信の順番は変更される場合があるため、パケットヘッダに送信先アドレスが存在する必要がある。外部の相互接続部72は、データパケットのヘッダに応じて異なるプロセッサ間でデータパケットを静的にルーティングするためのルーティングテーブルを含む。
物理層では、相互接続メカニズムは損失を有する(lossy)が、トランザクション層では、リンク層のアーキテクチャにより、メカニズムは損失を有さない。すなわち、パケットの受信が確認されていない場合は、相互接続部72のハードウェアによって自動的に再送信される。しかし、損失及びデータリンク層での再送信の可能性は、外部の相互接続部72上でのデータパケットの伝達が時間決定論的ではないことを意味する。さらに、所定の交換のすべてのパケットは、一緒に到着する場合も、時間差がある場合もあり、また、いかなる順番でもあり得るため、外部の相互接続部は、フロー制御及びキューイングを必要とする。さらに、相互接続部は、ビットロックを維持するために十分なデータ信号遷移を有する受信データストリームからクロックを推論するために、クロックデータリカバリ(CDR)技術を使用することができる。この推論されるクロックは、送信側のクロックに知られていない位相関係のものであり、従って、非決定論的と見なされる追加の理由が示される。
示されるように、外部の相互接続部72は、外部の交換ブロック(XB)78を含む。コンパイラは、外部の交換要求(XREQ)を交換ブロック78に送信する(動作S1)ために、タイル4のうちの1つを指名する。XREQは、1つ又は複数の制御パケットを含むメッセージであり、別のプロセッサ2上の別の1つ又は複数のタイル4に送信するためのデータパケット(コンテンツ)をどのタイル4が有するかを示す。これは、図8においてチェックマーク及びバツ印によって概略的に示されている。例示的なシナリオとして、チェックマークが付けられたものは、外部に送信するデータパケットを有するものであり、バツ印が付けられたものは、外部に送信するデータパケットを有さないものである。動作S2では、交換ブロック78は、外部に送信するデータと共に、交換オン(XON)制御パケットをタイル4の第1のタイルに送信する。これにより、第1のタイルは、外部の相互接続部78を介して関連送信先へのそのパケットの送信を開始する(動作S3)。外部の相互接続部で第1のタイルから受信されたデータパケットは、外部の相互接続部78内のルーティングテーブルを使用して送信先に静的にルーティングされる。XB 78が相互接続部にパケットを送信し続けることができない場合はいつでも(例えば、以前のパケット損失及び相互接続部における再送信が原因で、又は、他の多くのXB及びタイルによる外部の相互接続部の過度のサブスクリプションが原因で)、XB 78がオーバフローをキューイングする前に、XBは、交換オフ(XOFF)をそのタイルに送信する。混雑が解消され、XB 78が再びそのキューの十分なスペースを得た時点で、XB 78は、XONをタイルに送信し、そのコンテンツの送信の継続が可能になる。このタイルがその最後のデータパケットを送信した時点で、動作S4において、交換ブロック78は、交換オフ(XOFF)制御パケットをこのタイルに送信し、次いで、動作S5において、送信予定のデータパケットと共に、別のXONを次のタイル4に送信するなど、以下同様である。XON及びXOFFの信号伝達は、外部の交換ブロック78の形態の専用ハードウェアロジックのハードウェアメカニズムとして実装される。
図9を参照すると、図9は、プロセッサ2の一部であるタイル4の例を示している。タイル4は、少なくとも1つの実行ユニット905を含み、少なくとも1つの実行ユニット905は、命令メモリ910に格納された命令によって定義されるような、算術及び論理演算、アドレス計算、ロード及び格納動作並びに他の動作を実行することができる。実行ユニット905は、データメモリ915に保持されたデータに関する動作を実行するために命令を実行するように構成される。各タイル4の命令メモリ910に保持された命令は、図4及び4Aのプロセッサ2全体に対して示される命令メモリ410に保持された命令のセットのサブセットと見なすことができる。命令メモリ410は、各タイル4の命令メモリ910を含む分散メモリであると見なすことができる。
命令メモリ910に保持された命令は、各プロセッサ2の対応するタイル4において同じであり得る。図10を参照すると、図10は、各プロセッサ2の異なるタイル4が互いにどのように対応するかを示している。第1のプロセッサ2iは、タイル4iaを含む。第2のプロセッサ2iiは、タイル4iiaを含む。第3のプロセッサ2iiiは、タイル4iiiaを含む。タイル、4ia、4iia、4iiiaの各々には、同じ命令がロードされる。各タイル4ia、4iia、4iiiaの実行ユニット905によって実行される動作は、それらが属するプロセッサ2のインデックスに応じて異なる。同様に、第1のプロセッサ2iは、タイル4ibを含む。第2のプロセッサ2iiは、タイル4iibを含む。第3のプロセッサ2iiiは、タイル4iiibを含む。タイル、4ib、4iib、4iiibの各々には、同じ命令がロードされる。各タイル4ib、4iib、4iiibの実行ユニット905によって実行される動作は、それらが属するそれぞれのプロセッサ2のインデックスに応じて異なる。従って、プロセッサ2の対応する各タイル4には命令の同一のセットがロードされるため、コンピュータ700の各プロセッサ2は、命令の全体的に同じセットを含むことが理解されよう。
図9に戻ると、演算段階の間、データの値を変更するために、データメモリ915に保持されたデータに関してある動作が実行される。命令メモリ910に保持された命令は異なるプロセッサ2にわたって対応するタイル4において同じであるため、演算段階の間にデータメモリ915に保持されたデータを操作するために実行される動作は、プロセッサ2の対応するタイルにわたって同じであり得る。しかし、いくつかの実施形態では、命令メモリ910に保持された命令は、データ依存性を有し得、その結果、演算段階の間、データメモリ915に保持された異なるデータセットに応じて、異なる動作が実行される。
タイル4は、インデックス値ストア920に保持されたインデックス値を含む。データメモリ915に保持されたデータを操作するために演算段階の間に実行ユニット905によって実行される動作は、インデックス値ストア920に保持されたインデックス値とは無関係である。しかし、他のプロセッサ2との交換段階の間に実行ユニット905によって実行される動作は、インデックス値に依存する。インデックスストレージ920は命令メモリ910とは別個のものとして示されているが、いくつかの実施形態では、インデックスストレージ920及び命令メモリ910は、単一のメモリアレイの一部を形成し得る。
示されるように、データメモリ915に保持されたデータは、異なる部分/フラグメントに分割される(スライスとして示されている)。他のタイルとのデータ交換が行われる前、少なくとも1つの実行ユニット905は、1つ又は複数の部分から送信バッファ925にデータを転送するという命令を実行するように構成される。実行ユニット905は、インデックスストレージ920に保持されたインデックス値に応じて、転送するデータを選択する。次いで、実行ユニット905は、選択されたデータを送信バッファ925に渡す。交換段階の間、実行ユニット905は、インタフェース8を介してデータを送信する命令を実行する。インタフェース8を介してデータを送信することは、別のプロセッサ2のデータ送信先アドレスを有するヘッダをデータパケットに加えることを含む。データパケットは、図8に関して上記で論じられるスキームに従って、そのプロセッサ2に送信される。
交換段階の間、タイル4は、1つ又は複数のデータパケットを受信するように構成される。これらのデータパケットは、他のプロセッサ2上のタイルから受信される。1つ又は複数のデータパケットが受信され次第、データパケットは、受信バッファ930に格納される。少なくとも実行ユニット905は、ストレージ920に保持されたインデックス値に応じて受信データを取り扱う命令を実行する。少なくとも1つの実行ユニット905は、ストレージ920に保持されたインデックス値に応じて、データパケットから導出されたデータを、データメモリ915内の場所で格納するように構成される。また、少なくとも1つの実行ユニット905は、動作の結果をメモリ915に格納する前に、受信データパケットからのデータ及びメモリ915に格納されたデータを用いて、集約動作などの動作を実行することもできる。
従って、ストレージ920に保持されたインデックス値は、少なくとも1つの実行ユニット905によって、送信するためにメモリ915から特定のアドレスのデータを選択すること、受信データに関する動作(例えば、集約動作)を実行するためにデータを選択すること、及び、インデックス値に応じてメモリ915内の特定のアドレスで受信データから導出された結果を格納することの少なくとも1つを行うために使用される。
実行ユニット905によってインデックス値を使用してデータを格納するためのメモリ915内のアドレスを選択する方法は様々である。
いくつかの実施形態では、異なるデータ部分は、メモリ915内で隣接して配列される。実行ユニット905は、インデックス値に応じてデータを読み取るか又は書き込む予定のメモリ915内のアドレスを計算するように構成される。実行ユニット905は、命令メモリ910の命令において定義される動作を実行することによってアドレスを計算する。動作は、算術演算である。
いくつかの実施形態では、命令メモリ910は、複数のコード部分を格納し、各部分は、データ転送を異なる方法で制御するように構成される。例えば、あるコード部分は、メモリ915内の特定のメモリ場所にあるデータを別のプロセッサ2に送信させることができるのに対して、別のコード部分は、メモリ915内の異なるメモリ場所にあるデータを別のプロセッサ2に送信させることを実行ユニット905に行わせることができる。別のコード部分は、受信データをメモリ915内の特定の場所で格納させることも、受信データに対して特定の動作を行わせることもできる。実行ユニット905は、命令メモリ915からのコードを実行し、実行シーケンスにおいてメモリ915からデータが読み取られるか又はメモリ915にデータが書き込まれる時点で、実行ユニット905は、データの読み取り又は書き込み動作を実行するためのコード部分を選択するために分岐動作を実行する。コード部分は、インデックス値に応じて選択される。
本明細書で開示される技法の例示的な適用によれば、各プロセッサ2には、機械学習モデルを訓練するために、デルタ重みを生成するための異なる訓練データセットが提供される。この事例では、各タイル4には、1つ又は複数のデルタ重みを生成するための異なる訓練データセットが提供される。一体となって、各プロセッサ2のすべてのタイル4は一体となって、完全なデルタ重みセットを生成し、完全なデルタ重みセットは、他のプロセッサ2上で生成されたデルタ重みと併せて平均化される。
いくつかの実施形態では、実行ユニット905は、処理する異なるワーカースレッド間で切り替えるように構成される。実行ユニット905は、この事例では、米国特許出願第15/886315号明細書で説明されるようなバレルスレッドプロセッサの一部である。この事例では、各ワーカースレッドは、機械知能グラフの個々のプロセッサのそれぞれと関連付けられた演算を実行するようにプログラムされる。この事例では、プロセッサ間のエッジの少なくともいくつかは、スレッド間のデータの交換に対応する。その間でデータが交換されるスレッドは、同じ実行ユニット905上で実行されているスレッドでも、異なるタイル4の実行ユニット上で実行されているスレッドでもあり得る。そのいくつかは、プロセッサ2の異なるタイル間の交換に関与し得る。メモリ915内に示されるスライスの各々は、プロセッサ間の特定のエッジと関連付けられたデルタ値に対応し得、デルタ値は、訓練の間に実行ユニット905によって計算される。また、メモリ915は、さらなるデータを含むものとしても示されている。このさらなるデータは、デルタ値を生成するためのデータ(訓練データなど)、現行の重み値及び機械学習モデルを定義する任意のさらなるデータ(活性化関数、各層のプロセッサの数など)を含み得る。
図11を参照すると、図11は、図12に示されるコンピュータ700などのコンピュータの各プロセッサに対してプログラムをコンパイルするためのコンパイルプロセスを示している。上記で論じられる命令のセット及びインデックス値は一体となって、各プロセッサ2上での実行のためのプログラムを構成する。各プロセッサ2に対するコンパイル済みの命令のセットは同じであり、各プロセッサ2に対する異なるインデックス値が命令のセットに追加されている。
方法1100は、コンパイラによって実行され、少なくとも1つの実行ユニットと、少なくとも1つの実行ユニットによる実行のためのコンピュータコードを保持する少なくとも1つのメモリとを含む任意の適切なコンピューティング装置上で実行することができる。
ステップS1110では、コンパイラは、各プロセッサ2に提供するための実行可能命令の単一のセットをコンパイルする。実行可能命令の単一のセットは、実行可能イメージの形態である。実行可能命令のセットは、複数の命令のサブセットを含み得、各サブセットは、プロセッサ2の異なるタイル4による実行のためのものである。
ステップS1120では、コンパイラは、コンピュータ700の各プロセッサ2に対して、プロセッサ2と関連付けられたインデックス値を決定する。決定される各インデックス値は、コンピュータ700内の異なるプロセッサ2を一意的に識別する。
ステップS1130では、コンパイラは、各プロセッサ2に対して、命令の単一のセット及びプロセッサ2と関連付けられたインデックス値を含むローカルプログラムを生成する。コンパイラは、各プロセッサ2に対して、S1110で生成されたコンパイル済みの命令のセットを取り入れ、この命令のセットをS1120で決定されたプロセッサに対するインデックス値とパッチすることによって、それを行う。
上記の実施形態は、単なる例として説明されていることが理解されよう。特定の実施形態について説明してきたが、本明細書が開示された時点で、当業者には、開示される技法の他の応用及び変形形態が明らかになるであろう。

Claims (15)

  1. 複数のプロセッサを含むコンピュータであって、各プロセッサが、前記コンピュータの演算段階の間にデータに関する動作を実行し、同期バリアに続いて、前記コンピュータの交換段階の間に少なくとも1つの他のプロセッサとデータを交換するように構成され、各プロセッサは、
    複数の処理ユニットと、
    実行可能命令の同じセットと複数のプロセッサの中の各プロセッサを識別するインデックス値とを含むプログラムを含む少なくとも1つのストレージであって、前記プロセッサの前記インデックス値のコピーと前記実行可能命令のセットのサブセットとを格納する前記プロセッサの前記処理ユニットの少なくとも1つのメモリを含む少なくとも1つのストレージと、
    前記実行可能命令のセットによって指定された計算において使用するためのデータを格納し、プロセッサの複数の処理ユニットの各々のデータメモリを含む、複数のデータメモリと、
    プロセッサの複数の処理ユニットの各々の実行ユニットを含む複数の実行ユニットと、
    を含み、
    前記複数の実行ユニットの少なくともいくつかそれぞれが、
    前記インデックス値に応じて、前記コンピュータの前記交換段階の間に、処理ユニットの前記データメモリと少なくとも1つの他のプロセッサとの間のデータ転送を実行するための動作を選択することと、
    前記交換段階の間にデータ転送を実行するために選択された動作を実行することと、
    を行うための実行可能命令の1つ以上のサブセットを実行するよう配置されている、
    コンピュータ。
  2. 少なくともいくつかのプロセッサの最小のいくつかの処理ユニットについて、前記インデックス値に応じてデータ転送を実行するための動作を選択することは、データが転送される少なくとも1つの他のプロセッサを選択することを含む、請求項1に記載のコンピュータ。
  3. 少なくともいくつかのプロセッサの少なくともいくつかの処理ユニットについて、前記動作は、前記インデックス値に応じて選択された前記データメモリの領域と少なくとも1つの他のプロセッサとの間でデータを転送させる、請求項1又は2に記載のコンピュータ。
  4. 少なくともいくつかのプロセッサの少なくともいくつかの処理ユニットについて、前記実行ユニットは、前記インデックス値に基づく算術演算を実行することによって、データメモリの領域のアドレスを計算するように構成される、請求項3に記載のコンピュータ。
  5. 少なくともいくつかのプロセッサの少なくともいくつかの処理ユニットについて、前記実行ユニットは、前記インデックス値に応じて前記実行可能命令のサブセットの少なくとも1つの命令に分岐するように構成され、前記少なくとも1つの命令は、前記実行ユニットによって実行されると、データメモリの領域と少なくとも1つの他のプロセッサとの間でデータを転送させる、請求項3に記載のコンピュータ。
  6. 少なくともいくつかのプロセッサの少なくともいくつかの処理ユニットについて、前記動作は、データメモリの領域に少なくとも1つの他のプロセッサから受信されたデータを格納することを含む、請求項3~5のいずれか一項に記載のコンピュータ。
  7. 少なくともいくつかのプロセッサの少なくともいくつかの処理ユニットについて、前記動作は、前記インデックス値に応じて、前記データメモリに格納されたデータを選択することと、選択されたデータを少なくとも1つの他のプロセッサに送信することとを含む、請求項1~6のいずれか一項に記載のコンピュータ。
  8. 最小のいくつかのプロセッサの少なくともいくつかの処理ユニットの前記実行ユニットは、データパケットを生成するために選択されたデータを処理するように構成され、
    前記データパケットは、選択されたデータと、少なくとも1つの他のプロセッサのバッファのアドレスを含むヘッダと、を含む、請求項7に記載のコンピュータ。
  9. 前記データ転送において転送されるデータを静的にルーティングするように構成されたルーティングハードウェアを含む、請求項1~8のいずれか一項に記載のコンピュータ。
  10. 少なくともいくつかのプロセッサの少なくともいくつかの処理ユニットについて、
    前記動作は、少なくとも1つの他のプロセッサのそれぞれから受信されたデータと、前記データメモリに格納されたデータを組み合わせることを含み、
    前記実行ユニットは、前記インデックス値に応じて、前記データメモリから前記データを選択するように構成される、請求項1~9のいずれか一項に記載のコンピュータ。
  11. 少なくともいくつかのプロセッサの少なくともいくつかの処理ユニットについて、
    前記データメモリは、少なくとも1つの機械学習モデルに対する複数のデルタ重みを含み、
    前記データメモリと少なくとも1つの他のプロセッサのそれぞれとの間のデータ転送が、前記データメモリと少なくとも1つの他のプロセッサのそれぞれとの間の1つ又は複数のデルタ重みの転送を制御することを含む、請求項1~10のいずれか一項に記載のコンピュータ。
  12. 少なくともいくつかのプロセッサの少なくともいくつかの処理ユニットについて、前記実行ユニットは、前記インデックス値に応じて、前記データメモリから1つ又は複数のデルタ重みを選択し、少なくとも1つの他のプロセッサのそれぞれに選択された1つ又は複数のデルタ重みを転送させるように構成される、請求項11に記載のコンピュータ。
  13. 少なくともいくつかのプロセッサの少なくともいくつかの処理ユニットについて、前記実行ユニットは、
    前記インデックス値に応じて、前記データメモリから1つ又は複数のデルタ重みを選択することと、
    選択された1つ又は複数のデルタ重みを、少なくとも1つの他のプロセッサから受信された1つ又は複数のデルタ重みと集約させることと、
    を行うように構成される、請求項11又は12に記載のコンピュータ。
  14. 前記プロセッサは、システムオンチップである、請求項1に記載のコンピュータ。
  15. 複数のプログラムを生成するためのコンピュータ実装方法であって、各プログラムが、複数のプロセッサを含むコンピュータのプロセッサによる実行に適し、各プロセッサが、複数の処理ユニットを有し、各処理ユニットが、前記プロセッサのプログラムのサブセットを保持するための少なくとも1つのメモリと、前記プログラムの前記サブセットを実行するための実行ユニットと、データを保持するためのデータメモリとを有し、コンピュータ実装方法は、
    単一の実行可能命令のセットをコンパイルすることと、
    各プロセッサに対して、プロセッサと関連付けられたインデックス値を決定することと、
    各プロセッサに対して、単一の命令のセット及び前記インデックス値を含むローカルプログラムを生成することと、
    を含み、
    前記ローカルプログラムの各サブセットは、前記ローカルプログラムがプロセッサに割り当てられると、
    前記コンピュータの演算段階の間にデータに関する動作を実行することと、
    前記インデックス値に応じて、前記コンピュータの交換段階の間に、処理ユニットの前記データメモリと少なくとも1つの他のプロセッサとの間のデータ転送を実行するための動作を選択することと、
    同期バリアに続いて、前記交換段階の間にデータ転送を実行するために選択された動作を実行することと、
    を前記プロセッサの前記実行ユニットの1つで実行させるようスケジューリングされる、
    コンピュータ実装方法。
JP2022510938A 2019-12-23 2020-12-16 複数のプロセッサを有するコンピュータにおける通信 Active JP7357767B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1919148.5A GB2590658A (en) 2019-12-23 2019-12-23 Communication in a computer having multiple processors
GB1919148.5 2019-12-23
PCT/EP2020/086418 WO2021130075A1 (en) 2019-12-23 2020-12-16 Communication in a computer having multiple processors

Publications (2)

Publication Number Publication Date
JP2022545222A true JP2022545222A (ja) 2022-10-26
JP7357767B2 JP7357767B2 (ja) 2023-10-06

Family

ID=69322866

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022510938A Active JP7357767B2 (ja) 2019-12-23 2020-12-16 複数のプロセッサを有するコンピュータにおける通信

Country Status (7)

Country Link
US (2) US11599363B2 (ja)
EP (1) EP3973465A1 (ja)
JP (1) JP7357767B2 (ja)
KR (1) KR20220010747A (ja)
CN (1) CN113994318A (ja)
GB (1) GB2590658A (ja)
WO (1) WO2021130075A1 (ja)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06110845A (ja) * 1992-09-25 1994-04-22 Hitachi Ltd プロセッサ間データ通信方法
JP2001273273A (ja) * 2000-02-28 2001-10-05 Internatl Business Mach Corp <Ibm> マルチプロセッシング・エンジン環境用のレジスタ・パイプ
JP2019079528A (ja) * 2017-10-20 2019-05-23 グラフコアー リミテッドGraphcore Limited マルチタイル処理配列における同期化

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06266683A (ja) 1993-03-12 1994-09-22 Toshiba Corp 並列処理装置
US5682491A (en) * 1994-12-29 1997-10-28 International Business Machines Corporation Selective processing and routing of results among processors controlled by decoding instructions using mask value derived from instruction tag and processor identifier
FR2809204B1 (fr) * 2000-05-17 2003-09-19 Bull Sa Interface applicative multiprosseur, ne necessitant pas l'utilisation d'un systeme d'exploitation multiprocesseur
US6738842B1 (en) * 2001-03-29 2004-05-18 Emc Corporation System having plural processors and a uni-cast/broadcast communication arrangement
US8316190B2 (en) * 2007-04-06 2012-11-20 Waratek Pty. Ltd. Computer architecture and method of operation for multi-computer distributed processing having redundant array of independent systems with replicated memory and code striping
NL2002799C2 (en) * 2009-04-24 2010-10-26 Univ Delft Tech Data structure, method and system for address lookup.
US10698859B2 (en) * 2009-09-18 2020-06-30 The Board Of Regents Of The University Of Texas System Data multicasting with router replication and target instruction identification in a distributed multi-core processing architecture
US9122700B2 (en) * 2011-12-20 2015-09-01 Los Alamos National Security, Llc Parallel log structured file system collective buffering to achieve a compact representation of scientific and/or dimensional data
KR20160046331A (ko) * 2013-08-19 2016-04-28 상하이 신하오 (브레이브칩스) 마이크로 일렉트로닉스 코. 엘티디. 범용 유닛을 기반으로 하는 고성능 프로세스 시스템 및 방법
GB2569775B (en) * 2017-10-20 2020-02-26 Graphcore Ltd Synchronization in a multi-tile, multi-chip processing arrangement
US10963003B2 (en) * 2017-10-20 2021-03-30 Graphcore Limited Synchronization in a multi-tile processing array

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06110845A (ja) * 1992-09-25 1994-04-22 Hitachi Ltd プロセッサ間データ通信方法
JP2001273273A (ja) * 2000-02-28 2001-10-05 Internatl Business Mach Corp <Ibm> マルチプロセッシング・エンジン環境用のレジスタ・パイプ
JP2019079528A (ja) * 2017-10-20 2019-05-23 グラフコアー リミテッドGraphcore Limited マルチタイル処理配列における同期化

Also Published As

Publication number Publication date
GB2590658A (en) 2021-07-07
US20210191731A1 (en) 2021-06-24
US11907725B2 (en) 2024-02-20
KR20220010747A (ko) 2022-01-26
JP7357767B2 (ja) 2023-10-06
CN113994318A (zh) 2022-01-28
US20230185577A1 (en) 2023-06-15
WO2021130075A1 (en) 2021-07-01
US11599363B2 (en) 2023-03-07
GB201919148D0 (en) 2020-02-05
EP3973465A1 (en) 2022-03-30

Similar Documents

Publication Publication Date Title
JP6797880B2 (ja) マルチタイル、マルチチップ処理構成における同期
KR102190879B1 (ko) 프로세서 타일들 간의 동기화
KR102161683B1 (ko) 호스트 프로세서와의 동기화
US10949266B2 (en) Synchronization and exchange of data between processors
KR102167059B1 (ko) 멀티-타일 프로세싱 어레이의 동기화
KR102262483B1 (ko) 복수-타일 프로세싱 구성에서의 동기화
KR102253628B1 (ko) 복수-쓰레드 프로세서에서의 복수 쓰레드들의 상태들의 결합
KR20190044571A (ko) 칩 밖으로 데이터 송신하기
KR20190044526A (ko) 컴파일러 방법
CN111630505A (zh) 深度学习加速器系统及其方法
JP7357767B2 (ja) 複数のプロセッサを有するコンピュータにおける通信
JP2023519432A (ja) 並列処理システムにおけるモデルパラメータの更新
US11625357B2 (en) Control of data transfer between processors
JP7503198B2 (ja) ハードウェアオートローダ
US11726937B2 (en) Control of data sending from a multi-processor device
US11940940B2 (en) External exchange connectivity
JP7487334B2 (ja) 処理ノード動作の制御
KR20230035416A (ko) 네트워크를 통한 호스트와 가속기 간의 통신

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220218

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20230221

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230314

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20230608

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230726

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20230912

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230926

R150 Certificate of patent or registration of utility model

Ref document number: 7357767

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150