「コスト効率の高い高性能 AI 推論用の Amazon EC2 DL2q インスタンスが一般提供開始されました」

「高性能で費用効果の高いAI推論に最適なAmazon EC2 DL2qインスタンスが一般提供開始!」

Qualcomm AIのA.K Royによるゲスト投稿です。

Amazon Elastic Compute Cloud(Amazon EC2)のDL2qインスタンスは、Qualcomm AI 100 Standardアクセラレータを搭載しており、コスト効率の良い深層学習(DL)ワークロードをクラウド上で展開するために使用することができます。これらのインスタンスは、Qualcommデバイスに展開されるDLワークロードのパフォーマンスと精度を開発および検証するためにも使用することができます。DL2qインスタンスは、Qualcommの人工知能(AI)技術をクラウドにもたらす最初のインスタンスです。

Qualcomm AI 100 Standardアクセラレータ8基と総合アクセラレータメモリ128 GiBを搭載しているため、顧客はDL2qインスタンスを使用して、コンテンツ生成、テキスト要約、バーチャルアシスタントなどの人気のある生成AIアプリケーション、自然言語処理およびコンピュータビジョン向けのクラシックAIアプリケーションを実行することができます。さらに、Qualcomm AI 100アクセラレータは、スマートフォン、自動運転、パーソナルコンピュータ、拡張現実ヘッドセットなどのあらゆるデバイスで使用されるAI技術と同じものを搭載しているため、DL2qインスタンスは展開前にこれらのAIワークロードの開発および検証にも使用することができます。

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

各DL2qインスタンスには、Qualcomm Cloud AI100アクセラレータが8基組み込まれており、Int8推論パフォーマンスで2.8ペタオプス、FP16推論パフォーマンスで1.4ペタフロップスの集計パフォーマンスを提供します。インスタンスには112のAIコア、アクセラレータメモリ容量128 GB、メモリ帯域1.1 TB/sがあります。

各DL2qインスタンスには96の仮想CPU(vCPUs)、システムメモリ容量768 GB、ネットワーキング帯域幅100 Gbps、Amazon Elastic Block Store(Amazon EBS)のストレージ帯域幅19 Gbpsがサポートされています。

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

Qualcomm Cloud AI100アクセラレータの革新

Cloud AI100アクセラレータのシステムオンチップ(SoC)は、データセンターからエッジまでの幅広い深層学習ユースケースに対応するために設計されたスケーラブルなマルチコアアーキテクチャです。このSoCは、スカラ、ベクトル、テンソルのコンピュートコアを備え、オンダイSRAM容量126 MBの業界をリードする性能を提供しています。これらのコアは、ハイバンド幅の低レイテンシネットワークオンチップ(NoC)メッシュで相互接続されています。

AI100アクセラレータは、幅広いモデルとユースケースをサポートしています。以下の表は、モデルの範囲を示しています。

モデルのカテゴリー モデル数
NLP 157 BERT、BART、FasterTransformer、T5、Z-code MOE
生成AI – NLP 40 LLaMA、CodeGen、GPT、OPT、BLOOM、Jais、Luminous、StarCoder、XGen
生成AI – 画像 3 Stable diffusion v1.5およびv2.1、OpenAI CLIP
CV – 画像分類 45 ViT、ResNet、ResNext、MobileNet、EfficientNet
CV – 物体検知 23 YOLO v2、v3、v4、v5、v7、SSD-ResNet、RetinaNet
CV – その他 15 LPRNet、Super-resolution/SRGAN、ByteTrack
自動車ネットワーク* 53 知覚とLIDAR、歩行者、車線、信号機の検出
合計 >300

*ほとんどの自動車ネットワークは、個々のネットワークの融合から成る複合ネットワークです。

DL2qアクセラレータ上の大容量SRAMは、重みの保存にMX6マイクロ指数精度を使用するための高度なパフォーマンステクニック(例:MX9マイクロ指数精度を使用したアクセラレータ間通信)を効率的に実装することができます。マイクロ指数技術についての詳細は、以下のOpen Compute Project(OCP)業界発表で説明されています:AMD、Arm、Intel、Meta、Microsoft、NVIDIA、およびQualcommがAI向けの次世代ナロープレシジョンデータ形式を標準化 » Open Compute Project

