PBL1-v1-005j.pptx

NAIST
27 de Dec de 2022
PBL1-v1-005j.pptx
PBL1-v1-005j.pptx
PBL1-v1-005j.pptx
PBL1-v1-005j.pptx
PBL1-v1-005j.pptx
PBL1-v1-005j.pptx
PBL1-v1-005j.pptx
PBL1-v1-005j.pptx
PBL1-v1-005j.pptx
PBL1-v1-005j.pptx
PBL1-v1-005j.pptx
PBL1-v1-005j.pptx
PBL1-v1-005j.pptx
PBL1-v1-005j.pptx
PBL1-v1-005j.pptx
PBL1-v1-005j.pptx
PBL1-v1-005j.pptx
PBL1-v1-005j.pptx
PBL1-v1-005j.pptx
PBL1-v1-005j.pptx
PBL1-v1-005j.pptx
1 de 21

Mais conteúdo relacionado

Similar a PBL1-v1-005j.pptx

搜狐Pv insight(py)技术交流搜狐Pv insight(py)技术交流
搜狐Pv insight(py)技术交流bj
Ch5 範例Ch5 範例
Ch5 範例hungchiayang1
Avm2虚拟机浅析与as3性能优化(陈士凯)Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)FLASH开发者交流会
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)Shanda innovation institute
2012.xciting400 fi使用手冊(12.10.29)2012.xciting400 fi使用手冊(12.10.29)
2012.xciting400 fi使用手冊(12.10.29)Lamb Chan
系統程式 -- 第 2 章系統程式 -- 第 2 章
系統程式 -- 第 2 章鍾誠 陳鍾誠

Mais de NAIST

PBL1-v1-200j.pptxPBL1-v1-200j.pptx
PBL1-v1-200j.pptxNAIST
PBL1-v1-200e.pptxPBL1-v1-200e.pptx
PBL1-v1-200e.pptxNAIST
PBL1-v1-100j.pptxPBL1-v1-100j.pptx
PBL1-v1-100j.pptxNAIST
PBL1-v1-100e.pptxPBL1-v1-100e.pptx
PBL1-v1-100e.pptxNAIST
PBL1-v1-013j.pptxPBL1-v1-013j.pptx
PBL1-v1-013j.pptxNAIST
PBL1-v1-013e.pptxPBL1-v1-013e.pptx
PBL1-v1-013e.pptxNAIST

Último

OSU毕业证成绩单OSU毕业证成绩单
OSU毕业证成绩单uytrfhf
PITT毕业证成绩单PITT毕业证成绩单
PITT毕业证成绩单trefdgfd
UF成绩单UF成绩单
UF成绩单hgkgfhf
Cornell毕业证学位证Cornell毕业证学位证
Cornell毕业证学位证trefdgfd
UTD毕业证学位证UTD毕业证学位证
UTD毕业证学位证uytrfhf
NAU学位证-文凭NAU学位证-文凭
NAU学位证-文凭hnghfd

PBL1-v1-005j.pptx

