Tăng hiệu suất suy luận cho các mô hình Mixtral và Llama 2 với bộ chứa Amazon SageMaker mới | Dịch vụ web của Amazon

Tăng hiệu suất suy luận cho các mô hình Mixtral và Llama 2 với bộ chứa Amazon SageMaker mới | Dịch vụ web của Amazon

Trong tháng 1 2024, Amazon SageMaker đã ra mắt phiên bản mới (0.26.0) của Bộ chứa học tập sâu (DLC) suy luận mô hình lớn (LMI). Phiên bản này cung cấp hỗ trợ cho các mô hình mới (bao gồm Hỗn hợp các chuyên gia), cải thiện hiệu suất và khả năng sử dụng trên các chương trình phụ trợ suy luận, cũng như các chi tiết thế hệ mới để tăng khả năng kiểm soát và giải thích dự đoán (chẳng hạn như lý do hoàn thành việc tạo và xác suất nhật ký cấp mã thông báo).

LMI DLC cung cấp giao diện mã thấp giúp đơn giản hóa bằng cách sử dụng phần cứng và kỹ thuật tối ưu hóa suy luận hiện đại. LMI cho phép bạn áp dụng tính song song tensor; các kỹ thuật quản lý sự chú ý, phân khối, lượng tử hóa và bộ nhớ hiệu quả mới nhất; truyền phát mã thông báo; và hơn thế nữa, chỉ bằng cách yêu cầu ID mẫu và các tham số mẫu tùy chọn. Với các DLC LMI trên SageMaker, bạn có thể tăng tốc thời gian tạo ra giá trị cho trí tuệ nhân tạo sáng tạo (AI) các ứng dụng, giảm tải các công việc nặng nhọc liên quan đến cơ sở hạ tầng và tối ưu hóa các mô hình ngôn ngữ lớn (LLM) cho phần cứng bạn chọn để đạt được hiệu suất về giá tốt nhất trong phân khúc.

Trong bài đăng này, chúng tôi khám phá các tính năng mới nhất được giới thiệu trong bản phát hành này, kiểm tra điểm chuẩn hiệu suất và cung cấp hướng dẫn chi tiết về cách triển khai LLM mới với LMI DLC ở hiệu suất cao.

Các tính năng mới với DLC LMI

Trong phần này, chúng tôi thảo luận về các tính năng mới trên các chương trình phụ trợ LMI và đi sâu vào một số tính năng khác dành riêng cho chương trình phụ trợ. LMI hiện hỗ trợ các chương trình phụ trợ sau:

  • Thư viện phân phối LMI – Đây là framework AWS để chạy suy luận với LLM, lấy cảm hứng từ OSS, nhằm đạt được độ trễ và độ chính xác tốt nhất có thể cho kết quả
  • LMI vLLM – Đây là cách triển khai phụ trợ AWS nhằm tiết kiệm bộ nhớ vLLM thư viện suy luận
  • Bộ công cụ LMI TensorRT-LLM – Đây là triển khai phụ trợ AWS của NVIDIA TensorRT-LLM, tạo ra các công cụ dành riêng cho GPU để tối ưu hóa hiệu suất trên các GPU khác nhau
  • Tốc độ sâu LMI – Đây là bản chuyển thể AWS của Tốc độ sâu, bổ sung tính năng phân khối liên tục thực sự, lượng tử hóa SmoothQuant và khả năng điều chỉnh linh hoạt bộ nhớ trong quá trình suy luận
  • LMI NeuronX – Bạn có thể sử dụng điều này để triển khai trên Suy luận AWS2Đào tạo AWS-các phiên bản dựa trên, có tính năng tăng tốc và phân khối liên tục thực sự, dựa trên SDK thần kinh AWS

Bảng sau đây tóm tắt các tính năng mới được thêm vào, cả tính năng phổ biến và dành riêng cho chương trình phụ trợ.

Phổ biến trên các chương trình phụ trợ

          • Hỗ trợ các mẫu mới: Mistral7B, Mixtral, Llama2-70B (NeuronX)
          • Hỗ trợ mở rộng quy mô RoPE cho bối cảnh dài hơn
          • Đã thêm chi tiết tạo: lý do kết thúc tạo và xác suất nhật ký cấp mã thông báo
          • Hợp nhất thông số cấu hình máy chủ

Phần phụ trợ cụ thể

LMI-Phân phối

vLLM TenorRT-LLM

