コスト効率に優れた高性能 AI 推論用の Amazon EC2 DL2q インスタンスが一般提供されました | アマゾン ウェブ サービス

コスト効率に優れた高性能 AI 推論用の Amazon EC2 DL2q インスタンスが一般提供されました | アマゾン ウェブ サービス

ソースノード: 2974534

これは、Qualcomm AI の AK Roy によるゲスト投稿です。

Amazon Elastic Compute Cloud(Amazon EC2) Qualcomm AI 2 Standard アクセラレータを搭載した DL100q インスタンスを使用すると、コスト効率よくクラウドにディープ ラーニング (DL) ワークロードをデプロイできます。 また、Qualcomm デバイスにデプロイされる DL ワークロードのパフォーマンスと精度を開発および検証するために使用することもできます。 DL2q インスタンスは、クアルコムの人工知能 (AI) テクノロジーをクラウドに導入した最初のインスタンスです。

100 つの Qualcomm AI 128 Standard アクセラレータと合計 2 GiB のアクセラレータ メモリにより、お客様は DL100q インスタンスを使用して、コンテンツ生成、テキスト要約、仮想アシスタントなどの一般的な生成 AI アプリケーションや、自然言語処理用のクラシック AI アプリケーションを実行することもできます。そしてコンピュータービジョン。 さらに、Qualcomm AI 2 アクセラレータは、スマートフォン、自動運転、パーソナル コンピュータ、拡張現実ヘッドセットで使用されているものと同じ AI テクノロジーを備えているため、DLXNUMXq インスタンスを使用して、展開前にこれらの AI ワークロードを開発および検証できます。

新しい DL2q インスタンスのハイライト

各 DL2q インスタンスには 100 つの Qualcomm Cloud AI2.8 アクセラレータが組み込まれており、Int8 推論パフォーマンスで 1.4 PetaOps、FP16 推論パフォーマンスで 112 PetaFlops を超える合計パフォーマンスを実現します。 このインスタンスには、合計 128 個の AI コア、アクセラレータ メモリ容量 1.1 GB、メモリ帯域幅 XNUMX TB/秒があります。

各 DL2q インスタンスには 96 個の vCPU、768 GB のシステム メモリ容量があり、100 Gbps のネットワーク帯域幅をサポートします。 Amazon Elastic Block Store (Amazon EBS) 19Gbpsのストレージ。

インスタンス名 vCPU クラウド AI100 アクセラレータ アクセラレータメモリ アクセラレータ メモリ BW (集約) インスタンスメモリ インスタンスネットワーキング ストレージ (Amazon EBS) の帯域幅
DL2q.24xlarge 96 8 128 GB 1.088 TB /秒 768 GB 100 Gbps 19 Gbps

Qualcomm Cloud AI100 アクセラレータのイノベーション

Cloud AI100 アクセラレータ システムオンチップ (SoC) は、専用に構築されたスケーラブルなマルチコア アーキテクチャであり、データセンターからエッジに至る幅広いディープラーニングのユースケースをサポートします。 この SoC は、業界をリードする 126 MB のオンダイ SRAM 容量を備えたスカラー、ベクトル、およびテンソルのコンピューティング コアを採用しています。 コアは、高帯域幅、低遅延のネットワークオンチップ (NoC) メッシュで相互接続されています。

AI100 アクセラレータは、広範囲かつ包括的なモデルとユースケースをサポートします。 以下の表は、サポートされるモデルの範囲を示しています。

モデルカテゴリ モデルの数
NLP 157 BERT、BART、FasterTransformer、T5、Z コード MOE
生成 AI – NLP 40 LLaMA、CodeGen、GPT、OPT、BLOOM、Jais、Luminous、StarCoder、XGen
生成 AI – 画像 3 安定した拡散 v1.5 および v2.1、OpenAI CLIP
CV – 画像分類 45 ViT、ResNet、ResNext、MobileNet、EfficientNet
CV – 物体検出 23 YOLO v2、v3、v4、v5、および v7、SSD-ResNet、RetinaNet
履歴書 – その他 15 LPRNet、超解像度/SRGAN、ByteTrack
車載ネットワーク* 53 知覚と LIDAR、歩行者、車線、信号機の検出
合計 > 300 ​,war ​,war

※自動車ネットワークの多くは、個々のネットワークが融合して構成される複合ネットワークです。

