DatabricksのAWS Graviton有効化クラスター

[AWS Graviton\-enabled clusters \| Databricks on AWS](https://docs.databricks.com/clusters/graviton.html) [2022/4/12時点]の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

:::note info
**プレビュー**
本機能は[パブリックプレビュー](https://docs.databricks.com/release-notes/release-types.html)です。
:::

Databricksクラスターでは[AWS Graviton](https://aws.amazon.com/ec2/graviton/)インスタンスをサポートしています。これらのインスタンスでは、Arm64命令セットで構築されたAWS設計のGravitonプロセッサーを使用しています。AWSはこれらのプロセッサーを持つインスタンスタイプは、いかなるAmazon EC2のインスタンスタイプと比較しても、ベストなコストパフォーマンスを提供すると説明しています。

# 利用条件

DatabricksではAWS Graviton有効化クラスターをサポートしています。

- Photonなしの[Databricks Runtime 9\.1 LTS](https://docs.databricks.com/release-notes/runtime/9.1.html)以降のランタイム、Photonありの[Databricks Runtime 10\.2](https://docs.databricks.com/release-notes/runtime/10.2.html)以降のランタイム
- すべてのAWSリージョン。しかし、すべてのリージョンで全てのインスタンスタイプが利用できる訳ではないことに注意してください。ワークスペースのリージョンで利用できないインスタンスタイプを選択した際、クラスターの作成に失敗します。
- 以下のAWS Gravitonインスタンスファミリー

    Photonなし

    - 汎用: [m6g, m6gd](https://aws.amazon.com/ec2/instance-types/m6g/)
    - コンピュート最適化: [c6g, c6gd](https://aws.amazon.com/ec2/instance-types/c6g/)
    - メモリー最適化: [r6g, r6gd](https://aws.amazon.com/ec2/instance-types/r6g/)

    Photonあり

    - 汎用: [m6gd](https://aws.amazon.com/ec2/instance-types/m6g/)
    - メモリー最適化: [r6gd](https://aws.amazon.com/ec2/instance-types/r6g/)

- AWS Graviton2プロセッサーのみ

# AWS Graviton有効化クラスターの作成

AWS Graviton有効化クラスターを作成するには、[Databricksにおけるクラスター作成](https://qiita.com/taka_yayoi/items/d36a469a1e0c0cebaf1b)の手順に従ってください。

以下のように、クラスターの作成手段によってAWS Gravitonの指定方法は変わります。

## 作成ボタン、クラスターUI

AWS Graviton有効化クラスターを作成するには、[Createボタンを使う](https://qiita.com/taka_yayoi/items/d36a469a1e0c0cebaf1b#create%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%92%E4%BD%BF%E3%81%86)か[クラスターUIを使う](https://qiita.com/taka_yayoi/items/d36a469a1e0c0cebaf1b#%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF%E3%83%BCui%E3%82%92%E4%BD%BF%E3%81%86)の手順に従ってください。**Databricks runtime version**に対しては、[利用条件](#利用条件)セクションでリストされている利用可能なaarch64ランタイムを選択してください。**Worker type**、**Driver type**、その両方に対しては、[利用条件](#利用条件)セクションでリストされているAWS Gravitonインスタンスタイプを選択してください。

## Databricks REST API

1. セットアップしていない場合には、[Databricks REST API](https://docs.databricks.com/dev-tools/api/index.html)の[authentication](https://docs.databricks.com/dev-tools/api/index.html#authentication)をセットアップします。
1. [curl](https://curl.se/)や[Postman](https://www.postman.com/)のようなDatabricks REST APIを呼び出すためのツールを使用します。
1. [Clusters API](https://docs.databricks.com/dev-tools/api/latest/clusters.html)の`POST clusters/create`オペレーションを呼び出します。例えば、以下のような呼び出しを`curl`を用いて行います。

    ```bash:Bash
    curl --netrc -X POST \
    https://dbc-a1b2345c-d6e7.cloud.databricks.com/api/2.0/clusters/create \
    --data @create-cluster.json
    ```

    `create-cluster.json`

    ```json:JSON
    {
      "cluster_name": "my-cluster",
      "spark_version": "10.2.x-aarch64-scala2.12",
      "node_type_id": "m6gd.large",
      "num_workers": 2
    }
    ```

    Photonあり

    ```json:JSON
    {
      "cluster_name": "my-cluster",
      "spark_version": "10.2.x-aarch64-photon-scala2.12",
      "node_type_id": "m6gd.large",
      "num_workers": 2
    }
    ```

## Databricks CLI

1. 設定していない場合は、[CLIをセットアップ](https://docs.databricks.com/dev-tools/cli/index.html#set-up-the-cli)し、[認証を設定](https://docs.databricks.com/dev-tools/cli/index.html#set-up-authentication)します。
1. [Clusters CLI](https://docs.databricks.com/dev-tools/cli/clusters-cli.html)で`clusters create`コマンドを実行します。例えば、以下のようなコマンドを実行します。

    ```bash:Bash
    databricks clusters create --json-file create-cluster.json
    ```

    `create-cluster.json`

    ```json:JSON
    {
      "cluster_name": "my-cluster",
      "spark_version": "10.2.x-aarch64-scala2.12",
      "node_type_id": "m6gd.large",
      "num_workers": 2
    }
    ```

    Photonあり

    ```json:JSON
    {
      "cluster_name": "my-cluster",
      "spark_version": "10.2.x-aarch64-photon-scala2.12",
      "node_type_id": "m6gd.large",
      "num_workers": 2
    }
    ```

## Databricks Terraformプロバイダー

1. インストールしていない場合には、[Terraformのオペレーションに必要なコマンドラインツールをインストールし、設定します](https://docs.databricks.com/dev-tools/terraform/index.html#getting-started)。
1. [Databricksクラスターリソース](https://registry.terraform.io/providers/databrickslabs/databricks/latest/docs/resources/cluster)を作成するTerraform設定を作成して実行します。例えば、以下のような最小限の設定を実行することができます。

```
terraform {
  required_providers {
    databricks = {
      source = "databrickslabs/databricks"
    }
  }
}

provider "databricks" {
}

resource "databricks_cluster" "this" {
  cluster_name  = "my-cluster"
  spark_version = "10.2.x-aarch64-scala2.12"
  node_type_id  = "m6gd.large"
  num_workers   = 2
}
```

Photonあり

```
resource "databricks_cluster" "this" {
  cluster_name  = "my-cluster"
  spark_version = "10.2.x-aarch64-photon-scala2.12"
  node_type_id  = "m6gd.large"
  num_workers   = 2
}
```

# 制限

## ARM64 ISA

- 浮動小数点制度の変更: 加算、減算、乗算、除算のようなて近景的なオペレーションでは制度の変更はありません。`sin`、`cos`のような単一の三角関数では、Intelインスタンスに対する精度の差は`1.11e-16`となります。
- サードパーティのサポート: ISAの変更はサードパーティのツールやライブラリのサポートに幾らかのインパクトを与える場合があります。
- 混成インスタンスのクラスター: Databricksでは、異なるDatabricksランタイムが必要とするタイプで、AWS Gravitonと非AWS Gravitonのインスタンスタイプのミックスはサポートしていません。

## 機能

AWS Gravitonは以下の機能をサポートしていません。

- Databricks機械学習ランタイム
- Databricksランタイム10以降のARM64上のJDK 11
- AWS Glueメタストア
- Databricksコンテナサービス

# 参考情報

- AWSウェブサイトの[AWS Graviton Processor](https://aws.amazon.com/ec2/graviton/)
- GitHubの[AWS Graviton Getting Started](https://github.com/aws/aws-graviton-getting-started)
- AWSウェブサイトの[AWS News Blog: Graviton](https://aws.amazon.com/blogs/aws/category/compute/graviton/)

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)