NeuronX

  • Đã thêm mức độ chi tiết nhóm cho tập hợp GPU được tối ưu hóa
  • Đồ thị CUDA hỗ trợ cải thiện hiệu suất lên tới 50%
  • Các mô hình mới được hỗ trợ để biên dịch JIT được quản lý
  • Hỗ trợ lượng tử hóa SmoothQuant gốc của TensorRT-LLM
  • Hỗ trợ chú ý truy vấn theo nhóm
  • Cải thiện hiệu suất theo đợt liên tục

Hỗ trợ các mẫu mới

Các mô hình phổ biến mới được hỗ trợ trên các chương trình phụ trợ, chẳng hạn như Mistral-7B (tất cả các chương trình phụ trợ), Mixtral dựa trên MoE (tất cả các chương trình phụ trợ ngoại trừ Transformers-NeuronX) và Llama2-70B (Transformers-NeuronX).

Kỹ thuật mở rộng cửa sổ ngữ cảnh

Tỷ lệ bối cảnh dựa trên Nhúng vị trí quay (RoPE) hiện có sẵn trên các chương trình phụ trợ LMI-Dist, vLLM và TensorRT-LLM. Việc chia tỷ lệ RoPE cho phép mở rộng độ dài chuỗi của mô hình trong quá trình suy luận đến hầu hết mọi kích thước mà không cần tinh chỉnh.

Sau đây là hai điểm quan trọng cần cân nhắc khi sử dụng RoPE:

  • Sự bối rối của mô hình – Khi độ dài chuỗi tăng lên, vì vậy có thể các mô hình sự bối rối. Hiệu ứng này có thể được bù đắp một phần bằng cách tiến hành tinh chỉnh tối thiểu trên các chuỗi đầu vào lớn hơn các chuỗi được sử dụng trong quá trình huấn luyện ban đầu. Để hiểu sâu hơn về cách RoPE ảnh hưởng đến chất lượng mô hình, hãy tham khảo Mở rộng RoPE.
  • Hiệu suất suy luận – Độ dài chuỗi dài hơn sẽ tiêu tốn bộ nhớ băng thông cao (HBM) của máy gia tốc cao hơn. Việc sử dụng bộ nhớ tăng lên này có thể ảnh hưởng xấu đến số lượng yêu cầu đồng thời mà trình tăng tốc của bạn có thể xử lý.

Đã thêm chi tiết thế hệ

Bây giờ bạn có thể nhận được hai chi tiết chi tiết về kết quả tạo:

  • kết thúc_lý do – Điều này đưa ra lý do hoàn thành việc tạo, có thể đạt đến độ dài tạo tối đa, tạo mã thông báo cuối câu (EOS) hoặc tạo mã thông báo dừng do người dùng xác định. Nó được trả về cùng với đoạn chuỗi được phát trực tiếp cuối cùng.
  • log_prob – Điều này trả về xác suất nhật ký được mô hình chỉ định cho mỗi mã thông báo trong đoạn chuỗi được truyền trực tuyến. Bạn có thể sử dụng những giá trị này làm ước tính sơ bộ về độ tin cậy của mô hình bằng cách tính xác suất chung của một chuỗi là tổng của log_probs của các mã thông báo riêng lẻ, có thể hữu ích cho việc tính điểm và xếp hạng đầu ra của mô hình. Hãy lưu ý rằng xác suất của mã thông báo LLM thường quá tự tin nếu không hiệu chỉnh.

Bạn có thể kích hoạt đầu ra của kết quả tạo bằng cách thêm chi tiết=True trong tải trọng đầu vào của mình vào LMI, giữ nguyên tất cả các tham số khác:

payload = {“inputs”:“your prompt”,
“parameters”:{max_new_tokens”:256,...,“details”:True}
}

Thông số cấu hình hợp nhất

Cuối cùng, các thông số cấu hình LMI cũng đã được hợp nhất. Để biết thêm thông tin về tất cả các tham số cấu hình triển khai phổ biến và dành riêng cho chương trình phụ trợ, hãy xem Cấu hình suy luận mô hình lớn.

Phần phụ trợ phân phối LMI

Tại AWS re:Invent 2023, LMI-Dist đã bổ sung các hoạt động tập thể mới, được tối ưu hóa để tăng tốc độ giao tiếp giữa các GPU, mang lại độ trễ thấp hơn và thông lượng cao hơn cho các mô hình quá lớn đối với một GPU. Các nhóm này chỉ có sẵn cho SageMaker, dành cho phiên bản p4d.