DL2q アクセラレータ上の大容量オンダイ SRAM により、重みを保存するための MX6 マイクロ指数精度やアクセラレータ間の通信のための MX9 マイクロ指数精度などの高度なパフォーマンス技術を効率的に実装できます。 マイクロ指数テクノロジーについては、次の Open Compute Project (OCP) 業界発表で説明されています。 AMD、Arm、Intel、Meta、Microsoft、NVIDIA、Qualcomm が AI 用の次世代狭精度データ形式を標準化 » オープン コンピューティング プロジェクト.

インスタンス ユーザーは、次の戦略を使用して、コストあたりのパフォーマンスを最大化できます。

  • MX6 マイクロ指数精度を使用して重みをアクセラレータ上の DDR メモリに保存します。 MX6 精度を使用すると、利用可能なメモリ容量とメモリ帯域幅が最大限に活用され、クラス最高のスループットとレイテンシが実現します。
  • FP16 で計算して、必要なユースケースの精度を実現しながら、カード上の優れたオンチップ SRAM と予備の TOP を使用して、高性能、低遅延の MX6 から FP16 カーネルを実装します。
  • オンチップのアクティベーションを可能な限り最大限に維持しながら、重みの再利用を最大化するために利用可能な大規模なオンチップ SRAM を使用して、最適化されたバッチ戦略とより大きなバッチ サイズを使用します。

DL2q AI スタックとツールチェーン

DL2q インスタンスには、クラウド上の Qualcomm AI および他の Qualcomm 製品にわたって一貫した開発者エクスペリエンスを提供する Qualcomm AI スタックが付属しています。 同じ Qualcomm AI スタックとベース AI テクノロジーが DL2q インスタンスと Qualcomm エッジ デバイス上で実行され、クラウド、自動車、パーソナル コンピューター、拡張現実、スマートフォンの開発環境全体で統一された API を使用して、一貫した開発者エクスペリエンスを顧客に提供します。

ツールチェーンを使用すると、インスタンス ユーザーは、次の図に示す XNUMX つのステップで、以前にトレーニングされたモデルを迅速にオンボードし、インスタンスの機能に合わせてモデルをコンパイルおよび最適化し、その後、コンパイルされたモデルを本番推論のユースケースにデプロイできます。

モデルのパフォーマンスの調整の詳細については、「 Cloud AI 100 の主要なパフォーマンス パラメータ ドキュメンテーション。

DL2q インスタンスを使ってみる

この例では、事前トレーニングされた BERTモデル から ハグ顔 事前に構築された利用可能な DL2q AMI を使用して、EC2 DL2q インスタンスを XNUMX つのステップで実行します。

事前に構築されたいずれかを使用できます クアルコム DLAMI インスタンス上で実行するか、Amazon Linux2 AMI から開始して、このサービスで利用可能な Cloud AI 2 プラットフォームとアプリ SDK を使用して独自の DL100q AMI を構築します。 Amazon Simple Storage Service(Amazon S3) バケツ: s3://ec2-linux-qualcomm-ai100-sdks/latest/.

次の手順では、事前に構築された DL2q AMI を使用します。 クアルコムベース AL2 DLAMI.

SSH を使用して、Qualcomm Base AL2 DLAMI AMI で DL2q インスタンスにアクセスし、手順 1 ~ 4 に従います。

ステップ 1. 環境をセットアップし、必要なパッケージをインストールする

  1. Python3.8をインストールします。
    sudo amazon-linux-extras install python3.8

  2. Python 3.8 仮想環境をセットアップします。
    python3.8 -m venv /home/ec2-user/userA/pyenv

  3. Python 3.8 仮想環境をアクティブ化します。
    source /home/ec2-user/userA/pyenv/bin/activate

  4. に示されている必要なパッケージをインストールします。 要件.txt ドキュメント クアルコムのパブリック Github サイトから入手できます。
    pip3 install -r requirements.txt

  5. 必要なライブラリをインポートします。
    import transformers 
    from transformers import AutoTokenizer, AutoModelForMaskedLM
    import sys
    import qaic
    import os
    import torch
    import onnx
    from onnxsim import simplify
    import argparse
    import numpy as np