Notas do Editor

  1. 様々なアプリケーションを取りあげて、アイマックスのポテンシャルを説明するシリーズです。第5回は、機械学習です。
  2. 世の中では、機械学習アクセラレータがおおはやりですが、アイマックスは、機械学習の専用ハードウェア、ではないところが売りです。しかも、厳密計算だけでなく、ストカスティック積和演算も使えます。べつに、機械学習向けに作ったわけじゃないけど、機械学習も速くて当然だよねー、という、軽いノリで終わらせることにします。
  3. では、インファレンスで最も計算量の多い、畳み込み演算から始めます。入力チャネルがたくさんあって、5かける5とか、3かける3などの、カーネルと呼ぶ重みとの積和演算をします。入力チャネルを串刺しにして、全部足すと、出力チャネルの1つのデータが求まるという、誰でも知ってる、あれです。積和演算まで、よく見えるように、ブラックボックスに頼らず、C言語で書いたプログラムがこれです。とても深い多重ループ構造になっています。そして、赤字の部分が、最も実行される積和演算部分です。ステンシル計算に似ています。敢えて言うなら、多次元ステンシル計算ですが、普通は、テンソル計算と呼びます。1つの結果を求めるのに必要なデータの並びは、とても複雑です。
  4. コンピュータは,規則的に並んだデータを扱うのが得意です。ただ,AIのプログラムには,特にノイマン型コンピュータにとって不都合な性質があります。300人の生徒が,修学旅行で飛行機に乗るとします。空港の出発ゲートに一列に並んで,そのまま機内に入ったとします。前半の生徒の座席番号が通路側で,後半の生徒の座席番号が窓側だったら何が起こるでしょう。先に入った生徒が通路側に座ると,あとから来た生徒が窓側にはいれないので,大混乱しますね。ノイマン型コンピュータには,キャッシュメモリと呼ぶ,一時的にメモリの内容を保存して,CPUの中で高速にデータを供給する仕組みがありますが,狭いので,必要なデータが互いに追い出し合うことがあります。特に,AIのプログラムは,データが規則的に並んではいますが,必要なデータの場所がとびとびなので,追い出しあいが簡単に起こって、処理速度がものすごく下がってしまいます。そこで,とびとびのデータを一旦,きれいに並べ替える作業が必要になります。余計な作業が増えますが,全体として見ると,実行時間が短くなります。ただし,1つのデータを複数の場所にコピーすることになるので,メモリの使用効率は下がります。メモリをたくさん使って,代わりに,実行時間を短くすることになります。
  5. 一方、この図は,アイマックスの畳み込みです。左下が画像データ,左うえが重みデータで,ホストCPUのメモリにあります。CPUは,複数箇所へのコピーはせず,アドレス情報とデータを1度だけ,右のアイマックスに送信します。アイマックスの各ユニットは,アドレス情報を見て,自分に必要なデータであれば取り込みます。複数のユニットが同じデータを取り込めば,アイマックスの内部で複数箇所にコピーされたことになりますが,CPUから見れば手間は増えません。乗客が何人いようと,機内アナウンスで1回放送、ブロードキャストすれば,全員に伝わるのと同じです。コンピュータ用語でも,ブロードキャストと呼びます。その後,CGRAとしての連続演算が始まり,計算結果をCPU側に戻します。
  6. 配列要素と、CGRAの対応関係は、このようになります。いくら説明しても、なんでそうなるのか、わからない人にはわからないです。まず、自分ならどうするかを考えてから、この図を見ると、たぶん、これが最適だとわかります。
  7. 次は、インファレンスの後半、全結合層と呼ぶ層で使われる、行列積です。配列要素と、CGRAの対応関係は、このようになります。行列積の高速化には、一般的に、計算前の転置が必要です。また、深層学習の場合、行列積の先頭アドレスは、ワード単位で変化し、例えばツーウェイSIMD命令が効率よく動くために必要な、ダブルワード境界である保証がありません。
  8. これに対し、アイマックスでは、2つの特長を生かした高速化が可能です。1つは、CGRAでは本質的に転置が要らないこと。もう1つは、デュアルポートローカルメモリの機能を使って、ダブルワードが、ダブルワード境界にあってもなくても、同じ速度でロードできることです。
  9. これは、CPUで動くプログラムに、アイマックスのコードを埋め込んだものです。上のほうは,CPUが実行します。そして、イーマックス5エイビギンと、イーマックス5エイエンドで挟まれた、青字部分と赤字部分をアイマックスが実行します。このコードは、普通のCPUでもコンパイルして動かせる仕掛けになっています。そうすれば、プログラムが思ったように動かない時に、アルゴリズムが悪いのか、アイマックスの使い方が悪いのかを区別することができます。アルゴリズムが正しいことをCPUで確認し、その後、アイマックスコンパイラを使って動かします。
  10. 赤字部分には、マクロと呼ばれる記述が2種類入っています。上のエスジェム00コア1は,アイマックスの中を縦方向に,下へ向かって積和演算を繋いでいく、ユニット毎の部品です。下のエスジェム00ファイナルは、最後のユニットにセットされて、上から落ちてきた積和演算結果をメモリの内容に足し込みます。2つの赤枠部分が、それぞれ、CGRAの1行4列分の機能がある、アイマックスの1個の物理ユニットにセットされます。
  11. コンパイル結果です。論理ユニットが横に4列並んでいます。これが,プログラムを書く際のアイマックスのモデルです。1つが論理ユニットに対応していて、ユニットのじょうたんとかたんには、レジスタが4本ずつしかありません。プログラマは、物理ユニットにレジスタが32本あることは気にせず、レジスタが4つある論理ユニットの世界で、プログラムを書きます。
  12. 黒い部分は,ハードウェアの機能を使っていないこと,紫は,3入力演算器が使われていることを示しています。左は畳み込み、右は行列積です。1行目と2行目に黒が多いのは,積和演算に必要なカウンタやアドレス計算を初期化しているためです。はじめのうちは,この図を見ながら,どう書いたら,どうなるのかをいろいろ試してみるのがよいでしょう。
  13. インファレンスの次は、トレーニングです。インファレンスに使う重みを求める、バックプロパゲーションと呼ぶ計算です。ここでも、データがとびとびなので、コピーと並べ替えが必要です。コピーによるデータの増え方は,インファレンスよりもトレーニングのほうが激しいです。また,トレーニングのほうが、計算時間も消費電力も圧倒的に大きいので、別のトレーニングで作った重みを流用するなどなるべく学習しない工夫をしたりします。
  14. このプログラムは、重みを求めるバックプロパゲーションを、アイマックス用にアレンジしたものです。これを元に,アイマックス用に書き換えていきます。書き換え後のプログラムは、仕様書に入っているし、ダウンロードもできます。
  15. 図の下は、GPUを使う時に、同じデータをコピーしてデータを整列する手順です。しかし、アイマックスでは、この作業を経由せず、元の複雑な形のデータのまま、直接、重みを計算することができます。
  16. 同様に、入力を求めるバックプロパゲーションをアイマックス用にアレンジしたものです。
  17. さっきと同様に、図の下は、同じデータをコピーしてデータを整列する手順です。アイマックスでは、この作業を経由せず、元の複雑な形のデータのまま、直接、入力を計算することができます。ここまでが、浮動小数点演算器を使った、厳密計算です。
  18. 次は、非厳密計算の一種である、ストカスティック積和演算です。この計算方法は、計算精度を落としても大丈夫な応用の、インファレンスに利用できます。まず、2進数の乱数列を2系統用意します。乱数列は互いに独立している必要があります。上の乱数列を少しずらして下の乱数列にするといった、手抜きをしてはいけません。乱数列に相関関係があると、偏った計算結果しか得られません。そして、図の左側から、論理ゲートに入力します。ここで使うのは、入力がすべて1の場合に1を出力するアンドゲートです。上の乱数列が0000111101、下が0111110000です。配線は1本しかないので、右の桁から順にアンドゲートに入力します。赤字の部分が、両方とも1の場合です。ゲートの右側には0000110000が出力されます。これが乗算結果です。仕掛けは簡単。上の乱数列では、1の確率が0.5、下も同じです。確率の授業を思い出して下さい。両方が1になる確率は、0.5掛ける0.5と計算しますね。両方が1になる時に1を出力することと同じ意味です。ただし、正確な乗算結果は0.25ですが、アンドゲートの出力では1が2つなので、乗算結果は0.20になりました。すこしずれています。でも、入力が独立した乱数列なので、何度も繰り返せば、0.25に近付くことがわかりますね。確率的とはいえ、これだけで乗算ができるなんて、便利です。 では、加算はどうでしょう。乗算の場合、0から1までのあたいを入力すると、結果も0から1の範囲に入ります。でも、たとえば、0.7+0.7の結果は1を超えてしまいます。乗算と同じようにできるでしょうか。そこで、ひとひねりです。平均値を思い出して下さい。加算結果を入力数で割ったのが算術平均ですよね。算術平均であれば、結果が1を超えることはありません。これを利用すれば、確率的加算器を作ることができます。右の図では、上の乱数列が赤字になっています。そして、出力には、上と下の乱数列から交互に取り出したビット列が並んでいます。上下のどちらを選ぶかを乱数で決めてもよいです。これが確率的平均値の求め方です。出力には1が5個あるので0.5ですね。入力数が2なので、結果を2倍します。運よく1になりました。これが加算結果です。でも、入力数が10だと、何が起こるでしょう。出力の1の数は、0から10までの10通りしかありません。平均値が10通りしかなく、最後に10倍するので、結果は、0、10、20から、100のどれかにしかなりません。もう少し正確さが欲しい場合は、ポピュレーションカウンタを使って、1の数を正確に数えます。最後に、従来型のデジタル回路で加算をします。これなら、0から100まで100通りの結果になります。
  19. 前の例は、ハードウェアは小さいですが、1本の配線を使ってデータを順に入れるので、計算にとても時間がかかります。確率的計算の考え方はそのまま使って、もっと高速にできないでしょうか。図は、配線数を増やして高速化する方法です。左の図を見ましょう。うえにあるレジスタファイルが、普通のコンピュータで使う2進数で表現した、8個の被乗数B0からB7と、8個の乗数C0からC7が置いてある場所です。ここでは、DイコールA+Σbi掛けるCiという積和演算を確率的に行うことを考えます。まず、B7とC7をそれぞれ、別系統の乱数列、ランダムナンバージェネレータを使ってエンコードします。元の2進数をさっき説明した確率的表現、ストカスティックナンバーに変換する作業のことです。具体的な変換方法は、みなさんへの宿題としましょう。いろんな方法が見つかるはずです。変換できたら、B7とC7に対する確率的表現をアンドゲートに入力します。さっきの例では10ビットの確率的表現と、1個のアンドゲートを使いました。今度は、10ビットの確率的表現を縦に並べて、10個のアンドゲートに一斉に入力します。配線数は増えますが、一度に乗算できますね。そして、ポピュレーションカウンタを使って1の数を数え、2つずつ加算します。これを4回繰り返すと、32要素の確率的積和演算ができます。アイマックスには、浮動小数点積和演算器に加えて、この演算器も搭載されていて、256ビットロードと組み合わせることで、1命令で、32要素の積和演算が可能です。
  20. ストカスティック積和演算には、オペコードにSFMAと指定します。これがコンパイル結果です。前に説明した、普通の積和演算は、縦方向に空間展開されていました。しかし、ストカスティック積和演算の場合、せっかく、256ビットに連続している32要素を縦に分解しなければならなくなり、本末転倒です。各ユニットは、計算結果を下に送るのではなく、ユニット内部で、ロード、演算、ストアを完結させます。左から2番目が、256ビットのデータA、3番目が、256ビットのデータB、右端が、8ビットのデータCに対応し、Cに、AかけるBの積和演算結果を連続的に累算していきます。
  21. 今回は、機械学習を題材に、畳み込み演算、行列積、ついでに、ユニークな、ストカスティック積和演算機能を説明しました。では、今回はここまでです。おつかれさま。