Trong khi phiên bản trước chỉ hỗ trợ phân đoạn trên tất cả 8 GPU, LMI 0.26.0 giới thiệu hỗ trợ cho cấp độ song song tensor là 4, theo mô hình một phần tất cả thành tất cả. Điều này có thể được kết hợp với Thành phần suy luận SageMaker, nhờ đó bạn có thể định cấu hình chi tiết số lượng bộ tăng tốc sẽ được phân bổ cho mỗi mô hình được triển khai phía sau điểm cuối. Cùng với nhau, các tính năng này cung cấp khả năng kiểm soát tốt hơn việc sử dụng tài nguyên của phiên bản cơ bản, cho phép bạn tăng khả năng sử dụng nhiều mô hình bằng cách lưu trữ các mô hình khác nhau sau một điểm cuối hoặc tinh chỉnh thông lượng tổng hợp của quá trình triển khai để phù hợp với đặc điểm mô hình và lưu lượng truy cập của bạn.

Hình dưới đây so sánh trực tiếp tất cả với tất cả với một phần tất cả.

Tất cả cho tất cả các tập thể một phần.

Phần phụ trợ TensorRT-LLM

TensorRT-LLM của NVIDIA được giới thiệu như một phần của bản phát hành LMI DLC trước đó (0.25.0), cho phép tối ưu hóa và hiệu suất GPU hiện đại như SmoothQuant, FP8 và phân khối liên tục cho LLM khi sử dụng GPU NVIDIA.

TensorRT-LLM yêu cầu các mô hình phải được biên dịch thành các công cụ hiệu quả trước khi triển khai. LMI TensorRT-LLM DLC có thể tự động xử lý việc biên soạn danh sách các mô hình được hỗ trợ đúng lúc (JIT), trước khi khởi động máy chủ và tải mô hình để suy luận theo thời gian thực. Phiên bản 0.26.0 của DLC phát triển danh sách các mô hình được hỗ trợ để biên dịch JIT, giới thiệu các mô hình Baichuan, ChatGLM, GPT2, GPT-J, InternLM, Mistral, Mixtral, Qwen, SantaCoder và StarCoder.

Quá trình biên dịch JIT sẽ tốn thêm vài phút cho thời gian cung cấp điểm cuối và mở rộng quy mô, vì vậy, bạn nên biên dịch mô hình của mình trước thời hạn. Để biết hướng dẫn về cách thực hiện việc này và danh sách các kiểu máy được hỗ trợ, hãy xem Hướng dẫn biên soạn trước các mô hình TensorRT-LLM. Nếu kiểu máy bạn đã chọn chưa được hỗ trợ, hãy tham khảo Hướng dẫn biên soạn mô hình TensorRT-LLM để biên dịch bất kỳ mô hình nào khác được TensorRT-LLM hỗ trợ.

Ngoài ra, LMI hiện hiển thị lượng tử hóa TensorRT-LLM SmootQuant gốc, với các tham số để kiểm soát hệ số alpha và tỷ lệ theo mã thông báo hoặc kênh. Để biết thêm thông tin về các cấu hình liên quan, hãy tham khảo TenorRT-LLM.

phụ trợ vLLM

Bản phát hành cập nhật của vLLM có trong LMI DLC có tính năng cải thiện hiệu suất lên tới 50% nhờ chế độ biểu đồ CUDA thay vì chế độ háo hức. Đồ thị CUDA tăng tốc khối lượng công việc GPU bằng cách khởi chạy một số thao tác GPU cùng một lúc thay vì khởi chạy chúng riêng lẻ, giúp giảm chi phí chung. Điều này đặc biệt hiệu quả đối với các mô hình nhỏ khi sử dụng phép song song tensor.

Hiệu suất tăng thêm phải đánh đổi bằng mức tiêu thụ bộ nhớ GPU bổ sung. Chế độ biểu đồ CUDA hiện được mặc định cho phần phụ trợ vLLM, vì vậy nếu bạn bị hạn chế về dung lượng bộ nhớ GPU khả dụng, bạn có thể đặt option.enforce_eager=True để buộc chế độ háo hức PyTorch.

Chương trình phụ trợ Transformers-NeuronX

Bản phát hành cập nhật của NeuronX được bao gồm trong LMI NeuronX DLC hiện hỗ trợ các mô hình có cơ chế chú ý truy vấn được nhóm, chẳng hạn như Mistral-7B và LLama2-70B. Chú ý truy vấn được nhóm là một sự tối ưu hóa quan trọng của cơ chế chú ý biến áp mặc định, trong đó mô hình được huấn luyện với ít đầu khóa và giá trị hơn đầu truy vấn. Điều này làm giảm kích thước bộ nhớ đệm KV trên bộ nhớ GPU, cho phép đạt được khả năng xử lý đồng thời cao hơn và cải thiện hiệu suất về giá.

Hình dưới đây minh họa các phương thức chú ý nhiều đầu, truy vấn được nhóm và nhiều truy vấn (nguồn).