ステップ 2. モデルをインポートする

  1. モデルをインポートしてトークン化します。
    model_card = 'bert-base-cased'
    model = AutoModelForMaskedLM.from_pretrained(model_card)
    tokenizer = AutoTokenizer.from_pretrained(model_card)

  2. サンプル入力を定義し、 inputIds および attentionMask.
    sentence = "The dog [MASK] on the mat."
    encodings = tokenizer(sentence, max_length=128, truncation=True, padding="max_length", return_tensors='pt')
    inputIds = encodings["input_ids"]
    attentionMask = encodings["attention_mask"]

  3. モデルを ONNX に変換すると、コンパイラに渡すことができます。
    # Set dynamic dims and axes.
    dynamic_dims = {0: 'batch', 1 : 'sequence'}
    dynamic_axes = {
        "input_ids" : dynamic_dims,
        "attention_mask" : dynamic_dims,
        "logits" : dynamic_dims
    }
    input_names = ["input_ids", "attention_mask"]
    inputList = [inputIds, attentionMask]
    
    torch.onnx.export(
        model,
        args=tuple(inputList),
        f=f"{gen_models_path}/{model_base_name}.onnx",
        verbose=False,
        input_names=input_names,
        output_names=["logits"],
        dynamic_axes=dynamic_axes,
        opset_version=11,
    )

  4. モデルを FP16 精度で実行します。 したがって、モデルに FP16 の範囲を超える定数が含まれているかどうかを確認する必要があります。 モデルをに渡します fix_onnx_fp16 必要な修正を含む新しい ONNX ファイルを生成する機能。
    from onnx import numpy_helper
            
    def fix_onnx_fp16(
        gen_models_path: str,
        model_base_name: str,
    ) -> str:
        finfo = np.finfo(np.float16)
        fp16_max = finfo.max
        fp16_min = finfo.min
        model = onnx.load(f"{gen_models_path}/{model_base_name}.onnx")
        fp16_fix = False
        for tensor in onnx.external_data_helper._get_all_tensors(model):
            nptensor = numpy_helper.to_array(tensor, gen_models_path)
            if nptensor.dtype == np.float32 and (
                np.any(nptensor > fp16_max) or np.any(nptensor < fp16_min)
            ):
                # print(f'tensor value : {nptensor} above {fp16_max} or below {fp16_min}')
                nptensor = np.clip(nptensor, fp16_min, fp16_max)
                new_tensor = numpy_helper.from_array(nptensor, tensor.name)
                tensor.CopyFrom(new_tensor)
                fp16_fix = True
                
        if fp16_fix:
            # Save FP16 model
            print("Found constants out of FP16 range, clipped to FP16 range")
            model_base_name += "_fix_outofrange_fp16"
            onnx.save(model, f=f"{gen_models_path}/{model_base_name}.onnx")
            print(f"Saving modified onnx file at {gen_models_path}/{model_base_name}.onnx")
        return model_base_name
    
    fp16_model_name = fix_onnx_fp16(gen_models_path=gen_models_path, model_base_name=model_base_name)

ステップ 3. モデルをコンパイルする

  qaic-exec モデルのコンパイルにはコマンド ライン インターフェイス (CLI) コンパイラ ツールが使用されます。 このコンパイラへの入力は、手順 2 で生成された ONNX ファイルです。コンパイラは、バイナリ ファイル ( QPC、用 クアルコムプログラムコンテナ) によって定義されたパス内 -aic-binary-dir 引数。

以下のコンパイル コマンドでは、XNUMX つの AI コンピューティング コアと XNUMX のバッチ サイズを使用してモデルをコンパイルします。

/opt/qti-aic/exec/qaic-exec 
-m=bert-base-cased/generatedModels/bert-base-cased_fix_outofrange_fp16.onnx 
-aic-num-cores=4 
-convert-to-fp16 
-onnx-define-symbol=batch,1 -onnx-define-symbol=sequence,128 
-aic-binary-dir=bert-base-cased/generatedModels/bert-base-cased_fix_outofrange_fp16_qpc 
-aic-hw -aic-hw-version=2.0 
-compile-only

QPC は次の場所で生成されます。 bert-base-cased/generatedModels/bert-base-cased_fix_outofrange_fp16_qpc フォルダにコピーします。

ステップ 4. モデルを実行する

DL100q インスタンスの Cloud AI2 Qualcomm アクセラレータで推論を実行するセッションをセットアップします。

