Home Машинное обучение Экземпляр Amazon EC2 DL2q для экономичного и высокопроизводительного вывода ИИ теперь общедоступен | DeepTech

Экземпляр Amazon EC2 DL2q для экономичного и высокопроизводительного вывода ИИ теперь общедоступен | DeepTech

0
Экземпляр Amazon EC2 DL2q для экономичного и высокопроизводительного вывода ИИ теперь общедоступен
 | DeepTech

Это гостевой пост АК Роя из Qualcomm AI.

Экземпляры DL2q Amazon Elastic Compute Cloud (Amazon EC2) на базе ускорителей Qualcomm AI 100 Standard можно использовать для экономичного развертывания рабочих нагрузок глубокого обучения (DL) в облаке. Их также можно использовать для разработки и проверки производительности и точности рабочих нагрузок DL, которые будут развернуты на устройствах Qualcomm. Экземпляры DL2q — это первые экземпляры, которые перенесли технологию искусственного интеллекта (ИИ) Qualcomm в облако.

Благодаря восьми ускорителям Qualcomm AI 100 Standard и 128 ГиБ общей памяти ускорителя клиенты также могут использовать экземпляры DL2q для запуска популярных приложений генеративного ИИ, таких как генерация контента, обобщение текста и виртуальные помощники, а также классических приложений ИИ для обработки естественного языка. и компьютерное зрение. Кроме того, ускорители Qualcomm AI 100 используют ту же технологию искусственного интеллекта, которая используется в смартфонах, автономном вождении, персональных компьютерах и гарнитурах расширенной реальности, поэтому экземпляры DL2q можно использовать для разработки и проверки этих рабочих нагрузок искусственного интеллекта перед развертыванием.

Основные характеристики нового экземпляра DL2q

Каждый экземпляр DL2q включает восемь ускорителей Qualcomm Cloud AI100 с совокупной производительностью более 2,8 петаопс производительности вывода Int8 и 1,4 петафлопс производительности вывода FP16. Экземпляр имеет совокупность 112 AI-ядер, ускоритель памяти объемом 128 ГБ и пропускную способность памяти 1,1 ТБ в секунду.

Каждый экземпляр DL2q имеет 96 виртуальных ЦП, объем системной памяти 768 ГБ и поддерживает пропускную способность сети 100 Гбит/с, а также хранилище Amazon Elastic Block Store (Amazon EBS) 19 Гбит/с.

Имя экземпляра виртуальные процессоры Облачные ускорители AI100 Память ускорителя Память ускорителя BW (агрегированная) Память экземпляра Сеть экземпляра Пропускная способность хранилища (Amazon EBS)
DL2q.24xlarge 96 8 128 ГБ 1,088 ТБ/с 768 ГБ 100 Гбит/с 19 Гбит/с

Инновационный ускоритель Qualcomm Cloud AI100

Система-на-кристалле ускорителя Cloud AI100 (SoC) представляет собой специально созданную масштабируемую многоядерную архитектуру, поддерживающую широкий спектр вариантов использования глубокого обучения, от центра обработки данных до периферийных устройств. В SoC используются скалярные, векторные и тензорные вычислительные ядра с лучшей в отрасли встроенной SRAM емкостью 126 МБ. Ядра соединены между собой с помощью сети на кристалле (NoC) с высокой пропускной способностью и малой задержкой.

Ускоритель AI100 поддерживает широкий спектр моделей и вариантов использования. В таблице ниже показан диапазон поддержки модели.

Категория модели Количество моделей Примеры​
НЛП​ 157 BERT, BART, FasterTransformer, T5, Z-код MOE
Генеративный ИИ – НЛП 40 LLaMA, CodeGen, GPT, OPT, BLOOM, Jais, Luminous, StarCoder, XGen
Генеративный ИИ – Изображение 3 Стабильная диффузия v1.5 и v2.1, OpenAI CLIP
Резюме – Классификация изображений 45 ВиТ, ResNet, ResNext, MobileNet, EfficientNet
CV – Обнаружение объектов 23 YOLO v2, v3, v4, v5 и v7, SSD-ResNet, RetinaNet
Резюме – Другое 15 LPRNet, сверхвысокое разрешение/SRGAN, ByteTrack
Автомобильные сети* 53 Восприятие и LIDAR, обнаружение пешеходов, полос движения и светофоров
Всего​ >300

* Большинство автомобильных сетей представляют собой составные сети, состоящие из слияния отдельных сетей.

Большая встроенная SRAM ускорителя DL2q обеспечивает эффективную реализацию передовых методов повышения производительности, таких как микроэкспоненциальная точность MX6 для хранения весов и микроэкспоненциальная точность MX9 для связи между ускорителями. Технология микроэкспоненты описана в следующем отраслевом объявлении Open Compute Project (OCP): AMD, Arm, Intel, Meta, Microsoft, NVIDIA и Qualcomm стандартизируют форматы данных узкой точности следующего поколения для искусственного интеллекта » Open Compute Project.

Пользователь экземпляра может использовать следующую стратегию для максимизации соотношения производительности и затрат:

  • Сохраняйте веса, используя точность микроэкспоненты MX6 в памяти DDR с включенным ускорителем. Использование точности MX6 максимально эффективно использует доступный объем памяти и пропускную способность памяти, обеспечивая лучшую в своем классе пропускную способность и задержку.
  • Вычисляйте в FP16, чтобы обеспечить необходимую точность сценария использования, используя при этом превосходную встроенную SRAM и запасные TOP на карте для реализации высокопроизводительных ядер от MX6 до FP16 с малой задержкой.
  • Используйте оптимизированную стратегию пакетной обработки и увеличивайте размер пакета за счет использования большой встроенной SRAM, чтобы максимизировать повторное использование весов, сохраняя при этом активации на кристалле до максимально возможного уровня.