Sơ đồ nhóm truy vấn chú ý

Các chiến lược phân chia bộ đệm KV khác nhau có sẵn để phù hợp với các loại khối lượng công việc khác nhau. Để biết thêm thông tin về chiến lược sharding, hãy xem Hỗ trợ chú ý truy vấn theo nhóm (GQA). Bạn có thể kích hoạt chiến lược mong muốn của mình (shard-over-heads, ví dụ) với đoạn mã sau:

option.group_query_attention=shard-over-heads

Ngoài ra, việc triển khai NeuronX DLC mới giới thiệu API bộ đệm cho TransformerNeuronX cho phép truy cập vào bộ đệm KV. Nó cho phép bạn chèn và xóa các hàng bộ đệm KV khỏi các yêu cầu mới trong khi bạn đang xử lý suy luận theo đợt. Trước khi giới thiệu API này, bộ đệm KV đã được tính toán lại cho mọi yêu cầu mới được thêm vào. So với LMI V7 (0.25.0), chúng tôi đã cải thiện độ trễ hơn 33% với các yêu cầu đồng thời và hỗ trợ thông lượng cao hơn nhiều.

Chọn phụ trợ phù hợp

Để quyết định sử dụng phần phụ trợ nào dựa trên mô hình và tác vụ đã chọn, hãy sử dụng lưu đồ sau. Để biết hướng dẫn sử dụng phụ trợ riêng lẻ cùng với các mô hình được hỗ trợ, hãy xem Hướng dẫn sử dụng phụ trợ LMI.

Cây quyết định để quyết định sử dụng phụ trợ nào

Triển khai Mixtral với LMI DLC với các thuộc tính bổ sung

Hãy xem cách bạn có thể triển khai mô hình Mixtral-8x7B với bộ chứa LMI 0.26.0 và tạo các chi tiết bổ sung như log_probfinish_reason như một phần của đầu ra. Chúng tôi cũng thảo luận về cách bạn có thể hưởng lợi từ các thuộc tính bổ sung này thông qua trường hợp sử dụng tạo nội dung.

Sổ ghi chép đầy đủ với hướng dẫn chi tiết có sẵn trong Repo GitHub.

Chúng tôi bắt đầu bằng cách nhập thư viện và định cấu hình môi trường phiên:

import boto3
import sagemaker 
import json 
import io 
import numpy as np 
from sagemaker import Model, image_uris, serializers, deserializers 

role = sagemaker.get_execution_role() # execution role for the endpoint 
session = sagemaker.session.Session() # sagemaker session for interacting with different AWS APIs 
region = session._region_name # region name of the current SageMaker Studio environment

Bạn có thể sử dụng bộ chứa SageMaker LMI để lưu trữ mô hình mà không cần bất kỳ mã suy luận bổ sung nào. Bạn có thể định cấu hình máy chủ mô hình thông qua các biến môi trường hoặc serving.properties tài liệu. Tùy chọn, bạn có thể có một model.py tập tin cho bất kỳ quá trình tiền xử lý hoặc hậu xử lý nào và một requirements.txt tập tin cho bất kỳ gói bổ sung nào được yêu cầu cài đặt.

Trong trường hợp này, chúng tôi sử dụng serving.properties để định cấu hình các tham số và tùy chỉnh hành vi của vùng chứa LMI. Để biết thêm chi tiết, hãy tham khảo Repo GitHub. Kho lưu trữ giải thích chi tiết về các tham số cấu hình khác nhau mà bạn có thể đặt. Chúng ta cần các tham số chính sau:

  • động cơ – Chỉ định công cụ thời gian chạy để DJL sử dụng. Điều này thúc đẩy chiến lược sharding và tải mô hình trong các bộ tăng tốc cho mô hình.
  • tùy chọn.model_id – Chỉ định các Dịch vụ lưu trữ đơn giản của Amazon (Amazon S3) URI của mô hình được đào tạo trước hoặc ID mô hình của mô hình được đào tạo trước được lưu trữ bên trong kho lưu trữ mô hình trên Ôm mặt. Trong trường hợp này, chúng tôi cung cấp ID mẫu cho mẫu Mixtral-8x7B.
  • tùy chọn.tensor_parallel_degree – Đặt số lượng thiết bị GPU mà Accelerate cần để phân vùng mô hình. Tham số này cũng kiểm soát số lượng công nhân trên mỗi mô hình sẽ được khởi động khi chạy phân phát DJL. Chúng tôi đặt giá trị này thành max (GPU tối đa trên máy hiện tại).
  • tùy chọn.rolling_batch – Cho phép phân mẻ liên tục để tối ưu hóa việc sử dụng máy gia tốc và thông lượng tổng thể. Đối với bộ chứa TensorRT-LLM, chúng tôi sử dụng auto.
  • tùy chọn.model_loading_timeout – Đặt giá trị thời gian chờ để tải xuống và tải mô hình để phục vụ suy luận.
  • tùy chọn.max_rolling_batch – Đặt kích thước tối đa của lô liên tục, xác định số lượng trình tự có thể được xử lý song song tại bất kỳ thời điểm nào.