インスタンスユーザーは、以下の戦略を使用してパフォーマンスを最大化できます:

  • MX6マイクロ指数精度を使用してオンアクセラレータDDRメモリに重みを保存します。MX6精度を使用することで、利用可能なメモリ容量とメモリ帯域幅の利用率が最大化され、最高クラスのスループットとレイテンシが提供されます。
  • FP16で計算を行い、必要なユースケースの精度を提供します。また、オンチップSRAMと予備のTOPカードを使用して、高パフォーマンスで低レイテンシのMX6からFP16カーネルを実装します。
  • 最適化されたバッチ処理戦略と大容量のオンチップSRAMを使用して、重みの再利用を最大化し、可能な限りアクティベーションをオンチップに保持します。

DL2q AI Stackとツールチェーン

DL2qインスタンスには、Qualcomm AI Stackが付属しており、Qualcomm AI in the cloudおよび他のQualcomm製品で一貫した開発者体験を提供します。同じQualcomm AIスタックと基本的なAIテクノロジーが、DL2qインスタンスとQualcommエッジデバイスで稼働し、顧客に一貫した開発者体験を提供し、クラウド、自動車、パーソナルコンピュータ、拡張現実、スマートフォンの開発環境で統一されたAPIを提供します。

ツールチェーンを使用すると、インスタンスユーザーは事前にトレーニングされたモデルをすばやくオンボードでき、モデルをコンパイルしてインスタンスの機能に最適化し、コンパイル済みのモデルを本番推論ユースケースに展開できます。展開手順は次の図に示されています。

モデルのパフォーマンスのチューニングについて詳しくは、「Cloud AI 100 Key Performance Parametersドキュメント」を参照してください。

DL2qインスタンスの利用を開始するには

この例では、事前トレーニングされたBERTモデルHugging Faceでコンパイルし、利用可能なDL2q AMIを使用してEC2 DL2qインスタンスに展開するための4つのステップを実行します。

インスタンスには、事前に構築されたQualcomm DLAMIを使用するか、Amazon Linux2 AMIで開始し、このAmazon Simple Storage Service(Amazon S3)のバケット内にあるCloud AI 100 Platform and Apps SDKを使用して独自のDL2q AMIを構築できます:s3://ec2-linux-qualcomm-ai100-sdks/latest/

以下の手順では、事前に構築されたDL2q AMI、Qualcomm Base AL2 DLAMIを使用します。

SSHを使用してQualcomm Base AL2 DLAMI AMIを持つDL2qインスタンスにアクセスし、1から4までの手順に従ってください。

ステップ1. 環境の設定と必要なパッケージのインストール

  1. Python 3.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. Qualcommの公開Githubサイトで入手できるrequirements.txtドキュメントに記載されている必要なパッケージをインストールします。

    pip3 install -r requirements.txt
  5. 必要なライブラリをインポートします。

    import transformers from transformers import AutoTokenizer, AutoModelForMaskedLMimport sysimport qaicimport osimport torchimport onnxfrom onnxsim import simplifyimport argparseimport numpy as np

ステップ2. モデルのインポート

  1. モデルをインポートしてトークン化します。

    model_card = 'bert-base-cased'model = AutoModelForMaskedLM.from_pretrained(model_card)tokenizer = AutoTokenizer.from_pretrained(model_card)
  2. サンプル入力を定義し、inputIdsattentionMaskを抽出します。

    sentence = "犬はマットの上で[MASK]します。"encodings = tokenizer(sentence, max_length=128, truncation=True, padding="max_length", return_tensors='pt')inputIds = encodings["input_ids"]attentionMask = encodings["attention_mask"]
  3. コンパイラに渡すことができるようにモデルをONNXに変換します。

    # 動的な次元と軸を設定します。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範囲を超える定数が含まれているかどうかを確認する必要があります。新しいONNXファイルを必要な修正で生成するために、モデルをfix_onnx_fp16関数に渡します。

    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("FP16範囲外の定数が見つかり、FP16範囲にクリップされました")        model_base_name += "_fix_outofrange_fp16"        onnx.save(model, f=f"{gen_models_path}/{model_base_name}.onnx")        print(f"修正されたONNXファイルを{gen_models_path}/{model_base_name}.onnxに保存しています")    return model_base_namefp16_model_name = fix_onnx_fp16(gen_models_path=gen_models_path, model_base_name=model_base_name)

