Vengineerの妄想(準備期間)

人生は短いけど、長いです。人生を楽しみましょう!

Xilinx Versal Premiumは、NetworkとCloud Acceleration 用?

@Vengineerの戯言 : Twitter
SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

insidehpc.com

Today Xilinx announced Versal Premium, the third series in the Versal ACAP portfolio.

とあるんだけど、

  1. AI Core Series
  2. Prime Series
  3. Premium Series

ということなのかしら?

この他にも、

  • AI RF Series
  • AI Edge Series
  • HBM Series

というのが予定されているっぽい。

Xilinx Versal って、エッジ用だと思っていたが、Versal Premiumは違う。。。

Premium Series は、ここ 。どうやら、PROGRAMMABLE NETWORK ON CHIP というのが、Premiumの特徴なのかしら?

  • AI Core Series : CIE & CCIX、DDR、MULTI-RATE ETHERNET、32G、GPIO
  • Prime Series : PCIE & CCIX、DDR、MULTI-RATE ETHERNET、32G/58G、GPIO
  • Premium Series : PCIE GEN4 W/DMA & CCIX, CXL、DDR4、32G/58G/112G、100G MULTIRATE ETHERNET CORES、600G ETHERNET CORES、600G INTERLAKEN CORES、400G CRYPTO ENGINES、MIPI、LVDS、GPIO

ということに。たしかに、Network & Cloud Accelerator 用だわ。

Versal Premium ACAPs:
Breakthrough Integration of Networked IP on a
Power-Optimized, Adaptable Platform

 

Prime の VM1502 = AI Core の VC1502 

Prime の VM1802 = AI Core の VC1802

Prime の VM2602 = Premium の VP1102 

Prime の VM2902 = Premium の VP1402

っぽくて、AI Core == Prime << Premium の規模感

 

VC1352、VC1502、VC1702、VC1802、VC1902

VM1102、VM1302、VM1402、VM1502、VM1802、VM2502、VM2602、VM2902

VP1102、VP1202、PV1402、VP1502、VP1552、VP1702、VP1802

 

おまけ

 

PyTorch を Cloud TPU & Colab で動かす

@Vengineerの戯言 : Twitter
SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

PyTorchがTPUで動くようになっています。この記事では、Colabにて、PyTorch + Cloud TPUを使うというもの。

medium.com

ドキュメント、PYTORCH ON XLA DEVICES は、こちら。

pytorch.org

ポイントは、

import torch_xla.core.xla_model as xm
t = torch.randn(2, 2, device=xm.xla_device())

のように、torch_xla.core.xla_model を import するというもの。

xla_model は、ここ で定義されている。

def xla_device(n=None, devkind=None):
  """Returns a given instance of an XLA device.
  Args:
    n (int, optional): The specific instance (ordinal) to be returned. If
      specified, the specific XLA device instance will be returned. Otherwise
      the first device of `devkind` will be returned.
      devkind (string..., optional): If specified, one of `TPU`, `GPU` or `CPU`
      (the 'GPU' XLA device is currently not implemented).

  Returns:
    A `torch.device` with the requested instance.
  """
  if n is None:
    devices = get_xla_supported_devices(
         devkind=[devkind] if devkind is not None else None)
    assert devices, 'No devices of {} kind'.format(devkind or 'ANY')
    # This is a utility API mainly called from tests or simple code which wants
    # to just have a single device to run on. Set the default device so that
    # the tensor barrier can work correctly and avoid growing graphs surprises.
    device = devices[0]
  else:
    device = 'xla:{}'.format(n)
  torch_xla._XLAC._xla_set_default_device(device)
  return torch.device(device)

 引数 n が None なら、get_xla_supported_devices が呼ばれる。

def get_xla_supported_devices(devkind=None, max_devices=None):
  """Returns a list of supported devices of a given kind.

  Args:
    devkind (string..., optional): If specified, one of `TPU`, `GPU` or `CPU`
      (the 'GPU' XLA device is currently not implemented).
    max_devices (int, optional): The maximum number of devices to be returned of
    that kind.

  Returns:
    The list of device strings.
  """
  xla_devices = torch_xla._XLAC._xla_get_devices()
  devkind = devkind or ['TPU', 'GPU', 'CPU']
  for kind in devkind:
    kind_devices =
    for i, device in enumerate(xla_devices):
      if re.match(kind + r':\d+$', device):
        kind_devices.append('xla:{}'.format(i))
      if kind_devices:
        return kind_devices[:max_devices] if max_devices else kind_devices

 torch_xla._XLAC._xla_get_devices() は、ここ

m.def("_xla_get_devices",
         () { return xla::ComputationClient::Get()->GetLocalDevices(); });

 結局、XLAの GetLocalDevices を呼んでいる。。。

 

PyTorchのモデル(Net)を作って、

# Places network on the default TPU core
net = Net().to(dev)

 のように、モデルを TPU に送っちゃうんですね。ここで、モデルをTPU用にコンパイルするんですかね。

 

Ampereの80コア Arm サーバー

@Vengineerの戯言 : Twitter
SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