%%writefile serving.properties 
engine=MPI 
option.model_id=mistralai/Mixtral-8x7B-v0.1 
option.tensor_parallel_degree=max 
option.max_rolling_batch_size=32 
option.rolling_batch=auto 
option.model_loading_timeout = 7200

Chúng tôi đóng gói serving.properties tệp cấu hình ở định dạng tar.gz để đáp ứng các yêu cầu lưu trữ của SageMaker. Chúng tôi định cấu hình bộ chứa DJL LMI với tensorrtllm như công cụ phụ trợ. Ngoài ra, chúng tôi chỉ định phiên bản mới nhất của vùng chứa (0.26.0).

image_uri = image_uris.retrieve(
   framework="djl-tensorrtllm",
   region=sess.boto_session.region_name,
   version="0.26.0"
)

Tiếp theo, chúng tôi tải tarball cục bộ lên (chứa serving.properties tệp cấu hình) thành tiền tố S3. Chúng tôi sử dụng URI hình ảnh cho bộ chứa DJL và vị trí Amazon S3 mà mô hình phân phát tarball tạo phẩm đã được tải lên để tạo đối tượng mô hình SageMaker.

model = Model(image_uri=image_uri, model_data=code_artifact, role=role) 

instance_type = "ml.p4d.24xlarge" 
endpoint_name = sagemaker.utils.name_from_base("mixtral-lmi-model") 

model.deploy(
   initial_instance_count=1,
   instance_type=instance_type,
   endpoint_name=endpoint_name,
   container_startup_health_check_timeout=1800
)

Là một phần của LMI 0.26.0, giờ đây bạn có thể sử dụng hai chi tiết chi tiết bổ sung về đầu ra được tạo:

  • log_prob – Đây là xác suất nhật ký được mô hình chỉ định cho mỗi mã thông báo trong đoạn chuỗi được truyền trực tuyến. Bạn có thể sử dụng những giá trị này làm ước tính sơ bộ về độ tin cậy của mô hình bằng cách tính xác suất chung của một chuỗi dưới dạng tổng xác suất nhật ký của các mã thông báo riêng lẻ, có thể hữu ích cho việc tính điểm và xếp hạng đầu ra của mô hình. Hãy lưu ý rằng xác suất của mã thông báo LLM thường quá tự tin nếu không hiệu chỉnh.
  • kết thúc_lý do – Đây là lý do để hoàn thành quá trình tạo, có thể đạt đến thời lượng tạo tối đa, tạo mã thông báo EOS hoặc tạo mã thông báo dừng do người dùng xác định. Điều này được trả về cùng với đoạn chuỗi được phát trực tiếp cuối cùng.

Bạn có thể kích hoạt những thứ này bằng cách chuyển "details"=True như một phần đầu vào của bạn cho mô hình.

Hãy xem cách bạn có thể tạo ra những chi tiết này. Chúng tôi sử dụng ví dụ về tạo nội dung để hiểu ứng dụng của họ.

Chúng tôi xác định một LineIterator lớp trình trợ giúp, có chức năng tìm nạp từng byte từ luồng phản hồi, đệm chúng và chia bộ đệm thành các dòng. Ý tưởng là phân phát byte từ bộ đệm trong khi tìm nạp nhiều byte hơn từ luồng một cách không đồng bộ.

class LineIterator:
    def __init__(self, stream):
        # Iterator to get bytes from stream 
        self.byte_iterator = iter(stream)  
        # Buffer stream bytes until we get a full line
        self.buffer = io.BytesIO()  
        # Track current reading position within buffer
        self.read_pos = 0

   def __iter__(self):
        # Make class iterable 
        return self

    def __next__(self):
        while True:
           # Seek read position within buffer
           self.buffer.seek(self.read_pos)  
           # Try reading a line from current position
           line = self.buffer.readline()
           # If we have a full line
           if line and line[-1] == ord('n'):
               # Increment reading position past this line
               self.read_pos += len(line)  
               # Return the line read without newline char
               return line[:-1] 
           # Fetch next chunk from stream  
           try:
               chunk = next(self.byte_iterator)
           # Handle end of stream 
           except StopIteration:
               # Check if we have any bytes still unread
               if self.read_pos < self.buffer.getbuffer().nbytes:
                   continue
               # If not, raise StopIteration
               raise
           # Add fetched bytes to end of buffer
           self.buffer.seek(0, io.SEEK_END)  
           self.buffer.write(chunk['PayloadPart']['Bytes'])

