Khi triển khai các mô hình Deep Learning trên quy mô lớn, điều quan trọng là phải sử dụng hiệu quả phần cứng cơ bản để tối đa hóa lợi ích về hiệu suất và chi phí. Đối với khối lượng công việc sản xuất yêu cầu thông lượng cao và độ trễ thấp, việc lựa chọn Đám mây điện toán đàn hồi Amazon (EC2), ngăn xếp phục vụ mô hình và kiến trúc triển khai là rất quan trọng. Kiến trúc không hiệu quả có thể dẫn đến việc sử dụng máy gia tốc dưới mức tối ưu và chi phí sản xuất cao không cần thiết.
Trong bài đăng này, chúng tôi sẽ hướng dẫn bạn quy trình triển khai máy chủ mô hình FastAPI trên thiết bị AWS Inferentia (có trên Amazon EC2 thông tin1 và Amazon EC thông tin2 trường hợp). Chúng tôi cũng chứng minh việc lưu trữ một mô hình mẫu được triển khai song song trên tất cả các Lõi thần kinh để sử dụng phần cứng tối đa.
Tổng quan về giải pháp
FastAPI là một khung web nguồn mở để phục vụ các ứng dụng Python nhanh hơn nhiều so với các khung truyền thống như Flask và Django. Nó sử dụng một Giao diện cổng máy chủ không đồng bộ (ASGI) thay vì được sử dụng rộng rãi Giao diện cổng máy chủ web (WSGI). ASGI xử lý các yêu cầu đến một cách không đồng bộ trái ngược với WSGI xử lý các yêu cầu theo trình tự. Điều này làm cho FastAPI trở thành lựa chọn lý tưởng để xử lý các yêu cầu nhạy cảm về độ trễ. Bạn có thể sử dụng FastAPI để triển khai máy chủ lưu trữ điểm cuối trên phiên bản Inferentia (Inf1/Inf2) lắng nghe yêu cầu của máy khách thông qua một cổng được chỉ định.
Mục tiêu của chúng tôi là đạt được hiệu suất cao nhất với chi phí thấp nhất thông qua việc sử dụng tối đa phần cứng. Điều này cho phép chúng tôi xử lý nhiều yêu cầu suy luận hơn với ít bộ tăng tốc hơn. Mỗi thiết bị AWS Inferentia1 chứa bốn NeuronCores-v1 và mỗi thiết bị AWS Inferentia2 chứa hai NeuronCores-v2. Các Tế bào thần kinh AWS SDK cho phép chúng tôi sử dụng song song từng Lõi thần kinh, điều này cho phép chúng tôi kiểm soát nhiều hơn trong việc tải và suy luận song song bốn mô hình trở lên mà không làm giảm thông lượng.
Với FastAPI, bạn có thể chọn máy chủ web Python (bắp súng, uvicorn, siêu ngô, Cây khoa thụy hương). Các máy chủ web này cung cấp và lớp trừu tượng ở trên cùng của mô hình Học máy (ML) cơ bản. Máy khách yêu cầu có lợi ích là không biết gì về mô hình được lưu trữ. Máy khách không cần biết tên hoặc phiên bản của mô hình đã được triển khai trong máy chủ; tên điểm cuối bây giờ chỉ là một proxy cho một chức năng tải và chạy mô hình. Ngược lại, trong một công cụ cung cấp dành riêng cho khung, chẳng hạn như Cung cấp TensorFlow, tên và phiên bản của mô hình là một phần của tên điểm cuối. Nếu mô hình thay đổi ở phía máy chủ, thì máy khách phải biết và thay đổi lệnh gọi API của nó thành điểm cuối mới tương ứng. Do đó, nếu bạn liên tục phát triển các mô hình phiên bản, chẳng hạn như trong trường hợp thử nghiệm A/B, thì việc sử dụng máy chủ web Python chung với FastAPI là một cách thuận tiện để cung cấp các mô hình, vì tên điểm cuối là tĩnh.
Vai trò của máy chủ ASGI là tạo ra một số lượng công nhân cụ thể để lắng nghe các yêu cầu của máy khách và chạy mã suy luận. Một khả năng quan trọng của máy chủ là đảm bảo số lượng công nhân được yêu cầu luôn sẵn sàng và hoạt động. Trong trường hợp một công nhân bị giết, máy chủ phải khởi chạy một công nhân mới. Trong bối cảnh này, máy chủ và công nhân có thể được xác định bằng ID tiến trình Unix (PID) của chúng. Đối với bài đăng này, chúng tôi sử dụng một siêu ngô server, một lựa chọn phổ biến cho các máy chủ web Python.
Trong bài đăng này, chúng tôi chia sẻ các phương pháp hay nhất để triển khai các mô hình deep learning với FastAPI trên AWS Inferentia NeuronCores. Chúng tôi cho thấy rằng bạn có thể triển khai nhiều mô hình trên các Lõi thần kinh riêng biệt có thể được gọi đồng thời. Thiết lập này tăng thông lượng vì nhiều mô hình có thể được suy luận đồng thời và việc sử dụng NeuronCore được tối ưu hóa hoàn toàn. Mã này có thể được tìm thấy trên Repo GitHub. Hình dưới đây cho thấy kiến trúc về cách thiết lập giải pháp trên phiên bản EC2 Inf2.
Kiến trúc tương tự áp dụng cho loại phiên bản EC2 Inf1 ngoại trừ loại phiên bản này có bốn lõi. Vì vậy, điều đó thay đổi sơ đồ kiến trúc một chút.
Lõi thần kinh AWS Inferentia
Hãy tìm hiểu sâu hơn một chút về các công cụ do AWS Neuron cung cấp để tương tác với các NeuronCore. Các bảng sau đây cho biết số lượng Lõi thần kinh trong mỗi loại phiên bản Inf1 và Inf2. Các vCPU máy chủ và bộ nhớ hệ thống được chia sẻ trên tất cả các Lõi thần kinh có sẵn.
Kích thước phiên bản | # Máy gia tốc Suy luận | # NeuronCores-v1 | vCPU | Bộ nhớ (GiB) |
Inf1.xlarge | 1 | 4 | 4 | 8 |
Inf1.2xlarge | 1 | 4 | 8 | 16 |
Inf1.6xlarge | 4 | 16 | 24 | 48 |
Inf1.24xlarge | 16 | 64 | 96 | 192 |
Kích thước phiên bản | # Máy gia tốc Suy luận | # NeuronCores-v2 | vCPU | Bộ nhớ (GiB) |
Inf2.xlarge | 1 | 2 | 4 | 32 |
Inf2.8xlarge | 1 | 2 | 32 | 32 |
Inf2.24xlarge | 6 | 12 | 96 | 192 |
Inf2.48xlarge | 12 | 24 | 192 | 384 |
Các phiên bản Inf2 chứa NeuronCores-v2 mới so với NeuronCore-v1 trong các phiên bản Inf1. Mặc dù ít lõi hơn, nhưng chúng có thể cung cấp thông lượng cao hơn gấp 4 lần và độ trễ thấp hơn 10 lần so với phiên bản Inf1. Các phiên bản Inf2 là lựa chọn lý tưởng cho các khối lượng công việc Học sâu như Trí tuệ nhân tạo Sáng tạo, Mô hình Ngôn ngữ Lớn (LLM) trong dòng OPT/GPT và các biến đổi tầm nhìn như Khuếch tán Ổn định.
Neuron Runtime chịu trách nhiệm chạy các mô hình trên các thiết bị Neuron. Neuron Runtime xác định NeuronCore sẽ chạy mô hình nào và chạy như thế nào. Cấu hình của Neuron Runtime được kiểm soát thông qua việc sử dụng biến môi trường ở cấp độ quy trình. Theo mặc định, các tiện ích mở rộng khung Neuron sẽ thay mặt người dùng đảm nhiệm cấu hình Thời gian chạy Neuron; tuy nhiên, các cấu hình rõ ràng cũng có thể đạt được hành vi tối ưu hơn.
Hai biến môi trường phổ biến là NEURON_RT_NUM_CORES
và NEURON_RT_VISIBLE_CORES
. Với các biến môi trường này, các quy trình Python có thể được liên kết với một NeuronCore. Với NEURON_RT_NUM_CORES
, một số lõi cụ thể có thể được dành riêng cho một quy trình và với NEURON_RT_VISIBLE_CORES
, một loạt các Lõi thần kinh có thể được đặt trước. Ví dụ, NEURON_RT_NUM_CORES=2 myapp.py
sẽ dự trữ hai lõi và NEURON_RT_VISIBLE_CORES=’0-2’ myapp.py
sẽ dự trữ không, một và hai lõi cho myapp.py
. Bạn cũng có thể đặt trước các Lõi thần kinh trên các thiết bị (chip AWS Inferentia). Vì thế, NEURON_RT_VISIBLE_CORES=’0-5’ myapp.py
sẽ dự trữ bốn lõi đầu tiên trên device1
và một lõi trên device2
trong loại phiên bản Ec2 Inf1. Tương tự, trên loại phiên bản EC2 Inf2, cấu hình này sẽ dự trữ hai lõi trên device1
và device2
và một lõi trên device3
. Bảng dưới đây tóm tắt cấu hình của các biến này.
Họ tên | Mô tả | Kiểu | Các giá trị dự kiến | Giá trị mặc định | Phiên bản RT |
NEURON_RT_VISIBLE_CORES |
Phạm vi của các Lõi thần kinh cụ thể cần thiết cho quy trình | Phạm vi số nguyên (như 1-3) | Bất kỳ giá trị hoặc phạm vi nào từ 0 đến Max NeuronCore trong hệ thống | Không áp dụng | 2.0 + |
NEURON_RT_NUM_CORES |
Số lượng NeuronCores mà quy trình yêu cầu | Số nguyên | Một giá trị từ 1 đến Max NeuronCore trong hệ thống | 0, được hiểu là “tất cả” | 2.0 + |
Để biết danh sách tất cả các biến môi trường, hãy tham khảo Cấu hình thời gian chạy nơ-ron.
Theo mặc định, khi tải các mô hình, các mô hình sẽ được tải vào NeuronCore 0 và sau đó là NeuronCore 1 trừ khi các biến môi trường trước đó được chỉ định rõ ràng. Như đã chỉ định trước đó, các NeuronCore chia sẻ các vCPU máy chủ có sẵn và bộ nhớ hệ thống. Do đó, các mô hình được triển khai trên mỗi NeuronCore sẽ cạnh tranh để giành lấy các tài nguyên có sẵn. Điều này sẽ không thành vấn đề nếu mô hình đang sử dụng các Lõi thần kinh ở mức độ lớn. Nhưng nếu một mô hình chỉ chạy một phần trên NeuronCore và phần còn lại trên vCPU máy chủ thì việc xem xét tính khả dụng của CPU trên mỗi NeuronCore trở nên quan trọng. Điều này cũng ảnh hưởng đến việc lựa chọn ví dụ.
Bảng sau đây hiển thị số lượng vCPU máy chủ và bộ nhớ hệ thống khả dụng trên mỗi mô hình nếu một mô hình được triển khai cho từng NeuronCore. Tùy thuộc vào mức sử dụng NeuronCore, vCPU và mức sử dụng bộ nhớ của ứng dụng, bạn nên chạy thử nghiệm để tìm ra cấu hình nào hoạt động hiệu quả nhất cho ứng dụng của mình. Các Công cụ thần kinh hàng đầu có thể giúp trực quan hóa việc sử dụng lõi và sử dụng bộ nhớ máy chủ và thiết bị. Dựa trên các số liệu này, một quyết định sáng suốt có thể được đưa ra. Chúng tôi chứng minh việc sử dụng Neuron Top ở cuối blog này.
Kích thước phiên bản | # Máy gia tốc Suy luận | # Người mẫu | vCPU/Mô hình | Bộ nhớ/Mô hình (GiB) |
Inf1.xlarge | 1 | 4 | 1 | 2 |
Inf1.2xlarge | 1 | 4 | 2 | 4 |
Inf1.6xlarge | 4 | 16 | 1.5 | 3 |
Inf1.24xlarge | 16 | 64 | 1.5 | 3 |
Kích thước phiên bản | # Máy gia tốc Suy luận | # Người mẫu | vCPU/Mô hình | Bộ nhớ/Mô hình (GiB) |
Inf2.xlarge | 1 | 2 | 2 | 8 |
Inf2.8xlarge | 1 | 2 | 16 | 64 |
Inf2.24xlarge | 6 | 12 | 8 | 32 |
Inf2.48xlarge | 12 | 24 | 8 | 32 |
Để tự mình kiểm tra các tính năng của SDK Neuron, hãy xem phần mới nhất Khả năng nơ-ron cho PyTorch.
Thiết lập hệ thống
Sau đây là thiết lập hệ thống được sử dụng cho giải pháp này:
Thiết lập giải pháp
Có một vài điều chúng ta cần làm để thiết lập giải pháp. Bắt đầu bằng cách tạo một vai trò IAM mà phiên bản EC2 của bạn sẽ đảm nhận vai trò đó sẽ cho phép nó đẩy và kéo từ Đăng ký container đàn hồi Amazon.
Bước 1: Thiết lập vai trò IAM
- Bắt đầu bằng cách đăng nhập vào bảng điều khiển và truy cập IAM > Vai trò > Tạo vai trò
- Chọn loại thực thể đáng tin cậy
AWS Service
- Chọn EC2 làm dịch vụ trong trường hợp sử dụng
- Nhấp chuột Sau và bạn sẽ có thể xem tất cả các chính sách có sẵn
- Với mục đích của giải pháp này, chúng tôi sẽ cấp cho phiên bản EC2 toàn quyền truy cập vào ECR. Lọc cho AmazonEC2ContainerRegistryTruy cập đầy đủ và chọn nó.
- Nhấn tiếp theo và đặt tên cho vai trò
inf-ecr-access
Lưu ý: chính sách chúng tôi đính kèm cấp cho phiên bản EC2 toàn quyền truy cập vào Amazon ECR. Chúng tôi thực sự khuyên bạn nên làm theo hiệu trưởng của đặc quyền tối thiểu cho khối lượng công việc sản xuất.
Bước 2: Thiết lập AWS CLI
Nếu bạn đang sử dụng AMI Deep Learning theo quy định được liệt kê ở trên, thì AMI đó đã được cài đặt AWS CLI. Nếu bạn đang sử dụng một AMI khác (Amazon Linux 2023, Base Ubuntu, v.v.), hãy cài đặt các công cụ CLI bằng cách làm theo hướng dẫn này.
Khi bạn đã cài đặt các công cụ CLI, hãy định cấu hình CLI bằng lệnh aws configure
. Nếu có khóa truy cập, bạn có thể thêm chúng vào đây nhưng không nhất thiết phải cần đến chúng để tương tác với các dịch vụ AWS. Chúng tôi đang dựa vào vai trò IAM để làm điều đó.
Chú thích: Chúng ta cần nhập ít nhất một giá trị (vùng mặc định hoặc định dạng mặc định) để tạo cấu hình mặc định. Đối với ví dụ này, chúng tôi sẽ đi với us-east-2
như khu vực và json
làm đầu ra mặc định.
Sao chép kho lưu trữ Github
Sản phẩm Repo GitHub cung cấp tất cả các tập lệnh cần thiết để triển khai các mô hình bằng FastAPI trên NeuronCores trên các phiên bản AWS Inferentia. Ví dụ này sử dụng bộ chứa Docker để đảm bảo chúng tôi có thể tạo các giải pháp có thể tái sử dụng. Bao gồm trong ví dụ này là như sau config.properties tệp để người dùng cung cấp đầu vào.
Tệp cấu hình cần tiền tố tên do người dùng xác định cho hình ảnh Docker và bộ chứa Docker. Các build.sh
kịch bản trong fastapi
và trace-model
các thư mục sử dụng điều này để tạo hình ảnh Docker.
Biên dịch mô hình trên AWS Inferentia
Chúng tôi sẽ bắt đầu với việc theo dõi mô hình và tạo tệp .pt PyTorch Torchscript. Bắt đầu bằng cách truy cập trace-model
thư mục và sửa đổi tệp .env. Tùy thuộc vào loại phiên bản bạn đã chọn, hãy sửa đổi CHIP_TYPE
trong .env
tài liệu. Ví dụ, chúng tôi sẽ chọn Inf2 làm hướng dẫn. Các bước tương tự áp dụng cho quá trình triển khai cho Inf1.
Tiếp theo đặt vùng mặc định trong cùng một tệp. Vùng này sẽ được sử dụng để tạo kho lưu trữ ECR và hình ảnh Docker sẽ được đẩy vào kho lưu trữ này. Cũng trong thư mục này, chúng tôi cung cấp tất cả các tập lệnh cần thiết để theo dõi một bert-base-uncased
mô hình trên AWS Inferentia. Kịch bản này có thể được sử dụng cho hầu hết các mô hình có sẵn trên Ôm mặt. Các Dockerfile có tất cả các phụ thuộc để chạy các mô hình với Neuron và chạy theo dõi-model.py mã làm điểm vào.
Giải thích quá trình biên dịch nơ-ron
API của Neuron SDK gần giống với API Python của PyTorch. Các torch.jit.trace()
từ PyTorch lấy mô hình và tenxơ đầu vào mẫu làm đối số. Các đầu vào mẫu được đưa vào mô hình và các hoạt động được gọi khi đầu vào đó đi qua các lớp của mô hình được ghi lại dưới dạng TorchScript. Để tìm hiểu thêm về Truy tìm JIT trong PyTorch, hãy tham khảo phần sau tài liệu hướng dẫn.
Giống như torch.jit.trace()
, bạn có thể kiểm tra xem liệu mô hình của mình có thể được biên dịch trên AWS Inferentia hay không bằng mã sau đây cho các phiên bản inf1.
Đối với inf2, thư viện được gọi là torch_neuronx
. Đây là cách bạn có thể kiểm tra quá trình biên dịch mô hình của mình với các phiên bản inf2.
Sau khi tạo cá thể theo dõi, chúng ta có thể chuyển đầu vào tensor ví dụ như sau:
Và cuối cùng lưu đầu ra TorchScript kết quả trên đĩa cục bộ
Như được hiển thị trong đoạn mã trước, bạn có thể sử dụng compiler_args
và optimizations
để tối ưu hóa việc triển khai. Để biết danh sách chi tiết các đối số cho torch.neuron.trace
API, tham khảo API python theo dõi PyTorch-Neuron.
Hãy ghi nhớ những điểm quan trọng sau:
- SDK Neuron không hỗ trợ các hình dạng tenxơ động khi viết bài này. Do đó, một mô hình sẽ phải được biên dịch riêng cho các hình dạng đầu vào khác nhau. Để biết thêm thông tin về cách chạy suy luận trên các hình dạng đầu vào có thể thay đổi với tính năng xô, hãy tham khảo Chạy suy luận trên các hình dạng đầu vào biến đổi với xô.
- Nếu bạn gặp sự cố hết bộ nhớ khi biên dịch mô hình, hãy thử biên dịch mô hình trên phiên bản AWS Inferentia có nhiều vCPU hoặc bộ nhớ hơn hoặc thậm chí là phiên bản c6i hoặc r6i lớn vì quá trình biên dịch chỉ sử dụng CPU. Sau khi được biên dịch, mô hình theo dõi có thể chạy trên các kích thước phiên bản AWS Inferentia nhỏ hơn.
Thuyết minh quy trình xây dựng
Bây giờ chúng tôi sẽ xây dựng vùng chứa này bằng cách chạy xây dựng.sh. Tệp tập lệnh xây dựng chỉ cần tạo hình ảnh Docker bằng cách kéo Hình ảnh vùng chứa Deep Learning cơ sở và cài đặt HuggingFace transformers
bưu kiện. Dựa vào CHIP_TYPE
được chỉ định trong .env
tập tin docker.properties
tập tin quyết định phù hợp BASE_IMAGE
. Điều này BASE_IMAGE
trỏ đến Hình ảnh bộ chứa Deep Learning dành cho Thời gian chạy nơ-ron do AWS cung cấp.
Nó có sẵn thông qua kho lưu trữ ECR riêng. Trước khi có thể kéo hình ảnh, chúng tôi cần đăng nhập và nhận thông tin xác thực AWS tạm thời.
Chú thích: chúng ta cần thay thế vùng được liệt kê trong lệnh được chỉ định bởi cờ vùng và trong URI kho lưu trữ bằng vùng chúng ta đặt trong .NS tập tin.
Với mục đích làm cho quá trình này dễ dàng hơn, chúng ta có thể sử dụng fetch-credentials.sh
tài liệu. Vùng này sẽ tự động được lấy từ tệp .env.
Tiếp theo, chúng tôi sẽ đẩy hình ảnh bằng tập lệnh đẩy.sh. Tập lệnh đẩy tạo một kho lưu trữ trong Amazon ECR cho bạn và đẩy hình ảnh bộ chứa.
Cuối cùng, khi hình ảnh được tạo và đẩy, chúng ta có thể chạy nó dưới dạng vùng chứa bằng cách chạy chạy.sh và nhật ký chạy đuôi với nhật ký.sh. Trong nhật ký trình biên dịch (xem ảnh chụp màn hình sau), bạn sẽ thấy tỷ lệ phần trăm các toán tử số học được biên dịch trên Neuron và tỷ lệ biểu đồ con mô hình được biên dịch thành công trên Neuron. Ảnh chụp màn hình hiển thị nhật ký trình biên dịch cho bert-base-uncased-squad2
người mẫu. Nhật ký cho thấy 95.64% toán tử số học đã được biên dịch và nó cũng đưa ra danh sách các toán tử được biên dịch trên Neuron và những toán tử không được hỗ trợ.
Đây là một danh sách của tất cả các toán tử được hỗ trợ trong gói PyTorch Neuron mới nhất. Tương tự, đây là danh sách của tất cả các toán tử được hỗ trợ trong gói PyTorch Neuronx mới nhất.
Triển khai các mô hình với FastAPI
Sau khi các mô hình được biên soạn, mô hình theo dõi sẽ có mặt trong trace-model
thư mục. Trong ví dụ này, chúng tôi đã đặt mô hình được theo dõi cho kích thước lô là 1. Chúng tôi xem xét kích thước lô là 1 ở đây để tính đến những trường hợp sử dụng mà kích thước lô cao hơn là không khả thi hoặc không bắt buộc. Đối với các trường hợp sử dụng cần kích thước lô cao hơn, ngọn đuốc.neuron.DataParallel (đối với Inf1) hoặc ngọn đuốc.neuronx.DataParallel (đối với Inf2) API cũng có thể hữu ích.
Sản phẩm api nhanh thư mục cung cấp tất cả các tập lệnh cần thiết để triển khai các mô hình với FastAPI. Để triển khai các mô hình mà không có bất kỳ thay đổi nào, chỉ cần chạy triển khai.sh tập lệnh và nó sẽ xây dựng hình ảnh bộ chứa FastAPI, chạy các bộ chứa trên số lượng lõi đã chỉ định và triển khai số lượng mô hình được chỉ định trên mỗi máy chủ trong mỗi máy chủ mô hình FastAPI. Thư mục này cũng chứa một .env
tập tin, sửa đổi nó để phản ánh đúng CHIP_TYPE
và AWS_DEFAULT_REGION
.
Chú thích: Tập lệnh FastAPI dựa trên cùng một biến môi trường được sử dụng để tạo, đẩy và chạy hình ảnh dưới dạng vùng chứa. Tập lệnh triển khai FastAPI sẽ sử dụng các giá trị đã biết cuối cùng từ các biến này. Vì vậy, nếu lần cuối cùng bạn truy tìm mô hình cho loại phiên bản Inf1, thì mô hình đó sẽ được triển khai thông qua các tập lệnh này.
Sản phẩm fastapi-server.py tệp chịu trách nhiệm lưu trữ máy chủ và gửi yêu cầu đến mô hình thực hiện như sau:
- Đọc số lượng mô hình trên mỗi máy chủ và vị trí của mô hình đã biên dịch từ tệp thuộc tính
- Đặt các Lõi thần kinh có thể nhìn thấy làm các biến môi trường cho bộ chứa Docker và đọc các biến môi trường để chỉ định các Lõi thần kinh nào sẽ sử dụng
- Cung cấp API suy luận cho
bert-base-uncased-squad2
kiểu mẫu - Với
jit.load()
, tải số lượng mô hình trên mỗi máy chủ như được chỉ định trong cấu hình và lưu trữ các mô hình cũng như mã thông báo được yêu cầu trong từ điển toàn cầu
Với thiết lập này, sẽ tương đối dễ dàng để thiết lập các API liệt kê những mô hình nào và số lượng mô hình được lưu trữ trong mỗi NeuronCore. Tương tự, các API có thể được viết để xóa các mô hình khỏi các NeuronCore cụ thể.
Sản phẩm Dockerfile để xây dựng bộ chứa FastAPI được xây dựng trên hình ảnh Docker mà chúng tôi đã tạo để theo dõi các mô hình. Đây là lý do tại sao docker.properties tệp chỉ định đường dẫn ECR đến hình ảnh Docker để theo dõi các mô hình. Trong quá trình thiết lập của chúng tôi, các bộ chứa Docker trên tất cả các NeuronCore đều giống nhau, vì vậy chúng tôi có thể tạo một hình ảnh và chạy nhiều bộ chứa từ một hình ảnh. Để tránh bất kỳ lỗi điểm vào nào, chúng tôi chỉ định ENTRYPOINT ["/usr/bin/env"]
trong Dockerfile trước khi chạy startup.sh
kịch bản, trông giống như hypercorn fastapi-server:app -b 0.0.0.0:8080
. Tập lệnh khởi động này giống nhau đối với tất cả các vùng chứa. Nếu bạn đang sử dụng cùng một hình ảnh cơ sở như đối với các mô hình theo dõi, thì bạn có thể xây dựng bộ chứa này bằng cách chỉ cần chạy tập lệnh build.sh. Các push.sh
kịch bản vẫn giống như trước đây cho các mô hình truy tìm. Hình ảnh Docker đã sửa đổi và tên bộ chứa được cung cấp bởi docker.properties
tập tin.
Sản phẩm run.sh file
thực hiện như sau:
- Đọc hình ảnh Docker và tên vùng chứa từ tài sản tập tin, lần lượt đọc
config.properties
tập tin, trong đó có mộtnum_cores
thiết lập người dùng - Bắt đầu một vòng lặp từ 0 đến
num_cores
và cho mỗi lõi:- Đặt số cổng và số thiết bị
- Đặt
NEURON_RT_VISIBLE_CORES
biến môi trường - Chỉ định giá treo âm lượng
- Chạy một Docker container
Để rõ ràng, lệnh chạy Docker để triển khai trong NeuronCore 0 cho Inf1 sẽ giống như đoạn mã sau:
Lệnh chạy để triển khai trong NeuronCore 5 sẽ giống như đoạn mã sau:
Sau khi các container được triển khai, chúng tôi sử dụng run_apis.py tập lệnh gọi các API theo luồng song song. Mã này được thiết lập để gọi sáu mô hình được triển khai, một mô hình trên mỗi NeuronCore, nhưng có thể dễ dàng thay đổi thành một cài đặt khác. Chúng tôi gọi các API từ phía máy khách như sau:
Giám sát NeuronCore
Sau khi các máy chủ mô hình được triển khai, để giám sát việc sử dụng NeuronCore, chúng tôi có thể sử dụng neuron-top
để quan sát trong thời gian thực tỷ lệ phần trăm sử dụng của từng NeuronCore. đầu nơ ron là một công cụ CLI trong SDK Neuron để cung cấp thông tin như NeuronCore, vCPU và mức sử dụng bộ nhớ. Trong một thiết bị đầu cuối riêng biệt, nhập lệnh sau:
Đầu ra của bạn sẽ tương tự như hình dưới đây. Trong trường hợp này, chúng tôi đã chỉ định sử dụng hai Lõi thần kinh và hai mô hình cho mỗi máy chủ trên một phiên bản Inf2.xlarge. Ảnh chụp màn hình sau đây cho thấy hai mô hình có kích thước 287.8 MB, mỗi mô hình được tải trên hai Lõi thần kinh. Với tổng cộng 4 kiểu máy được nạp, bạn có thể thấy bộ nhớ máy đã sử dụng là 1.3 GB. Sử dụng các phím mũi tên để di chuyển giữa các NeuronCore trên các thiết bị khác nhau
Tương tự, trên loại phiên bản Inf1.16xlarge, chúng tôi thấy có tổng cộng 12 kiểu máy (2 kiểu máy trên mỗi lõi trên 6 lõi) được tải. Tổng bộ nhớ là 2.1 GB được sử dụng và mỗi kiểu máy có kích thước 177.2 MB.
Sau khi bạn chạy run_apis.py tập lệnh, bạn có thể thấy tỷ lệ phần trăm sử dụng của từng trong số sáu Lõi thần kinh (xem ảnh chụp màn hình sau). Bạn cũng có thể xem mức sử dụng vCPU hệ thống và mức sử dụng vCPU thời gian chạy.
Ảnh chụp màn hình sau đây cho thấy tỷ lệ phần trăm mức sử dụng lõi của phiên bản Inf2.
Tương tự, ảnh chụp màn hình này cho thấy mức sử dụng lõi trong loại phiên bản inf1.6xlarge.
Làm sạch
Để dọn sạch tất cả các bộ chứa Docker mà bạn đã tạo, chúng tôi cung cấp một dọn dẹp.sh tập lệnh xóa tất cả các vùng chứa đang chạy và đã dừng. Tập lệnh này sẽ xóa tất cả các vùng chứa, vì vậy đừng sử dụng tập lệnh này nếu bạn muốn tiếp tục chạy một số vùng chứa.
Kết luận
Khối lượng công việc sản xuất thường có thông lượng cao, độ trễ thấp và yêu cầu về chi phí. Các kiến trúc không hiệu quả sử dụng dưới mức tối ưu máy gia tốc có thể dẫn đến chi phí sản xuất cao không cần thiết. Trong bài đăng này, chúng tôi đã chỉ ra cách sử dụng tối ưu NeuronCores với FastAPI để tối đa hóa thông lượng với độ trễ tối thiểu. Chúng tôi đã xuất bản các hướng dẫn trên Repo GitHub. Với kiến trúc giải pháp này, bạn có thể triển khai nhiều mô hình trong mỗi NeuronCore và vận hành song song nhiều mô hình trên các NeuronCore khác nhau mà không làm giảm hiệu suất. Để biết thêm thông tin về cách triển khai các mô hình ở quy mô lớn với các dịch vụ như Dịch vụ Kubernetes đàn hồi của Amazon (Amazon EKS), tham khảo Phục vụ 3,000 mô hình deep learning trên Amazon EKS với AWS Inferentia với giá dưới 50 đô la một giờ.
Giới thiệu về tác giả
Ankur Srivastava là một Kiến trúc sư Giải pháp Sr. trong Nhóm ML Frameworks. Anh ấy tập trung vào việc giúp đỡ khách hàng bằng cách tự quản lý và đào tạo phân tán trên quy mô lớn trên AWS. Kinh nghiệm của anh ấy bao gồm bảo trì dự đoán công nghiệp, cặp song sinh kỹ thuật số, tối ưu hóa thiết kế theo xác suất và đã hoàn thành nghiên cứu tiến sĩ từ Kỹ sư cơ khí tại Đại học Rice và nghiên cứu sau tiến sĩ tại Viện Công nghệ Massachusetts.
KC Tùng là Kiến trúc sư giải pháp cấp cao tại AWS Annapurna Labs. Anh ấy chuyên về đào tạo và triển khai mô hình deep learning quy mô lớn trên đám mây. Anh ấy có bằng tiến sĩ. trong sinh lý học phân tử từ Trung tâm Y tế Tây Nam Đại học Texas ở Dallas. Anh ấy đã phát biểu tại AWS Summits và AWS Reinvent. Hiện tại, anh ấy giúp khách hàng đào tạo và triển khai các mô hình PyTorch và TensorFlow lớn trên đám mây AWS. Ông là tác giả của hai cuốn sách: Tìm hiểu doanh nghiệp TensorFlow và Tài liệu tham khảo bỏ túi TensorFlow 2.
Pronoy Chopra là Kiến trúc sư giải pháp cấp cao của nhóm Startups Generative AI tại AWS. Ông chuyên thiết kế và phát triển các giải pháp IoT và Machine Learning. Trước đây, anh ấy đã đồng sáng lập hai công ty khởi nghiệp và rất thích được bắt tay vào thực hiện các dự án trong lĩnh vực IoT, AI/ML và Serverless.
- Phân phối nội dung và PR được hỗ trợ bởi SEO. Được khuếch đại ngay hôm nay.
- PlatoData.Network Vertical Generative Ai. Trao quyền cho chính mình. Truy cập Tại đây.
- PlatoAiStream. Thông minh Web3. Kiến thức khuếch đại. Truy cập Tại đây.
- Trung tâmESG. Ô tô / Xe điện, Than đá, công nghệ sạch, Năng lượng, Môi trường Hệ mặt trời, Quản lý chất thải. Truy cập Tại đây.
- BlockOffsets. Hiện đại hóa quyền sở hữu bù đắp môi trường. Truy cập Tại đây.
- nguồn: https://aws.amazon.com/blogs/machine-learning/optimize-aws-inferentia-utilization-with-fastapi-and-pytorch-models-on-amazon-ec2-inf1-inf2-instances/
- : có
- :là
- :không phải
- :Ở đâu
- $ LÊN
- 000
- 1
- 1.3
- 10
- 100
- 12
- 13
- 15%
- 2023
- 7
- 8
- 91
- a
- Có khả năng
- Giới thiệu
- ở trên
- sự trừu tượng
- máy gia tốc
- truy cập
- truy cập
- cho phù hợp
- Tài khoản
- Đạt được
- ngang qua
- hoạt động
- thêm vào
- chống lại
- AI
- AI / ML
- Tất cả
- cho phép
- cho phép
- Ngoài ra
- đàn bà gan dạ
- Amazon EC2
- Amazon Web Services
- an
- và
- bất kì
- api
- API
- ứng dụng
- Các Ứng Dụng
- các ứng dụng
- Đăng Nhập
- thích hợp
- kiến trúc
- LÀ
- đối số
- AS
- đảm đương
- At
- tác giả
- tự động
- sẵn có
- có sẵn
- tránh
- AWS
- Suy luận AWS
- cơ sở
- dựa
- BE
- bởi vì
- trở nên
- được
- trước
- thay mặt
- hành vi
- được
- hưởng lợi
- Lợi ích
- BEST
- thực hành tốt nhất
- giữa
- Lý sinh học
- Một chút
- Blog
- Sách
- xây dựng
- Xây dựng
- xây dựng
- nhưng
- by
- cuộc gọi
- gọi là
- Cuộc gọi
- CAN
- khả năng
- khả năng
- mà
- trường hợp
- trường hợp
- Trung tâm
- thay đổi
- thay đổi
- Những thay đổi
- kiểm tra
- Snacks
- sự lựa chọn
- Chọn
- chọn
- rõ ràng
- khách hàng
- chặt chẽ
- đám mây
- mã
- đến
- sự so sánh
- cạnh tranh
- Hoàn thành
- Tính
- Cấu hình
- Hãy xem xét
- xem xét
- An ủi
- tiêu thụ
- chứa
- Container
- Container
- chứa
- bối cảnh
- liên tục
- Ngược lại
- điều khiển
- kiểm soát
- Tiện lợi
- Trung tâm
- sửa chữa
- Phí Tổn
- Chi phí
- có thể
- Couple
- tạo
- tạo ra
- tạo ra
- Tạo
- Credentials
- quan trọng
- khách hàng
- Dallas
- quyết định
- sâu
- học kĩ càng
- sâu sắc hơn
- Mặc định
- chứng minh
- Tùy
- triển khai
- triển khai
- triển khai
- triển khai
- Thiết kế
- được chỉ định
- Mặc dù
- chi tiết
- xác định
- phát triển
- thiết bị
- Thiết bị (Devices)
- khác nhau
- Lôi thôi
- ĐÀO
- kỹ thuật số
- Cặp song sinh kỹ thuật số
- phân phối
- đào tạo phân tán
- Django
- do
- phu bến tàu
- làm
- Không
- miền
- dont
- năng động
- mỗi
- Sớm hơn
- dễ dàng hơn
- dễ dàng
- dễ dàng
- EC
- hiệu quả
- cuối
- Điểm cuối
- thuê
- Kỹ Sư
- đảm bảo
- đăng ký hạng mục thi
- thực thể
- nhập
- Môi trường
- lỗi
- vv
- Ngay cả
- Mỗi
- phát triển
- ví dụ
- Trừ
- kinh nghiệm
- mở rộng
- Đối mặt
- gia đình
- nhanh hơn
- khả thi
- Tính năng
- Fed
- ít hơn
- Hình
- Tập tin
- lọc
- Cuối cùng
- Tìm kiếm
- Tên
- tập trung
- tiếp theo
- sau
- Trong
- định dạng
- tìm thấy
- 4
- Khung
- khung
- từ
- Full
- đầy đủ
- chức năng
- cửa ngõ
- thế hệ
- Trí tuệ nhân tạo
- được
- GitHub
- Cho
- cho
- Toàn cầu
- đi
- hướng dẫn
- xử lý
- hands-on
- phần cứng
- Có
- he
- giúp đỡ
- giúp đỡ
- giúp
- tại đây
- Cao
- cao hơn
- cao nhất
- của mình
- chủ nhà
- tổ chức
- lưu trữ
- host
- Độ đáng tin của
- Hướng dẫn
- Tuy nhiên
- HTML
- http
- HTTPS
- ÔmKhuôn Mặt
- ID
- lý tưởng
- xác định
- if
- hình ảnh
- hình ảnh
- nhập khẩu
- quan trọng
- in
- bao gồm
- bao gồm
- Incoming
- Tăng
- công nghiệp
- không hiệu quả
- thông tin
- thông báo
- đầu vào
- đầu vào
- cài đặt, dựng lên
- cài đặt
- Cài đặt
- ví dụ
- thay vì
- Viện
- hướng dẫn
- tương tác
- trong
- viện dẫn
- iốt
- vấn đề
- các vấn đề
- IT
- ITS
- JIT
- jpg
- chỉ
- Giữ
- phím
- Biết
- nổi tiếng
- Phòng thí nghiệm
- Ngôn ngữ
- lớn
- Họ
- Độ trễ
- mới nhất
- phóng
- lớp
- lớp
- dẫn
- LEARN
- học tập
- Cấp
- Thư viện
- Lượt thích
- linux
- Danh sách
- Liệt kê
- ít
- sâu hơn một chút
- LLM
- tải
- tải
- địa phương
- địa điểm thư viện nào
- khai thác gỗ
- đăng nhập
- Xem
- giống như
- NHÌN
- mất
- Thấp
- thấp hơn
- thấp nhất
- máy
- học máy
- thực hiện
- bảo trì
- làm cho
- LÀM CHO
- Làm
- nhiều
- massachusetts
- Viện công nghệ Massachusetts
- tối đa
- Tối đa hóa
- tối đa
- Có thể..
- cơ khí
- y khoa
- Bộ nhớ
- Metrics
- tâm
- tối thiểu
- ML
- kiểu mẫu
- mô hình
- sửa đổi
- sửa đổi
- phân tử
- Màn Hình
- chi tiết
- hầu hết
- di chuyển
- nhiều
- nhiều
- phải
- tên
- nhất thiết
- cần thiết
- Cần
- cần thiết
- nhu cầu
- Mới
- tiếp theo
- tại
- con số
- Mục tiêu
- tuân theo
- of
- cung cấp
- thường
- on
- hàng loạt
- ONE
- có thể
- trên
- mã nguồn mở
- hoạt động
- Hoạt động
- khai thác
- phản đối
- tối ưu hóa
- Tối ưu hóa
- tối ưu hóa
- or
- vfoXNUMXfipXNUMXhfpiXNUMXufhpiXNUMXuf
- ra
- đầu ra
- kết thúc
- gói
- Song song
- một phần
- vượt qua
- qua
- con đường
- mỗi
- tỷ lệ phần trăm
- hiệu suất
- plato
- Thông tin dữ liệu Plato
- PlatoDữ liệu
- Điểm
- điểm
- Chính sách
- điều luật
- Phổ biến
- có thể
- Bài đăng
- thực hành
- trình bày
- riêng
- có lẽ
- quá trình
- Quy trình
- sản xuất
- Sản lượng
- Hồ sơ
- dự án
- tài sản
- cho
- cung cấp
- cung cấp
- Proxy
- công bố
- kéo
- mục đích
- Đẩy
- đẩy
- đẩy
- đặt
- Python
- ngọn đuốc
- phạm vi
- thực
- thời gian thực
- giới thiệu
- đề nghị
- ghi lại
- phản ánh
- khu
- tương đối
- dựa
- dựa vào
- vẫn còn
- tẩy
- thay thế
- kho
- yêu cầu
- cần phải
- Yêu cầu
- nghiên cứu
- giống
- Dự trữ
- Ltd
- Thông tin
- phản ứng
- chịu trách nhiệm
- REST của
- kết quả
- có thể tái sử dụng
- Gạo
- Vai trò
- vai trò
- chạy
- chạy
- chạy
- hy sinh
- tương tự
- Lưu
- Quy mô
- kịch bản
- kịch bản
- sdk
- xem
- lựa chọn
- gửi
- cao cấp
- nhạy cảm
- riêng biệt
- Không có máy chủ
- Các máy chủ
- dịch vụ
- DỊCH VỤ
- phục vụ
- định
- thiết lập
- thiết lập
- hình dạng
- Chia sẻ
- chia sẻ
- nên
- hiển thị
- cho thấy
- thể hiện
- Chương trình
- bên
- tương tự
- Tương tự
- đơn giản
- Six
- Kích thước máy
- kích thước
- nhỏ hơn
- So
- giải pháp
- Giải pháp
- một số
- chuyên
- riêng
- quy định
- nói
- ổn định
- ngăn xếp
- Bắt đầu
- khởi động
- Startups
- quy định
- Các bước
- dừng lại
- lưu trữ
- cửa hàng
- mạnh mẽ
- nghiên cứu
- Thành công
- như vậy
- Hội nghị Cấp cao
- hỗ trợ
- Hỗ trợ
- chắc chắn
- hệ thống
- bàn
- Hãy
- Lấy
- mất
- nhóm
- Công nghệ
- tạm thời
- tensorflow
- Thiết bị đầu cuối
- thử nghiệm
- Kiểm tra
- kiểm tra
- texas
- hơn
- việc này
- Sản phẩm
- cung cấp their dịch
- Them
- sau đó
- vì thế
- Kia là
- họ
- điều
- điều này
- những
- Thông qua
- thông lượng
- Bị ràng buộc
- thời gian
- đến
- bây giờ
- công cụ
- công cụ
- hàng đầu
- ngọn đuốc
- Tổng số:
- Dấu vết
- Truy tìm
- truyền thống
- Train
- Hội thảo
- máy biến áp
- đáng tin cậy
- thử
- XOAY
- Twins
- hai
- kiểu
- Ubuntu
- Dưới
- cơ bản
- trường đại học
- unix
- không cần thiết
- trên
- us
- Sử dụng
- sử dụng
- đã sử dụng
- người sử dang
- Người sử dụng
- sử dụng
- sử dụng
- sử dụng
- sử dụng
- Bằng cách sử dụng
- giá trị
- Các giá trị
- phiên bản
- rất
- có thể nhìn thấy
- tầm nhìn
- khối lượng
- muốn
- là
- Đường..
- we
- web
- máy chủ web
- các dịch vụ web
- TỐT
- là
- khi nào
- cái nào
- tại sao
- rộng rãi
- sẽ
- với
- ở trong
- không có
- công nhân
- công nhân
- sẽ
- viết
- viết
- Bạn
- trên màn hình
- mình
- zephyrnet
- không