Triển khai hệ thống Cloud Computing

Một phần của tài liệu Huấn luyện, tối ưu và triển khai mô hình nhận diện người trên hệ thống giám sát của trạm biến áp (Trang 59 - 67)

3. QUÁ TRÌNH THỰC HIỆN

3.4. Triển khai hệ thống xử lý AI

3.4.2. Triển khai hệ thống Cloud Computing

3.4.2.1.! Mục tiêu chính

Hình 3.18. Q trình thực thi mơ hình Deep Learning trên Server!

- Như một số bài nghiên cứu đã đề cập, một mơ hình Deep Learning càng chính xác thì địi hỏi khối lượng tính tốn càng cao. Chính vì thế, thời gian cần cho việc tính tốn sẽ rất nhiều và không thể đảm bảo được yêu cầu thời gian thực nếu như thời gian tính tốn đó lên đến vài giây. Để giải quyết vấn đề này cần một máy tính có thể tính tốn nhanh và thực hiện nhiều phép tính phức tạp trong cùng một lúc. Vì thế bước sử dụng mơ hình DL để phát hiện người sẽ được thực hiện tại máy chủ (Server). - u cầu đặt ra cho thời gian tính tốn của mơ hình này trên tài ngun phần cứng có sẵn của máy chủ sẽ rất cao. Vì phải đáp ứng cùng lúc khơng chỉ một mà nhiều yêu cầu suy luận (Inference Request) từ các Edge Device (ED) gửi đến. Chính vì thế, ta cần phải tối ưu hóa mơ hình bằng platform NVIDIA TensorRT đã được đề cập ở phần 3.3 để giảm thời gian suy luận của mô hình AI đồng thời đảm bảo khơng giảm độ chính xác so với mơ hình gốc (Native Model).

- Mơ hình này được triển khai bằng Triton Serving sẽ được đề cập ở phần sau để đảm bảo đáp ứng được u cầu tính tốn của nhiều Edge Device cùng một lúc.

3.4.2.2.! Triển khai mơ hình Deep Learning bằng Triton Serving

- Sau khi đã tối ưu hoá được các mơ hình DL bằng NVIDIA TensorRT, ta sẽ sử dụng các file được tạo ra trong quá trình tối ưu để triển khai lên Triton Serving.

- Với Triton Serving ta sẽ triển khai trên Server với phần cứng là GPU NVIDIA RTX3090, để có thể sử dụng được tài nguyên phần cứng này ta cần phải cài đặt Docker và NVIDIA Docker để hỗ trợ cho quá trình thực hiện.

- Triton Server đã được phát triển và đóng gói sẵn thành nhiền phiên bản vào các Docker Images được cung cấp miễn phí từ NVIDIA, tuy nhiên ta phải dùng version phù hợp với các mơ hình Deep Learning đã tối ưu. Ở phần trước, ta sử dụng TensorRT 7.0 cho quá trình tối ưu, vì thế Triton Serving có bản release 21.03 hỗ trợ TensorRT 7.0 để khơng xung đột version. Docker Image của phiên bản này có tên là:

nvcr.io/nvidia/tritonserver:21.03-py3.

- Từ file 2 file model_name.engine và libmyplugins.so được tạo ra khi tối ưu mơ hình, ta chuyển file model_name.engine thành file có dạng model_name.plan. Sau đó tạo một thư mục mẹ chứa 2 folder models và plugins, tiếp theo ta chuyển các file trên vào thư mục theo cấu trúc như Hình 3.19. Với tên các thư mục con trong folder models là tên của các mơ hình để gọi trong Triton Serving.

Hình 3.19. Cấu trúc thư mục chứa các mơ hình triển khai trên Triton Serving

- Sau đó ta thực hiện chạy Docker Container chứa Triton Server đã được giới thiệu ở trên ở chế độ runtime=nvidia để có thể thực thi trên NVIDIA GPU. Thư mục tritis_model_repo_fp16 vừa được tạo sẽ được mount vào container như Hình 3.20.

Hình 3.20. Lệnh dùng để khởi chạy một Triton Serving trên Docker Container

- Sau quá trình cài đặt và khởi chạy Docker Container Triton Server trên Server, ta sẽ có thể gọi request từ Client đến Triton Serving thơng qua 2 port là 8010 cho giao thức HTTP/REST API và 8011 cho giao thức gRPC [31]. Luận văn này sẽ gọi Triton Serving qua giao thức gRPC. Ngoài ra, ta có thể theo dõi thơng số vấn hành của Triton Serving bằng cách gọi vào port 8012.

3.4.2.3.! Sử dụng DALI và Ensemble Models trên Triton Server YOLOv5-m

- Với mục đích chuyển q trình tiền xử lý (pre-processing) và hậu xử lý (post- processing) từ Client vào Triton Serving ở Server để tận dụng được tài nguyên của Server và giảm tải cho quá trình xử lý tại Client. Ta sử dụng thư viện DALI với khả năng hỗ trợ tải ảnh và xử lý ảnh trên GPU và kết hợp với tính năng Ensemble Model của Triton Serving để triển khai quá trình này.

- Đầu tiên ta cần tạo một quá trình xử lý (pipeline) cho DALI để pre-processing cho ngõ vào của mơ hình YOLOv5. Pipeline gồm các bước: tải ảnh từ CPU lên GPU, lấy size của ảnh, resize về kích thước 640x640 và chuẩn hố ảnh bằng GPU. Q