Tạo và sử dụng xác suất mã thông báo làm chi tiết bổ sung

Hãy xem xét một trường hợp sử dụng trong đó chúng tôi đang tạo nội dung. Cụ thể, chúng tôi được giao nhiệm vụ viết một đoạn văn ngắn về lợi ích của việc tập thể dục thường xuyên cho một trang web tập trung vào lối sống. Chúng tôi muốn tạo nội dung và đưa ra một số điểm biểu thị mức độ tin cậy mà mô hình có được đối với nội dung được tạo.

Chúng tôi gọi điểm cuối của mô hình bằng lời nhắc của mình và ghi lại phản hồi được tạo. Chúng tôi thiết lập "details": True như một tham số thời gian chạy trong đầu vào của mô hình. Vì xác suất nhật ký được tạo cho mỗi mã thông báo đầu ra nên chúng tôi sẽ thêm các xác suất nhật ký riêng lẻ vào danh sách. Chúng tôi cũng ghi lại toàn bộ văn bản được tạo từ phản hồi.

sm_client = boto3.client("sagemaker-runtime")

# Set details: True as a runtime parameter within the input.
body = {"inputs": prompt, "parameters": {"max_new_tokens":512, "details": True}}
resp = sm_client.invoke_endpoint_with_response_stream(EndpointName=endpoint_name, Body=json.dumps(body), ContentType="application/json")
event_stream = resp['Body']

overall_log_prob = []

for line in LineIterator(event_stream):
    resp = json.loads(line)
    if resp['token'].get('text') != None:
        token_log_prob = resp['token']['log_prob']
        overall_log_prob.append(token_log_prob)
    elif resp['generated_text'] != None:
        generated_text= resp['generated_text']

Để tính điểm tin cậy tổng thể, chúng tôi tính giá trị trung bình của tất cả các xác suất của mã thông báo riêng lẻ và sau đó nhận giá trị hàm mũ trong khoảng từ 0 đến 1. Đây là điểm tin cậy tổng thể được suy ra của chúng tôi cho văn bản được tạo, trong trường hợp này là một đoạn văn về lợi ích của việc tập thể dục thường xuyên.

print(generated_text) 
overall_score=np.exp(np.mean(overall_log_prob)) 
print(f"nnOverall confidence score in the generated text: {overall_score}")

Tăng hiệu suất suy luận cho các mô hình Mixtral và Llama 2 với bộ chứa Amazon SageMaker mới | Dịch vụ web của Amazon PlatoThông minh dữ liệu Blockchain. Tìm kiếm dọc. Ái.

Đây là một ví dụ về cách bạn có thể tạo và sử dụng log_prob, trong bối cảnh trường hợp sử dụng tạo nội dung. Tương tự, bạn có thể sử dụng log_prob làm thước đo điểm tin cậy cho các trường hợp sử dụng phân loại.

Ngoài ra, bạn có thể sử dụng nó cho chuỗi đầu ra tổng thể hoặc tính điểm cấp độ câu để đánh giá ảnh hưởng của các tham số như nhiệt độ đến đầu ra được tạo.

Tạo và sử dụng lý do kết thúc như một chi tiết bổ sung

Hãy xây dựng trên cùng một trường hợp sử dụng, nhưng lần này chúng ta có nhiệm vụ viết một bài viết dài hơn. Ngoài ra, chúng tôi muốn đảm bảo rằng đầu ra không bị cắt bớt do vấn đề về độ dài thế hệ (độ dài mã thông báo tối đa) hoặc do gặp phải mã thông báo dừng.

Để thực hiện điều này, chúng tôi sử dụng finish_reason thuộc tính được tạo ở đầu ra, theo dõi giá trị của nó và tiếp tục tạo cho đến khi toàn bộ đầu ra được tạo.

Chúng tôi xác định hàm suy luận nhận dữ liệu đầu vào và gọi điểm cuối SageMaker, truyền lại phản hồi và xử lý phản hồi để trích xuất văn bản được tạo. Tải trọng chứa văn bản nhắc nhở làm đầu vào và thông số như mã thông báo tối đa và thông tin chi tiết. Phản hồi được đọc trong luồng và được xử lý từng dòng để trích xuất mã thông báo văn bản đã tạo vào danh sách. Chúng tôi trích xuất chi tiết như finish_reason. Chúng tôi gọi hàm suy luận trong một vòng lặp (các yêu cầu được xâu chuỗi) đồng thời thêm nhiều ngữ cảnh hơn mỗi lần và theo dõi số lượng mã thông báo được tạo cũng như số lượng yêu cầu được gửi cho đến khi mô hình kết thúc.

