「コスト効率の高い高性能 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があります。
- このAI論文では、リーマン幾何学を通じて拡散モデルの潜在空間の理解に深入りします
- 「Amazon Bedrock と Amazon Location Service を使用したジオスペーシャル生成AI」
- 『Amazon Search M5がAWS Trainiumを使用してLLMトレーニングコストを30%節約しました』
各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. 環境の設定と必要なパッケージのインストール
-
Python 3.8をインストールします。
sudo amazon-linux-extras install python3.8
-
Python 3.8の仮想環境をセットアップします。
python3.8 -m venv /home/ec2-user/userA/pyenv
-
Python 3.8の仮想環境をアクティベートします。
source /home/ec2-user/userA/pyenv/bin/activate
-
Qualcommの公開Githubサイトで入手できるrequirements.txtドキュメントに記載されている必要なパッケージをインストールします。
pip3 install -r requirements.txt
-
必要なライブラリをインポートします。
import transformers from transformers import AutoTokenizer, AutoModelForMaskedLMimport sysimport qaicimport osimport torchimport onnxfrom onnxsim import simplifyimport argparseimport numpy as np
ステップ2. モデルのインポート
-
モデルをインポートしてトークン化します。
model_card = 'bert-base-cased'model = AutoModelForMaskedLM.from_pretrained(model_card)tokenizer = AutoTokenizer.from_pretrained(model_card)
-
サンプル入力を定義し、
inputIds
とattentionMask
を抽出します。sentence = "犬はマットの上で[MASK]します。"encodings = tokenizer(sentence, max_length=128, truncation=True, padding="max_length", return_tensors='pt')inputIds = encodings["input_ids"]attentionMask = encodings["attention_mask"]
-
コンパイラに渡すことができるようにモデルを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,)
-
モデルを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を提供します。
-
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)
-
出力バッファからデータを
output_shape
とoutput_type
で再構築します。token_logits = np.frombuffer(output['logits'], dtype=output_type).reshape(output_shape)
-
生成された出力をデコードします。
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 SageMaker、Amazon 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!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- カスタムレンズを使用して、優れたアーキテクチャのIDPソリューションを構築する – パート5:コスト最適化
- 自分自身のレンズでウェルアーキテクチャなIDPソリューションを構築する – パート6:持続可能性
- 「カスタムレンズを使用して、よく設計されたIDPソリューションを構築する-パート4パフォーマンス効率性」
- 「カスタムレンズを使用して、信頼性のあるよく設計されたIDPソリューションを構築する」シリーズの第3部:信頼性
- カスタムレンズを使用してウェルアーキテクチュアIDPソリューションを構築する – パート2:セキュリティ
- 「Amazon SageMaker JumpStart、Llama 2、およびAmazon OpenSearch Serverless with Vector Engineを使用して、金融サービス向けのコンテキスト重視のチャットボットを構築する」
- 「カスタムレンズを使用して、優れたアーキテクチャのIDPソリューションを構築する – パート1:運用の優秀さ」