DL2q AI стек и набор инструментов

Экземпляр DL2q сопровождается стеком Qualcomm AI Stack, который обеспечивает единообразную работу разработчиков с использованием искусственного интеллекта Qualcomm в облаке и других продуктах Qualcomm. Один и тот же стек искусственного интеллекта Qualcomm и базовая технология искусственного интеллекта работают на экземплярах DL2q и периферийных устройствах Qualcomm, предоставляя клиентам единообразный опыт разработки с унифицированным API для облачных, автомобильных, персональных компьютеров, расширенной реальности и сред разработки смартфонов.

Цепочка инструментов позволяет пользователю экземпляра быстро подключить ранее обученную модель, скомпилировать и оптимизировать модель для возможностей экземпляра, а затем развернуть скомпилированные модели для сценариев использования производственного вывода за три шага, показанных на следующем рисунке.

Чтобы узнать больше о настройке производительности модели, см. Ключевые параметры производительности Cloud AI 100 Документация.

Начало работы с экземплярами DL2q

В этом примере вы компилируете и развертываете предварительно обученный БЕРТ-модель от Обнимающее лицо на экземпляре EC2 DL2q с использованием предварительно созданного доступного AMI DL2q за четыре шага.

Вы можете использовать либо предварительно созданный Qualcomm DLAMI на экземпляре, либо начать с Amazon Linux2 AMI и создать свой собственный DL2q AMI с помощью Cloud AI 100 Platform и Apps SDK, доступных в этом сегменте Amazon Simple Storage Service (Amazon S3): s3://ec2-linux-qualcomm-ai100-sdks/latest/.

В следующих шагах используется предварительно созданный AMI DL2q. База Qualcomm AL2 DLAMI.

Используйте SSH для доступа к вашему экземпляру DL2q с помощью Qualcomm Base AL2 DLAMI AMI и выполните шаги с 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. Установите необходимые пакеты, показанные в Документ «требования.txt» доступен на общедоступном сайте Qualcomm на 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). Входными данными для этого компилятора является файл ONNX, созданный на шаге 2. Компилятор создает двоичный файл (называемый КПКдля Программный контейнер Qualcomm) на пути, определенном -aic-binary-dir аргумент.

В приведенной ниже команде компиляции вы используете четыре вычислительных ядра AI и размер пакета, равный одному, для компиляции модели.

/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. Запустите модель

Настройте сеанс для выполнения вывода на ускорителе Cloud AI100 Qualcomm в экземпляре DL2q.

Библиотека Qualcomm qaic Python — это набор API-интерфейсов, обеспечивающих поддержку выполнения логических выводов в ускорителе Cloud AI100.

  1. Используйте вызов 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() # 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)

Вот и все. Всего за несколько шагов вы скомпилировали и запустили модель PyTorch на экземпляре Amazon EC2 DL2q. Чтобы узнать больше об адаптации и компиляции моделей на экземпляре DL2q, см. Учебная документация по Cloud AI100.

Чтобы узнать больше о том, какие архитектуры моделей DL лучше всего подходят для экземпляров AWS DL2q, а также о текущей матрице поддержки моделей, см. Документация Qualcomm Cloud AI100.

Доступен сейчас

Вы можете запустить инстансы DL2q уже сегодня в регионах AWS Запад США (Орегон) и Европе (Франкфурт) в качестве инстансов по требованию, зарезервированных и спотовых инстансов или в рамках плана экономии. Как обычно в Amazon EC2, вы платите только за то, что используете. Дополнительную информацию см. в разделе цены на Amazon EC2.

Экземпляры DL2q можно развернуть с помощью AWS Deep Learning AMI (DLAMI), а образы контейнеров доступны через управляемые сервисы, такие как Amazon SageMaker, Amazon Elastic Kubernetes Service (Amazon EKS), Amazon Elastic Container Service (Amazon ECS) и AWS ParallelCluster.

Чтобы узнать больше, посетите страницу экземпляра Amazon EC2 DL2q и отправьте отзыв по адресу AWS re:Post для EC2 или через ваши обычные контакты службы поддержки AWS.


Об авторах

АК Рой является директором по управлению продуктами Qualcomm в области продуктов и решений искусственного интеллекта для облачных вычислений и центров обработки данных. Он имеет более чем 20-летний опыт работы в области стратегии и разработки продуктов, в настоящее время уделяя особое внимание лучшим в своем классе производительности и производительности, а также комплексным решениям для искусственного интеллекта в облаке для широкого спектра вариантов использования. включая GenAI, LLM, Auto и Hybrid AI.

Цзяньин Лан — главный архитектор решений во Всемирной специализированной организации AWS (WWSO). Имеет более 15 лет опыта работы в сфере высокопроизводительных вычислений и искусственного интеллекта. В AWS она помогает клиентам развертывать, оптимизировать и масштабировать рабочие нагрузки искусственного интеллекта и машинного обучения на экземплярах ускоренных вычислений. Она увлечена объединением методов высокопроизводительных вычислений и искусственного интеллекта. Цзяньин имеет степень доктора философии в области вычислительной физики, полученную в Университете Колорадо в Боулдере.

LEAVE A REPLY

Please enter your comment!
Please enter your name here