def inference(payload):
    # Call SageMaker endpoint and get response stream
    resp = sm_client.invoke_endpoint_with_response_stream(EndpointName=endpoint_name, Body=json.dumps(payload), ContentType="application/json")
    event_stream = resp['Body']
    text_output = []
    for line in LineIterator(event_stream):
        resp = json.loads(line) 
        # Extract text tokens if present
        if resp['token'].get('text') != None:
            token = resp['token']['text']
            text_output.append(token)  
            print(token, end='')
        # Get finish reason if details present
        if resp.get('details') != None:
            finish_reason = resp['details']['finish_reason']
            # Return extracted output, finish reason and token length
            return payload['inputs'] + ''.join(text_output), finish_reason, len(text_output)

# set details: True as a runtime parameter within the input.
payload = {"inputs": prompt,  "parameters": {"max_new_tokens":256, "details": True}} 

finish_reason = "length"
# Print initial output 
print(f"Output: {payload['inputs']}", end='')  
total_tokens = 0
total_requests = 0
while finish_reason == 'length':
    # Call inference and get extracts
    output_text, finish_reason, out_token_len = inference(payload)
    # Update payload for next request
    payload['inputs'] = output_text 
    total_tokens += out_token_len
    total_requests += 1
# Print metrics
print(f"nntotal tokens generated: {total_tokens} ntotal requests sent: {total_requests}")

Như chúng ta có thể thấy, mặc dù max_new_token tham số được đặt thành 256, chúng tôi sử dụng thuộc tính chi tiết finish_reason như một phần của đầu ra để xâu chuỗi nhiều yêu cầu đến điểm cuối cho đến khi toàn bộ đầu ra được tạo.

Tăng hiệu suất suy luận cho các mô hình Mixtral và Llama 2 với bộ chứa Amazon SageMaker mới | Dịch vụ web của Amazon PlatoThông minh dữ liệu Blockchain. Tìm kiếm dọc. Ái.

Tương tự, dựa trên trường hợp sử dụng của bạn, bạn có thể sử dụng stop_reason để phát hiện độ dài chuỗi đầu ra không đủ được chỉ định cho một nhiệm vụ nhất định hoặc sự hoàn thành ngoài ý muốn do trình tự dừng của con người.

Kết luận

Trong bài đăng này, chúng ta đã tìm hiểu về bản phát hành v0.26.0 của bộ chứa AWS LMI. Chúng tôi đã nêu bật những cải tiến quan trọng về hiệu suất, hỗ trợ mô hình mới và các tính năng hữu dụng mới. Với những khả năng này, bạn có thể cân bằng tốt hơn các đặc điểm chi phí và hiệu suất, đồng thời cung cấp trải nghiệm tốt hơn cho người dùng cuối của mình.

Để tìm hiểu thêm về các khả năng của LMI DLC, hãy tham khảo Mô hình song song và suy luận mô hình lớn. Chúng tôi rất vui được biết cách bạn sử dụng những khả năng mới này từ SageMaker.


Giới thiệu về tác giả

Tăng hiệu suất suy luận cho các mô hình Mixtral và Llama 2 với bộ chứa Amazon SageMaker mới | Dịch vụ web của Amazon PlatoThông minh dữ liệu Blockchain. Tìm kiếm dọc. Ái.João Moura là Kiến trúc sư giải pháp chuyên gia AI/ML cấp cao tại AWS. João giúp khách hàng của AWS – từ các công ty khởi nghiệp nhỏ đến doanh nghiệp lớn – đào tạo và triển khai các mô hình lớn một cách hiệu quả, đồng thời xây dựng nền tảng ML trên AWS một cách rộng rãi hơn.

Tăng hiệu suất suy luận cho các mô hình Mixtral và Llama 2 với bộ chứa Amazon SageMaker mới | Dịch vụ web của Amazon PlatoThông minh dữ liệu Blockchain. Tìm kiếm dọc. Ái.La Mã là Kiến trúc sư giải pháp cấp cao tại AWS, giúp khách hàng AWS thiết kế và xây dựng các giải pháp AI/ML. Trước khi gia nhập AWS, Rahul đã có nhiều năm làm việc trong lĩnh vực tài chính và bảo hiểm, giúp khách hàng xây dựng nền tảng dữ liệu và phân tích.