昨日のAWSの「M6g」インスタンスの Graviton2 は、64コアでしたが、Ampereからのチップは、80コア。動作周波数は、3GHz。

この記事。「Altra」というのがチップ名みたい。Alteraではない。

gigazine.net

  • 80コア(Arm v8.2 3GHz) + Coherent Mesh Network
  • 72bit DDR4-3200  x 8 Channels
  • PCIe Gen4 + PCIe Gen4/CCIX (192 lanes)

Altra の Product Brief 

3GHzのコアということで、A76ですかね。この記事には、7nm で 3GHzとありますね。

ArmのMesh Interconnect だと、CMN-600ですかね。

 

追記)、2023.03.13

ここによると、Arm CMN-700 (Mesh Interconnect のようです。

 

このブログでも2016年10月に、紹介していました。

developer.arm.com

ブロック図はこんな感じ(URLを埋め込んでいます)

メモリは、DDR4-3200対応の DMC-620 。72bitに対応していますね。Chip Selects (per channel)=8 とありますので、たぶん、これですね。8x 2slots = 16 DIMMs。

https://developer.arm.com/-/media/Arm%20Developer%20Community/Images/Block%20Diagrams/CoreLink/CMN/corelink_cmn-600_scaleable_mesh_network.png?revision=2eb88a6c-dff5-4dd7-94ff-bc5ad5599d87&h=540&w=1000&hash=8C6EA0BFDFAEA409B25A35962E10ECA336B7B35B&la=en

Coherentmultichip link - CCIX support というのもありますね。

CCIXについては、この資料 の後半に載っていますね。

 

PCIe Gen4はどこかな?

8 x8 PCIe + 4 x16 PCIe/CCIX 

このビデオは、Cadenceだけどね。

2チップ構成の時は、CCIX(x16) を使うのかな? (128 - 1x16x2) x 2 = 192 lanes

 

追記)、2023.03.13

ここに、CCIX による 2 Socket 間の接続図がありました。説明のために引用します。

 

 

 

Amazon Graviton 2のAWSインスタンス「M6g」

@Vengineerの戯言 : Twitter
SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

Amazon(子会社のAnnapurna Labs)が開発した Graviton 2。

その Graviton 2 を採用したAWSインスタンス「M6g」のスペックが公開されたそうな。

(下のタイトル、Gravition 2 になっているけど、Graviton 2 が正しい)

gigazine.net

Gravition 2の仕様は、ここにある。7nm、Cortex-A64コア、2.5GHz。

8チャネルのDDR4-3200。

gigazine.net

Graviton は16 nmで、AL73400が型番。Cortex-A72の16コア。動作周波数は2.3GHz

monoist.atmarkit.co.jp

Amazonの他のインスタンス、「M5a」、「M5n」ではコア数が32、24。また、「M6g」は、NUMA Nodes は  1 ですが、「M5a」は 4 、「M5n」は 2 。

コア数が多くなると、NUMA Nodes が増えちゃって、NUMA Node をまたぐようにDRAMをアクセスしちゃうと性能落ちちゃうんだけど、「M6g」は NUMA Nodes が 1なのでそんなことがないのがポイント。

 

おまけに、お値段が、「M6g」は2.464 ドルと、「M5a」の 2.752ドル、「M5n」の 3.808 ドルよりお安いということ。

と言えども、1日10時間使うとざっくり3000円。週末だけ使ってもx8で24000円。1年使うと、30万円ぐらいしちゃうので、PC買った方がいい、になっちゃうのかな。。。

 

64コア、8チャンネルDDR、1 NUMA Node の Armサーバーが出てきたことにより、

IntelAMD、Armサーバーの戦いが本格的になりそう。。。な、気がしますよ。

 

 

Achronix Bittware FPGA Accelerator

@Vengineerの戯言 : Twitter
SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

2大FPGAベンダーであるXilinxIntel(旧Altera)以外からのFPGA Accelerator Board

insidehpc.com

ボードベンダーは、Bittware (Molexに買収されています)

ちなみに、Molex はあたしの認識では、コネクタベンダーかな。

Webinarもあるよ。 => ここ

Learn How FPGA-based PCIe Cards Can Accelerate Your Applications

 

ボードの特徴

  • QSFPs for 1x 400G or 6x 100G
  • 8GB GDDR6 up to 512GB/s
  • 7nm FPGA with 56Gbps SERDES

お、7nm FPGA か。。。

GDDR6は、16bit品を2個ペアにしたものが4個で64ビット構成を2組。

DDR4は、72ビット(ECC付)が最大4GB。

その他には、

BMCがあるので、Micro USB経由でアクセスできる。また、Debug用のJTAGやUARTも

OCuLink (x4)というのも付いているがこれは何のため?

news.mynavi.jp

によると、PCIの仕様の一部なんだね。つまり、PCIe x4 か。

  • OCuLink on rear edge, connected to FPGA via 4x transceivers
  • PCIe Gen4 Hard IP

と書いてあった。

Product の Datasheet にもいろいろ情報が載っている。

ボードの仕様としては、PCIe Gen3 x16だけど、チップの仕様としては、PCIe Gen5 になっている。112GbpsのSERDESも入っている。