trình tạo pipeline thể hiện ở Hình 3.21 với ngõ ra của DALI là ảnh đã chuẩn hố và size ảnh gốc.

Hình 3.21. Tiền xử lý dữ liệu trong DALI Pipeline cho model YOLOv5

- Tiếp theo, ta sử dụng Ensemble Model để xây dựng một AI Inference Pipeline cho Triton Serving. Pipeline được chia thành 3 mơ hình nhỏ nối tiếp nhau thể hiện ở Hình 3.22.

+ Đầu tiên là pipeline dali_pre_process để tiền xử lý ảnh đầu vào. + Tiếp theo là yolov5m_person_fp16 là mơ hình YOLOv5-m-FP16

mà ta đã tối ưu ở phần trước dùng để phát hiện người trong ảnh.

+ Sau đó là python_post_process là q trình hậu xử lý của mơ hình YOLOv5 thực thi trên Python dùng để chuyển kết q suy luận của mơ hình về dạng ngõ ra chuẩn của một mơ hình Object Detection gồm boxes, classId, scores.

+ Cuối cùng, 3 mơ hình này được kết hợp thành một mơ hình chung có tên ensemble_dali_yolov5 với ngõ vào là ảnh có kích thước bất kỳ và ngõ ra là kết quả suy luận AI với toạ độ boxes đã chuẩn hố về kích thước ảnh gốc, classId và scores.

Hình 3.22. AI Inference Pipeline cho model YOLOv5-FP16 trên Triton Serving

YOLOv5+ResNet50

- Với ý tưởng trên, ta cũng tiến hành triển khai một AI Inference Pipeline cho q trình suy luận của bài tốn phát hiện người khơng đội mũ bảo hộ. Ở đây, khó khăn đầu tiên là phải kết nối được 2 mơ hình với hai kiểu ngõ vào khác nhau sao cho tương thích và phù hợp với ý tưởng triển khai ban đầu cho bài tốn phát hiện khơng đội mũ.

- Do số lượng người xuất hiện trong ảnh là không cố định nên ngõ ra của mơ hình YOLOv5 là một batchsize khơng cố định. Nhưng ResNet-50 lại cần phải phân loại hết số người này trong thời gian nhanh nhất, nếu suy luận từng ảnh sẽ mất rất nhiều thời gian. Chính vì vậy, ta cần phải sử dụng tính năng Dynamic Batching của

Triton Serving cho ngõ vào của mơ hình ResNet-50, việc này rất hiệu quả khi ta chỉ cần gửi một lần toàn bộ số ảnh người đã xử lý từ YOLOv5 vào ResNet-50 để xử lý cùng một lúc.

- Cài đặt Dynamic Batching cho ResNet-50 được thể hiện ở Hình 3.23 với batchsize lớn nhất được xử lý trong 1 lần là 16. Nếu số người lớn hơn số batch_size thì sẽ thực hiện suy luận ở lần request sau.

Hình 3.23. Cài đặt Dynamic Batching cho model ResNet-50

- Sau khi đã giải quyết được vấn đề batchsize trên, ta tiến hành xây dựng pipe cho quá trình suy luận. Như phần trên đã giới thiệu, ta cần xây dựng một mơ hình DALI cho việc tiền xử lý dữ liệu ngõ vào, đầu tiên hình ảnh sẽ vào mơ hình YOLOv5 nên q trình pre-processing sẽ giống như phần trên. Tuy nhiên ta cần ảnh gốc để phục vụ cho việc crop person làm ngõ vào cho mơ hình ResNet-50 nên ngõ ra của DALI sẽ là ảnh đã chuẩn hoá và ảnh gốc.

- Tiếp theo, ta sử dụng Ensemble Model để xây dựng một AI Inference Pipeline cho Triton Serving. Ta sẽ có 4 mơ hình nhỏ nối tiếp nhau thể hiện ở Hình 3.25:

+ Mơ hình dali_pre_processing dùng để tiền xử lý dữ liệu ngõ vào. + Mơ hình yolov5m_person_fp16 dùng để phát hiện người trong ảnh. + Phần việc của mơ hình python_post_process_yolov5 sẽ nhiều hơn so với phần trước. Ở đây, khi nhận được kết quả suy luận từ YOLOv5, ta thực hiện post-processing để tìm ra toạ độ boxes, classId, scores. Sau đó, dựa vào toạ độ boxes và ảnh gốc có được từ ngõ ra của DALI, ta tiến hành quá trình cắt ảnh người với phương pháp cắt ½ phần trên của boxes của người đó. Sau đó tiền xử lý các ảnh này ta sẽ được một batch ảnh có kích thước [num_person, 3, 224, 224] với num_person là số người trong ảnh.

+ Mơ hình resnet50-hat xử lý các ảnh đã crop và trả kết quả phân loại. + Sau cùng, mơ hình kết hợp của tất các các quá trình này là

ensemble_dali_yolov5_resnet với ngõ vào là ảnh có kích thước bất kỳ, ngõ ra là kết

quả suy luận của YOLOv5 với boxes, classId, scores và kết quả phân loại của ResNet- 50 là có đội mũ hay khơng đội mũ bảo hộ.

Hình 3.25. AI Inference Pipeline cho model YOLOv5-FP16+ResNet-50 trên Triton Serving

Một phần của tài liệu Huấn luyện, tối ưu và triển khai mô hình nhận diện người trên hệ thống giám sát của trạm biến áp (Trang 59 - 67)

Tải bản đầy đủ (PDF)

(113 trang)