Tăng hiệu suất suy luận cho các mô hình Mixtral và Llama 2 với bộ chứa Amazon SageMaker mới | Dịch vụ web của Amazon PlatoThông minh dữ liệu Blockchain. Tìm kiếm dọc. Ái.Thanh Lan là Kỹ sư phát triển phần mềm trong AWS. Anh ấy đã làm việc trên một số sản phẩm đầy thử thách ở Amazon, bao gồm các giải pháp suy luận ML hiệu suất cao và hệ thống ghi nhật ký hiệu suất cao. Nhóm của Qing đã khởi chạy thành công mô hình Tỷ tham số đầu tiên trong Quảng cáo Amazon với độ trễ yêu cầu rất thấp. Qing có kiến ​​thức chuyên sâu về tối ưu hóa cơ sở hạ tầng và tăng tốc Deep Learning.

Tăng hiệu suất suy luận cho các mô hình Mixtral và Llama 2 với bộ chứa Amazon SageMaker mới | Dịch vụ web của Amazon PlatoThông minh dữ liệu Blockchain. Tìm kiếm dọc. Ái.Kiến Sinh là Kỹ sư phát triển phần mềm tại Amazon Web Services, người đã từng làm việc trên một số khía cạnh chính của hệ thống máy học. Anh là người đóng góp chính cho dịch vụ SageMaker Neo, tập trung vào việc biên dịch deep learning và tối ưu hóa thời gian chạy khung. Gần đây, anh đã nỗ lực định hướng và góp phần tối ưu hóa hệ thống machine learning cho suy luận mô hình lớn.

Tăng hiệu suất suy luận cho các mô hình Mixtral và Llama 2 với bộ chứa Amazon SageMaker mới | Dịch vụ web của Amazon PlatoThông minh dữ liệu Blockchain. Tìm kiếm dọc. Ái.Tyler Osterberg là Kỹ sư phát triển phần mềm tại AWS. Anh ấy chuyên tạo ra các trải nghiệm suy luận máy học hiệu suất cao trong SageMaker. Gần đây, trọng tâm của anh là tối ưu hóa hiệu suất của Inferentia Deep Learning Containers trên nền tảng SageMaker. Tyler xuất sắc trong việc triển khai các giải pháp lưu trữ hiệu suất cho các mô hình ngôn ngữ lớn và nâng cao trải nghiệm người dùng bằng công nghệ tiên tiến.

Tăng hiệu suất suy luận cho các mô hình Mixtral và Llama 2 với bộ chứa Amazon SageMaker mới | Dịch vụ web của Amazon PlatoThông minh dữ liệu Blockchain. Tìm kiếm dọc. Ái.Rupinder Grewal là Kiến trúc sư giải pháp chuyên gia AI/ML cấp cao của AWS. Anh hiện tập trung vào việc phân phát các mô hình và MLOps trên Amazon SageMaker. Trước khi đảm nhận vai trò này, anh từng là Kỹ sư máy học xây dựng và lưu trữ các mô hình. Ngoài công việc, anh thích chơi quần vợt và đạp xe trên những con đường mòn trên núi.

Dhawal PatelDhawal Patel là một Kiến trúc sư chính về Học máy tại AWS. Ông đã làm việc với các tổ chức khác nhau, từ các doanh nghiệp lớn đến các công ty khởi nghiệp quy mô trung bình về các vấn đề liên quan đến máy tính phân tán và Trí tuệ nhân tạo. Ông tập trung vào Học sâu bao gồm các lĩnh vực NLP và Thị giác máy tính. Anh ấy giúp khách hàng đạt được khả năng suy luận mô hình hiệu suất cao trên SageMaker.

Tăng hiệu suất suy luận cho các mô hình Mixtral và Llama 2 với bộ chứa Amazon SageMaker mới | Dịch vụ web của Amazon PlatoThông minh dữ liệu Blockchain. Tìm kiếm dọc. Ái.Raghu Ramesha là Kiến trúc sư giải pháp ML cao cấp của nhóm Dịch vụ SageMaker của Amazon. Anh tập trung vào việc giúp khách hàng xây dựng, triển khai và di chuyển khối lượng công việc sản xuất ML sang SageMaker trên quy mô lớn. Anh ấy chuyên về lĩnh vực học máy, AI và thị giác máy tính, đồng thời có bằng thạc sĩ về Khoa học Máy tính của UT Dallas. Khi rảnh rỗi, anh thích đi du lịch và chụp ảnh.

Dấu thời gian:

Thêm từ Học máy AWS