チップの仕様は、こちら

  • PCIe Gen5
  • DDR5

とあるね。

New flexible machine learning processor (MLP)

optimized for AI/ML functionality:

– Delivers up to 41K Int8 MACs and 134 Int8 TOPS

– Supports multiple floating point and integer numerical
formats

 ということで専用の MLP なるものが入っているというか、MLPNoCで繋がっているのか。専用FPGAか。知らんかったわ。いや、6-input LUT もあるので、XilinxのVasalのAI Engineみたいなものか?

MLPのちょっと詳しいページ

www.achronix.com

ALUって感じですかね。

 

Achronix ということで、こんなのもあります。

www.nextplatform.com

Cerebras CS-1のScaledML2020のプレゼン資料

@Vengineerの戯言 : Twitter
SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

記録のために。

ScaledML2020での、Cerebras Systemsのプレゼン資料 からのメモ

GPUでの学習では、

  • Traditional: Layer-Sequntial (Single GPU : Modest Data Parallel)

   Run one layer at once.

   Medium batch size

  • Traditional: Layer-Sequntial (GPU Cluster : Extreme Data Parallel)

   Run layer replicas on parallel devices.

   Extremely large batch size

   Weight sync overhead

 

 WSEでの学習では、

  • WSE: Layer-Sequntial (Replicas: Modest Data Parallel)

   Run layer replicas on fabric sections

   Medium batch size

   Low weiht sync overhead

  • WSE: Layer-Sequntial (Non Replicas: Low Data Parallel)

   Replicas not constrained to device

   Run one layer at once on entire wafer

   Small batch size

   No weight sync overhead

  • WSE: Layer-Pipelined (Model Parallel, Modest Data Parallel)

   Run all layers on fabric sections

   Medium batch size

   No weight sync overhead

  •  WSE: Layer-Pipelined (Model Parallel, Low Data Parallel)

   Pipelined Bakpropagation

   Weight update without draining pipeline

   Arbitrarily small batch size

   No weight sync overhead

   Staleness compensation in deep networks

 

 

AWS EC2 inf1 について、もうちょっと詳しく

@Vengineerの戯言 : Twitter
SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

Neuron Runtime の Getting started: Installing and Configuring Neuron-RTD を眺めていたら、input feature map buffers と output feature map buffers 用のメモリ領域として、2MB hugepages を使っていると。それも、1つの Inferentia に付き、128個 つまり、256MBも。

hugepages を使うために、Kernelの再構築は必要はないんですね。

sudo sysctl -w vm.nr_hugepages=128

Huge Pageについては、こちらに説明があります。通常のHuge Pageのサイズは、2MBのようです。また、Huge Pageはスワップアウトされないと。

Linuxでは、1 pageが4KB。おまけに、PCIe のパケットは 大体256B。Mrdの時は最大4KB(Host Memory => Accelerator)を要求できるけどね。4KBだと、1 page と同じ。

なので、4KB/page ではなく、hugepagesを使って、2MB=512*4KBとなり、512倍になるんだよね。。。うふふ。

 

それから、neuron-ls というコマンドを使うと、デバイス情報が出てきます。

こんな感じ(引用です)

/opt/aws/neuron/bin/neuron-ls
+--------------+---------+--------+-----------+-----------+------+------+
| PCI BDF | LOGICAL | NEURON | MEMORY | MEMORY | EAST | WEST |
| | ID | CORES | CHANNEL 0 | CHANNEL 1 | | |
+--------------+---------+--------+-----------+-----------+------+------+
| 0000:00:1f.0 | 0 | 4 | 4096 MB | 4096 MB | 0 | 1 |
+--------------+---------+--------+-----------+-----------+------+------+
| 0000:00:1e.0 | 1 | 4 | 4096 MB | 4096 MB | 1 | 1 |
+--------------+---------+--------+-----------+-----------+------+------+
| 0000:00:1d.0 | 2 | 4 | 4096 MB | 4096 MB | 1 | 1 |
+--------------+---------+--------+-----------+-----------+------+------+
| 0000:00:1c.0 | 3 | 4 | 4096 MB | 4096 MB | 1 | 0 |
+--------------+---------+--------+-----------+-----------+------+------+

4つのPCIバイス (1c.0 ~ 1f.0) が繋がっているように見えますね。各デバイスには4コアと2つのメモリチャネルで、各メモリチャネルには4GB接続していますね。

それから EAST/WEST なるものがあってこれはチップ間の接続を示しているもので、最初のチップと最後のチップはどちらかしか接続していませんね。

どうやら、こんな感じに接続していると思います。

 講演のプレゼン資料の14頁には、ボードの写真が載っていて、チップは4個載っているっぽいのですが、メモリは別途載っていそうもないんですよ。ということはチップにメモリが付いている。となると、HBM2なんだろうね。4GB + 4GB とあるので。

もしかしたら、1パッケージの中には、チップ+HBM2(4GB) が2組あるかもしれないので妄想をもう一つ。こちらだと、PCIe をSwitch経由でこんなにいっぱいになっちゃうのがちょっと気になりますが。。。。

f:id:Vengineer:20200307115814j:plain