ステップ3. モデルのコンパイル

コンパイラツールのqaic-execコマンドラインインターフェース(CLI)がモデルをコンパイルするために使用されます。このコンパイラへの入力は、ステップ2で生成されたONNXファイルです。コンパイラは、-aic-binary-dir引数で定義されたパスにバイナリファイル(Qualcommプログラムコンテナと呼ばれる)を生成します。

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

/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. モデルを実行する

DL2qインスタンスのCloud AI100 Qualcommアクセラレータで推論を実行するためのセッションを設定します。

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

  1. Session API呼び出しを使用してセッションのインスタンスを作成します。Session 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() # ネットワークをデバイスに読み込みます。 # 入力および出力の形状/タイプを全て読み出すことができます。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']#与えられた入力文のための入力辞書の作成input_dict = {"input_ids": inputIds.numpy().astype(input_type), "attention_mask" : attentionMask.numpy().astype(attn_type)}#Cloud AI 100で推論を実行するoutput = bert_sess.run(input_dict)
  2. 出力バッファからデータをoutput_shapeoutput_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("モデルの出力(上位5つ):")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)})")

以下は入力文 “The dog [MASK] on the mat.” の出力です。

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チュートリアルのドキュメントを参照してください。

AWS DL2qインスタンスとの互換性のあるDLモデルアーキテクチャと現在のモデルサポートマトリックスについては、Qualcomm Cloud AI100のドキュメントを参照してください。

現在ご利用いただけます

DL2qインスタンスは今すぐUS West(Oregon)およびEurope(Frankfurt)AWSリージョンでオンデマンド予約済み、およびスポットインスタンスとして、または購入プランの一部として利用できます。Amazon EC2と同様に、使用した分だけ支払います。詳細については、Amazon EC2の価格ページをご覧ください。

DL2qインスタンスは、AWS Deep Learning AMIs (DLAMI)を使用して展開できます。コンテナイメージは、Amazon SageMakerAmazon Elastic Kubernetes Service (Amazon EKS)Amazon Elastic Container Service (Amazon ECS)、およびAWS ParallelClusterなどの管理されたサービスを介して利用できます。

詳細は、Amazon EC2 DL2qインスタンスページをご覧ください。フィードバックはAWS re:Post for EC2または通常のAWSサポート担当者にご連絡ください。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

データサイエンス

「ChatGPTが連邦取引委員会によって潜在的な被害の調査を受ける」

重要な進展として、連邦取引委員会(FTC)が人工知能(AI)スタートアップ企業であるOpenAIの調査を開始しました。OpenAIはAI...

人工知能

会話の魔法を解き放つ:ChatGPTをReact.jsとNode.jsと統合する

この包括的なガイドでは、ChatGPTのフロントエンドにはReact.js、バックエンドにはNode.jsを組み合わせた強力なデュオの統合...

人工知能

リアルタイムなSlackボットを生成的AIで構築する

「Apache NiFi、LLM、Foundation Models、およびストリーミングを使用して、クールなSlackbotを構築する方法を学びましょうモ...

データサイエンス

「StackOverflowが生成型AIに対応する方法」

OverflowAIは、強力な生成AIループによってプロセスを効率化することで、コンテンツ作成を革命化します

データサイエンス

「誰も所有していないサービスを修復するために、アンブロックされたものを使う」

「サービスが誰にも所有されていないのは珍しいことではありませんほとんどの文書化もない状態で、Unblockedの魔法を使って、...

機械学習

コンピュータービジョンによる車両損傷検出の構築方法

「2つのモデルを使用したコンピュータビジョンソリューションの設計原則を探求し、Mask R-CNNとU-Net AIアルゴリズムの能力を...