Qualcomm qaic Python ライブラリは、Cloud AI100 アクセラレータでの推論の実行のサポートを提供する API セットです。

  1. セッション API 呼び出しを使用して、セッションのインスタンスを作成します。 セッション API 呼び出しは、qaic Python ライブラリを使用するためのエントリ ポイントです。
    qpcPath = 'bert-base-cased/generatedModels/bert-base-cased_fix_outofrange_fp16_qpc'
    
    bert_sess = qaic.Session(model_path= qpcPath+'/programqpc.bin', num_activations=1)  
    bert_sess.setup() # Loads the network to the device. 
    
    # Here we are reading out all the input and output shapes/types
    input_shape, input_type = bert_sess.model_input_shape_dict['input_ids']
    attn_shape, attn_type = bert_sess.model_input_shape_dict['attention_mask']
    output_shape, output_type = bert_sess.model_output_shape_dict['logits']
    
    #create the input dictionary for given input sentence
    input_dict = {"input_ids": inputIds.numpy().astype(input_type), "attention_mask" : attentionMask.numpy().astype(attn_type)}
    
    #run inference on Cloud AI 100
    output = bert_sess.run(input_dict)

  2. 次のように出力バッファからデータを再構築します。 output_shape および output_type.
    token_logits = np.frombuffer(output['logits'], dtype=output_type).reshape(output_shape)

  3. 生成された出力をデコードします。
    mask_token_logits = torch.from_numpy(token_logits[0, mask_token_index, :]).unsqueeze(0)
    top_5_results = torch.topk(mask_token_logits, 5, dim=1)
    print("Model output (top5) from Qualcomm Cloud AI 100:")
    for i in range(5):
        idx = top_5_results.indices[0].tolist()[i]
        val = top_5_results.values[0].tolist()[i]
        word = tokenizer.decode([idx])
        print(f"{i+1} :(word={word}, index={idx}, logit={round(val,2)})")

以下は、入力文「マットの上の犬 [マスク]」の出力です。

1 :(word=sat, index=2068, logit=11.46)
2 :(word=landed, index=4860, logit=11.11)
3 :(word=spat, index=15732, logit=10.95)
4 :(word=settled, index=3035, logit=10.84)
5 :(word=was, index=1108, logit=10.75)

それでおしまい。 わずか数ステップで、Amazon EC2 DL2q インスタンス上で PyTorch モデルをコンパイルして実行できました。 DL2q インスタンスでのモデルのオンボーディングとコンパイルの詳細については、「 Cloud AI100 チュートリアル ドキュメント。

どの DL モデル アーキテクチャが AWS DL2q インスタンスに適しているか、および現在のモデル サポート マトリックスの詳細については、 クアルコム クラウド AI100 ドキュメント.

利用可能になりました

現在、米国西部 (オレゴン) とヨーロッパ (フランクフルト) の AWS リージョンで DL2q インスタンスを起動できます。 オンデマンドセミナー予約済みスポットインスタンス、またはの一部として 貯蓄プラン。 Amazon EC2 では通常どおり、使用した分だけお支払いいただきます。 詳細については、「」を参照してください。 AmazonEC2の価格.

DL2q インスタンスは、次を使用してデプロイできます。 AWS ディープラーニング AMI (DLAMI)、コンテナー イメージは、次のようなマネージド サービスを通じて利用できます。 アマゾンセージメーカー, Amazon エラスティック Kubernetes サービス (Amazon EKS), Amazon Elastic Container Service(Amazon ECS), AWS パラレルクラスター.

詳細については、 Amazon EC2 DL2q インスタンス ページにアクセスし、フィードバックを送信してください EC2 用の AWS re:Post または、通常の AWS サポートの連絡先を通じて。


著者について

AKロイ クアルコムの製品管理ディレクターであり、クラウドおよびデータセンター AI 製品とソリューションを担当しています。 彼は製品戦略と開発において 20 年以上の経験があり、現在は幅広いユースケースに対応する、クラウドでの AI 推論のためのクラス最高のパフォーマンスとパフォーマンス/コストのエンドツーエンド ソリューションに焦点を当てています。 GenAI、LLM、自動 AI、ハイブリッド AI が含まれます。

ラング・ジャンイン AWS Worldwide Specialist Organization (WWSO) の主任ソリューションアーキテクトです。 彼女は HPC および AI 分野で 15 年以上の実務経験があります。 AWS では、顧客が高速化されたコンピューティング インスタンス上で AI/ML ワークロードをデプロイ、最適化、拡張できるよう支援することに重点を置いています。 彼女は、HPC と AI 分野の技術を組み合わせることに情熱を注いでいます。 Jianying は、コロラド大学ボルダー校で計算物理学の博士号を取得しています。

タイムスタンプ:

より多くの AWS機械学習