Project là một trong những điểm nhấn quan trọng trong các lớp học của ProtonX. Với lớp triển khi mô hình trên sản phẩm thực tế - MLEs thì các project sẽ tập trung vào việc triển khai được các mô hình có hiệu năng cao trên server thực tế.
Hai chủ đề trong lớp học này bao gồm:
Triển khai mô hình nhận diện văn bản từ hình ảnh
Mô hình hỏi đáp trả lời câu hỏi
Mỗi nhóm sẽ chia làm 2 bạn phụ trách việc triển khai (deploy) lên server và lập trình client sao cho có thể đẩy ảnh/văn bản từ client lên server và nhận kết quả inference.
Project 1 - Triton Inference Server tập trung vào Client
Trong bài tập này chúng ta cùng nhau nghiên cứu cách deploy một pipeline có nhiều hơn model lên một hệ thống Trion Inference Server.
Quy trình nhận diện một bức ảnh từ đó trả về văn bản trong bức ảnh đó:
Client sẽ gửi bức ảnh lên Triton Server, server sẽ nhận diện các khu vực có văn bản rồi trả về bounding boxs của những văn bản đó
Sau khi client nhận được các bouding boxs này, client sẽ cắt ảnh theo các boxs rồi từ đó gửi ảnh đã được cắt này tên Triton Server, server sẽ chạy model nhận diện văn bản trong ảnh này và trả về văn bản cho client
Chúng ta cùng lập trình bài tập này nhé.
A. Tiến hành convert các mô hình nền tảng
Mô hình phát hiện văn bản
Mô hình nhận diện văn bản
Dưới đây là code để chuyển các model về định dạng mong muốn
Khởi tạo một docker
docker run -it --gpus all -v ${PWD}:/workspace nvcr.io/nvidia/tensorflow:<yy.mm>-tf2-py3
Sử dụng bạn 23.05
docker run -it --gpus all -v ${PWD}:/workspace nvcr.io/nvidia/tensorflow:23.05-tf2-py3
1) Mô hình phát hiện văn bản
## Execute from Part_5-Model_Ensembles Directory if [ ! -d "./model_repository" ]; then echo "Execute from the 'Part_5-Model_Ensembles' directory" exit 1 fi ## Download Text Detection Model mkdir -p downloads wget -P downloads https://www.dropbox.com/s/r2ingd0l3zt8hxs/frozen_east_text_detection.tar.gz tar -xvf downloads/frozen_east_text_detection.tar.gz -C downloads ## Convert to ONNX pip install -U tf2onnx mkdir -p model_repository/text_detection/1 python -m tf2onnx.convert \ --input downloads/frozen_east_text_detection.pb \ --inputs "input_images:0" \ --outputs "feature_fusion/Conv_7/Sigmoid:0","feature_fusion/concat_3:0" \ --output model_repository/text_detection/1/model.onnx
Đây là code chuyển mô hình East Text Detector từ Tensorflow thành ONNX. Chi tiết về mô hình xem tại đây.
2) Mô hình nhận diện văn bản
Tiến hành download mô hình này:
## Execute from Part_5-Model_Ensembles Directory
if [ ! -d "./model_repository" ]; then
echo "Execute from the 'Part_5-Model_Ensembles' directory"
exit 1
fi
## Download Text Detection Model
mkdir -p downloads
wget -P downloads https://www.dropbox.com/sh/j3xmli4di1zuv3s/AABzCC1KGbIRe2wRwa3diWKwa/None-ResNet-None-CTC.pth
Sau khi đã download weight thành công, bạn hãy chuyển mô hình này thành ONNX.
from pathlib import Path
import torch
from model import STRModel
# Create PyTorch Model Object
model = STRModel(input_channels=1, output_channels=512, num_classes=37)
# Load model weights from external file
state = torch.load("downloads/None-ResNet-None-CTC.pth")
state = {key.replace("module.", ""): value for key, value in state.items()}
model.load_state_dict(state)
# Create ONNX file by tracing model
model_directory = Path("model_repository/text_recognition/1/")
model_directory.mkdir(parents=True, exist_ok=True)
trace_input = torch.randn(1, 1, 32, 100)
torch.onnx.export(
model,
trace_input,
model_directory / "model.onnx",
verbose=True,
dynamic_axes={"input.1": [0], "308": [0]},
)
B. Sắp xếp hai mô hình này vào thư mục để serving
Tham khảo cách làm tại video lớp học trên lớp
C. Nhiệm vụ viết Client
Mục tiêu sẽ cần viết được Client theo quy trình sau:
Client sẽ gửi bức ảnh lên Triton Server, server sẽ nhận diện các khu vực có văn bản rồi trả về bounding boxs của những văn bản đó
Sau khi client nhận được các bouding boxs này, client sẽ cắt ảnh theo các boxs rồi từ đó gửi ảnh đã được cắt này tên Triton Server, server sẽ chạy model nhận diện văn bản trong ảnh này và trả về văn bản cho client
Project 2 - Triton Inference Server tập trung vào Server
Khác với phần cách thiết kế tập trung vào Client
Cách thiết kế tiếp theo sẽ tập trung vào phần Server.
Quy trình nhận diện một bức ảnh từ đó trả về văn bản trong bức ảnh đó:
Client sẽ gửi bức ảnh lên Triton Server, server sẽ nhận diện các khu vực có văn bản rồi xuất ra bounding boxs của những văn bản đó
Các Bouding boxes này sẽ được xử lý tiếp trên server và thực hiện nhận diện
Kết quả cuối cùng được trả về bao gồm văn bản nằm trong ảnh
Để thực hiện được Project này bạn cần nắm được các viết Python Module để giao tiếp giữa các model khác nhau trên Triton Server. Tham khảo cách viết tại đây:
Cách này đã được trình bày trong phần Video của buổi học Triton Inference Server. Bạn tham khảo ở đây nhé:
https://protonx.io/courses/6471d348220a44001aa0d734/topics/652380ae1cd2490012a0cee3
Project 3 - Deploy Bert với SQUAD model trên Triton Inference Server
Project này sẽ tập trung đưa mô hình Bert được trên với dữ liệu SQUAD lên trên Triton Server. Bộ dữ liệu SQUAD là bộ dữ liệu cho phép tìm ra câu trả lời của một câu hỏi bất kỳ trong một đoạn văn bản.
Một số nguồn tham khảo
Notebook chạy model: https://github.com/NVIDIA/DeepLearningExamples/blob/master/PyTorch/LanguageModeling/BERT/run_squad.py
Notebook Inference:
Notebook Export Model
Nhiệm vụ:
Sau khi đã train và export được mô hình, phải serving được mô hình này trên Triton Inference Server
Viết Client script để thực hiện inference