Chạy Điểm chuẩn MLPerf™ Inference v1.1 trên Hệ thống Dell EMC

Blog này là hướng dẫn để chạy điểm chuẩn suy luận MLPerf v1.1. Thông tin về cách chạy điểm chuẩn suy luận MLPerf v1.1 có sẵn trực tuyến tại các địa điểm khác nhau. Blog này cung cấp tất cả các bước ở một nơi.   

MLPerf là ​​bộ công cụ đo điểm chuẩn để đo lường hiệu suất của khối lượng công việc Machine Learning (ML). Nó tập trung vào các khía cạnh quan trọng nhất của vòng đời ML: đào tạo và suy luận. Để biết thêm thông tin, hãy xem Giới thiệu về Hiệu suất MLPerf™ Inference v1.1 với Máy chủ Dell EMC .

Blog này tập trung vào thiết lập suy luận và mô tả các bước để chạy thử nghiệm suy luận MLPerf v1.1 của trung tâm dữ liệu đóng trên các máy chủ Dell Technologies có GPU NVIDIA. Nó cho phép bạn chạy thử nghiệm và tái tạo các kết quả mà chúng tôi quan sát được trong Phòng thí nghiệm đổi mới HPC & AI của chúng tôi . Để biết chi tiết về ngăn xếp phần cứng và phần mềm cho các hệ thống khác nhau trong điểm chuẩn, hãy xem danh sách hệ thống này .

Bộ suy luận MLPerf v1.1 chứa các điểm chuẩn sau:

  • Resnet50 
  • SSD-Resnet34 
  • BERT 
  • DLRM 
  • RNN-T 
  • Lưới chữ U 3D

Lưu ý : Các mô hình BERT, DLRM và 3D U-Net có mục tiêu 99% (độ chính xác mặc định) và 99,9% (độ chính xác cao).

Blog này mô tả các bước để chạy tất cả các điểm chuẩn này.

1 Bắt đầu

Một hệ thống đang được thử nghiệm bao gồm một tập hợp các tài nguyên phần cứng và phần mềm được xác định sẽ được đo lường về hiệu suất. Tài nguyên phần cứng có thể bao gồm bộ xử lý, bộ tăng tốc, bộ nhớ, đĩa và kết nối. Tài nguyên phần mềm có thể bao gồm hệ điều hành, trình biên dịch, thư viện và trình điều khiển có ảnh hưởng đáng kể đến thời gian chạy điểm chuẩn. Trong trường hợp này, hệ thống mà bạn sao chép kho lưu trữ MLPerf và chạy điểm chuẩn được gọi là hệ thống đang được thử nghiệm (SUT).

Để lưu trữ, SSD RAID hoặc ổ NVMe cục bộ có thể được chấp nhận để chạy tất cả các bài kiểm tra phụ mà không bị phạt. Suy luận không có yêu cầu nghiêm ngặt về việc lưu trữ song song nhanh. Tuy nhiên, hệ thống tệp BeeGFS hoặc Lustre, giải pháp lưu trữ PixStor, v.v. giúp tạo nhiều bản sao của các tập dữ liệu lớn.

2 Điều kiện tiên quyết

Các điều kiện tiên quyết để chạy thử nghiệm suy luận MLPerf v1.1 bao gồm:

  • Một hệ thống Dell EMC x86_64
  • Docker được cài đặt với hook thời gian chạy NVIDIA 
  • GPU NVIDIA dựa trên Ampe (GPU Turing có hỗ trợ cũ nhưng không còn được duy trì để tối ưu hóa nữa.)
  • Phiên bản trình điều khiển NVIDIA 470.xx trở lên
  • Kể từ phiên bản suy luận v1.0, ECC đã BẬT
    Đặt ECC thành bật, chạy lệnh sau:

    Sudo nvidia-smi --ecc-config=1

Chuẩn bị chạy suy luận MLPerf v1.1

Trước khi bạn có thể chạy thử nghiệm suy luận MLPerf v1.1, hãy thực hiện các tác vụ sau để chuẩn bị môi trường của bạn.

3.1 Sao chép kho lưu trữ MLPerf 

  1. Sao chép kho lưu trữ vào thư mục chính của bạn hoặc một đường dẫn khác được chấp nhận:
    đĩa CD -
    bản sao git https://github.com/mlperf/inference_results_v1.1
  2. Chuyển đến thư mục đã đóng/DellEMC  :
    suy luận cd_results_v1.1/đóng/DellEMC
  3. Tạo một thư mục “cào” có ít nhất 3 TB dung lượng để lưu trữ các mô hình, bộ dữ liệu, dữ liệu được xử lý trước, v.v.
    đầu mkdir
  4. Xuất đường dẫn tuyệt đối cho $MLPERF_SCRATCH_PATH bằng thư mục đầu:
    xuất MLPERF_SCRATCH_PATH=/home/user/inference_results_v1.1/closed/DellEMC/scratch

3.2 Thiết lập tập tin cấu hình

Thư mục đã đóng/DellEMC/configs   bao gồm tệp __init__.py liệt kê các cấu hình cho các máy chủ Dell EMC khác nhau là các hệ thống trong điểm chuẩn MLPerf Inference v1.1. Nếu cần, hãy sửa đổi tệp configs/ <benchmark> / <Scenario> /__init__.py để bao gồm hệ thống sẽ chạy điểm chuẩn.

Lưu ý : Nếu hệ thống của bạn đã có sẵn trong tệp cấu hình thì không cần thêm cấu hình khác. 

Trong tệp c onfigs/ <benchmark> / <Scenario> /__init__.py , hãy chọn một cấu hình tương tự và sửa đổi cấu hình đó dựa trên hệ thống hiện tại, khớp với số lượng và loại GPU trong hệ thống của bạn.

Đối với blog này, chúng tôi đã sử dụng máy chủ Dell EMC PowerEdge R7525 với GPU 1-A100 làm ví dụ. Chúng tôi đã chọn   R7525_A100_PCIE_40GBx1 làm tên cho hệ thống mới này. Vì   hệ thống R7525_A100_PCIE_40GBx1 chưa có trong danh sách hệ thống nên chúng tôi đã thêm cấu hình R7525_A100-PCIe-40GBx1 .

Vì hệ thống tham chiếu R7525_A100_PCIE_40GBx3 là tương tự nhất nên chúng tôi đã sửa đổi cấu hình đó và chọn Máy chủ Resnet50 làm điểm chuẩn mẫu.

Ví dụ sau đây hiển thị cấu hình tham chiếu cho ba GPU cho điểm chuẩn Máy chủ Resnet50 trong tệp configs/resnet50/Server/__init__.py :

@ConfigRegistry.register(HarnessType.LWIS, AccuracyTarget.k_99, PowerSetting.MaxP)
lớp R7525_A100_PCIE_40GBx3(Cấu hình điểm chuẩn):
     hệ thống = Hệ thống ("R7525_A100-PCIE-40GB", Architecture.Ampere, 3)
     hoạt động_sms = 100
     input_dtype = "int8"
     input_format = "tuyến tính"
     map_path = "data_maps/<dataset_name>/val_map.txt"
     độ chính xác = "int8"
     tensor_path = "${PREPROCESSED_DATA_DIR}/<dataset_name>/ResNet50/int8_Tuyến tính"
     use_deque_limit = Đúng
     deque_timeout_usec = 5742
     gpu_batch_size = 205
     gpu_copy_streams = 11
     gpu_inference_streams = 9
     máy chủ_target_qps = 91250
     use_cuda_thread_per_device = Đúng
     use_graphs = Đúng
     kịch bản = Kịch bản.Server
     điểm chuẩn = Điểm chuẩn.ResNet50
     start_from_device=Đúng

Ví dụ này hiển thị cấu hình đã sửa đổi cho một GPU:

@ConfigRegistry.register(HarnessType.LWIS, AccuracyTarget.k_99, PowerSetting.MaxP)
lớp R7525_A100_PCIE_40GBx1(Cấu hình điểm chuẩn):
     system = System("R7525_A100-PCIE-40GB", Architecture.Ampere, 1)
     hoạt động_sms = 100
     input_dtype = "int8"
     input_format = "tuyến tính"
     map_path = "data_maps/<dataset_name>/val_map.txt"
     độ chính xác = "int8"
     tensor_path = "${PREPROCESSED_DATA_DIR}/<dataset_name>/ResNet50/int8_Tuyến tính"
     use_deque_limit = Đúng
     deque_timeout_usec = 5742
     gpu_batch_size = 205
     gpu_copy_streams = 11
     gpu_inference_streams = 9
     server_target_qps = 30400
     use_cuda_thread_per_device = Đúng
     use_graphs = Đúng
     kịch bản = Kịch bản.Server
     điểm chuẩn = Điểm chuẩn.ResNet50
     start_from_device=Đúng

Chúng tôi đã sửa đổi tham số truy vấn mỗi giây (QPS) ( server_target_qps ) để phù hợp với số lượng GPU. Tham số server_target_qps   có khả năng mở rộng tuyến tính, do đó QPS = số lượng GPU x QPS trên mỗi GPU.

Tham số đã sửa đổi là   server_target_qps  được đặt thành 30400 theo kỳ vọng về hiệu suất của một GPU. 

3.3 Thêm hệ thống mới

Sau khi bạn thêm hệ thống mới vào tệp __init__.py như trong ví dụ trước, hãy thêm hệ thống mới vào danh sách các hệ thống có sẵn. Danh sách các hệ thống có sẵn nằm trong tệp code/common/system_list.py . Mục này thông báo cho điểm chuẩn rằng có một hệ thống mới tồn tại và đảm bảo rằng điểm chuẩn chọn đúng cấu hình.

Lưu ý : Nếu hệ thống của bạn đã được thêm vào thì không cần thêm nó vào tệp code/common/system_list.py . 

Thêm hệ thống mới vào danh sách các hệ thống có sẵn trong tệp c ode/common/system_list.py .

Ở cuối tệp có một lớp tên là KnownSystems . Lớp này xác định danh sách các đối tượng SystemClass  mô tả các hệ thống được hỗ trợ như trong ví dụ sau:

SystemClass(<system ID>, [<danh sách tên được báo cáo bởi nvidia-smi>], [<ID PCI đã biết của hệ thống này>], <kiến trúc>, [danh sách số lượng gpu được hỗ trợ đã biết>])

Ở đâu:

  • Đối với <system ID> , hãy nhập ID hệ thống mà bạn muốn nhận dạng hệ thống này.
  • Đối với <danh sách tên được báo cáo bởi nvidia-smi> , hãy chạy lệnh nvidia-smi -L và sử dụng tên được trả về.
  • Đối với <ID PCI đã biết của hệ thống này> , hãy chạy lệnh sau:
$ CUDA_VISIBLE_ORDER=PCI_BUS_ID nvidia-smi --query-gpu=gpu_name,pci.device_id --format=csv
tên, pci.device_id
A100-PCIE-40GB, 0x 20F1 10DE
---

Trường pci.device_id này có định dạng 0x <PCI ID> 10DE, trong đó 10DE là ID nhà cung cấp PCI NVIDIA. Sử dụng bốn chữ số thập lục phân trong khoảng từ 0x đến 10DE làm ID PCI cho hệ thống. Trong trường hợp này là 20F1.

  • Đối với <architecture> , hãy sử dụng kiến ​​trúc Enum, nằm ở đầu tệp. Trong trường hợp này, A100 là kiến ​​trúc Ampe.
  • Đối với <danh sách số lượng GPU đã biết> , hãy nhập số lượng GPU của hệ thống bạn muốn hỗ trợ (nghĩa là [1,2,4] nếu bạn muốn hỗ trợ các biến thể GPU 1x, 2x và 4x của hệ thống này. ). Bởi vì chúng tôi đã có biến thể 3x trong tệp system_list.py nên chúng tôi chỉ cần đưa số 1 làm mục nhập bổ sung.

Lưu ý : Vì cấu hình đã có sẵn cho máy chủ PowerEdge R7525 nên chúng tôi đã thêm số 1 cho cấu hình của mình, như trong ví dụ sau. Nếu hệ thống của bạn không tồn tại trong tệp system_list.py , hãy thêm toàn bộ cấu hình chứ không chỉ số.

lớp Hệ thống đã biết:
     """
     Danh sách toàn cầu các hệ thống được hỗ trợ
     """
# trước khi thêm 1 - cấu hình này chỉ hỗ trợ R7525_A100-PCIE-40GB x3  
# R7525_A100_PCIE_40GB= SystemClass("R7525_A100-PCIE-40GB", ["A100-PCIE-40GB"], ["20F1"], Architecture.Ampere, [3]) # 
sau khi bổ sung – cấu hình này hiện hỗ trợ R7525_A100-PCIE- Phiên bản 40GB x1 và R7525_A100-PCIE-40GB x3.
R7525_A100_PCIE_40GB= SystemClass("R7525_A100-PCIE-40GB", ["A100-PCIE-40GB ["20F1"], Architecture.Ampere, [ 1 , 3])
DSS8440_A100_PCIE_80GB = SystemClass("DSS8440_A100-PCIE-80GB", ["A100-PCIE-80GB"], ["20B5"], Architecture.Ampere, [10])
DSS8440_A30 = SystemClass("DSS8440_A30", ["A30"], ["20B7"], Architecture.Ampere, [8], valid_mig_slices=[MIGSlice(1, 6), MIGSlice(2, 12), MIGSlice(4, 24 )])
R750xa_A100_PCIE_40GB = SystemClass("R750xa_A100-PCIE-40GB", ["A100-PCIE-40GB"], ["20F1"], Architecture.Ampere, [4])
R750xa_A100_PCIE_80GB = SystemClass("R750xa_A100-PCIE-80GB", ["A100-PCIE-80GB"], ["20B5"], Architecture.Ampere, [4],valid_mig_slices=[MIGSlice(1, 10), MIGSlice(2, 20), MIGSlice(3, 40)])
     ----

Lưu ý : Bạn phải cung cấp các cấu hình khác nhau trong tệp configs/resnet50/Server/__init__.py cho biến thể x1 và biến thể x3. Trong ví dụ trước, cấu hình R7525_A100-PCIE-40GBx3 khác với cấu hình R7525_A100-PCIE-40GBx1 .

3.4 Xây dựng hình ảnh Docker và các thư viện cần thiết

Xây dựng hình ảnh Docker và sau đó khởi chạy vùng chứa tương tác. Sau đó, trong vùng chứa tương tác, hãy xây dựng các thư viện cần thiết để suy luận.

  1. Để xây dựng hình ảnh Docker, hãy chạy lệnh make prebuild bên trong thư mục đã đóng/DellEMC : Lệnh make prebuild

    Ví dụ sau đây cho thấy đầu ra mẫu:

    Khởi chạy phiên Docker
    nvidia-docker run --rm -it -w /work \
    -v /home/user/article_inference_v1.1/closed/DellEMC:/work -v /home/user:/mnt//home/user \
    --cap-thêm SYS_ADMIN \
       -e NVIDIA_VISIBLE_DEVICES=0 \
       --shm-size=32gb \
       -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro \
       --security-opt apparmor=không giới hạn --security-opt seccomp=không giới hạn \
       --name mlperf-inference-user -h mlperf-inference-user --add-host mlperf-inference-user:127.0.0.1 \
       --người dùng 1002:1002 --máy chủ mạng --thiết bị /dev/fuse \
       -v =/home/user/inference_results_v1.0/closed/DellEMC/scratch:/home/user/inference_results_v1.1/closed/DellEMC/scratch \
       -e MLPERF_SCRATCH_PATH=/home/user/inference_results_v1.0/closed/DellEMC/scratch \
       -e HOST_HOSTNAME=node009 
    \
    suy luận mlperf:người dùng        

    Bộ chứa Docker được khởi chạy với tất cả các gói cần thiết được cài đặt.

  2. Truy cập thiết bị đầu cuối tương tác trên vùng chứa.
  3. Để xây dựng các thư viện cần thiết cho hoạt động hội thảo, hãy chạy lệnh make build bên trong vùng chứa tương tác:
    Lệnh
    make build

 Ví dụ sau đây cho thấy đầu ra mẫu:

(mlperf) user@mlperf-inference-user:/work$ tạo bản dựng
  …….
[ 26%] Liên kết tệp thực thi CXX /work/build/bin/harness_default
make[4]: Rời khỏi thư mục '/work/build/harness'
make[4]: Rời khỏi thư mục '/work/build/harness'
make[4]: Rời khỏi thư mục '/work/build/harness'
[ 36%] Dây nịt mục tiêu được xây dựng_bert
[ 50%] Khai thác mục tiêu được xây dựng_default
[ 55%] Khai thác mục tiêu được xây dựng_dlrm
make[4]: Rời khỏi thư mục '/work/build/harness'
[ 63%] Khai thác mục tiêu được xây dựng_rnnt
make[4]: Rời khỏi thư mục '/work/build/harness'
[ 81%] Dây nịt mục tiêu được chế tạo_triton
make[4]: Rời khỏi thư mục '/work/build/harness'
[100%] Khai thác mục tiêu được xây dựng_triton_mig
make[3]: Rời khỏi thư mục '/work/build/harness'
make[2]: Rời khỏi thư mục '/work/build/harness'
Dây đai xây dựng đã hoàn thành.
make[1]: Rời khỏi thư mục '/work' 
(mlperf) user@mlperf-inference-user:/work

Vùng chứa mà bạn có thể chạy điểm chuẩn đã được xây dựng.

 3.5 Tải xuống và xử lý trước dữ liệu và mô hình xác thực

Để chạy suy luận MLPerf v1.1, hãy tải xuống các tập dữ liệu và mô hình, sau đó xử lý trước chúng. MLPerf cung cấp các tập lệnh tải xuống các mô hình đã được đào tạo. Các tập lệnh cũng tải xuống tập dữ liệu cho các điểm chuẩn khác ngoài Resnet50, DLRM và 3D U-Net. 

Đối với Resnet50, DLRM và 3D U-Net, hãy đăng ký tài khoản rồi tải xuống bộ dữ liệu theo cách thủ công:

Ngoại trừ bộ dữ liệu Resnet50, DLRM và 3D U-Net, hãy chạy các lệnh sau để tải xuống tất cả các mô hình, bộ dữ liệu rồi xử lý trước chúng:

$ make download_model # Tải xuống các mô hình và lưu vào $MLPERF_SCRATCH_PATH/models
$ make download_data # Tải xuống tập dữ liệu và lưu vào $MLPERF_SCRATCH_PATH/data
$ tạo preprocess_data # Xử lý trước dữ liệu và lưu vào $MLPERF_SCRATCH_PATH/preprocessed_data

Lưu ý : Các lệnh này tải xuống tất cả các tập dữ liệu, có thể không bắt buộc nếu mục tiêu là chạy một điểm chuẩn cụ thể. Để chạy một điểm chuẩn cụ thể thay vì tất cả các điểm chuẩn, hãy xem các phần sau để biết thông tin về điểm chuẩn cụ thể.

(mlperf) user@mlperf-inference-user:/work$ tree -d -L 1
.
├── xây dựng
├── mã
├── tuân thủ
├── cấu hình
├── dữ liệu_bản đồ
├── docker
├── số đo
├── sức mạnh
├── kết quả
├── kịch bản
└── hệ thống
 
 
 
# thư mục khác nhau như sau
 
├── bản dựng—Nhật ký, dữ liệu được xử lý trước, công cụ, mô hình, plugin, v.v. 
 
├── mã—Mã nguồn cho tất cả các điểm chuẩn
 
├── tuân thủ—Đã vượt qua kiểm tra tuân thủ 
 
├── configs—Cấu hình chạy các điểm chuẩn khác nhau cho các thiết lập hệ thống khác nhau
 
├── data_maps—Bản đồ dữ liệu cho các điểm chuẩn khác nhau
 
├── docker—Tệp Docker hỗ trợ xây dựng vùng chứa
 
├── phép đo—Giá trị đo cho các điểm chuẩn khác nhau
 
├── nguồn điện—các tệp dành riêng cho việc gửi nguồn điện (nó chỉ cần thiết cho việc gửi nguồn điện)
 
├── kết quả—Nhật ký kết quả cuối cùng 
 
├── đầu—Bộ nhớ dành cho mô hình, dữ liệu được xử lý trước và tập dữ liệu được liên kết tượng trưng với thư mục bản dựng trước đó
 
├── script—Kịch bản hỗ trợ 
 
└── hệ thống—Chi tiết phần cứng và phần mềm của hệ thống trong điểm chuẩn

4 Chạy điểm chuẩn

Sau khi bạn đã thực hiện các tác vụ trước đó để chuẩn bị môi trường của mình, hãy chạy bất kỳ điểm chuẩn nào được yêu cầu cho các bài kiểm tra của bạn.

Điểm chuẩn Resnet50, SSD-Resnet34 và RNN-T có mục tiêu 99% (độ chính xác mặc định). 

Điểm chuẩn BERT, DLRM và 3D U-Net có mục tiêu 99% (độ chính xác mặc định) và 99,9% (độ chính xác cao). Để biết thông tin về cách chạy các điểm chuẩn này, hãy xem phần Chạy điểm chuẩn mục tiêu có độ chính xác cao bên dưới.    

Nếu bạn đã tải xuống và xử lý trước tất cả các tập dữ liệu (như được trình bày trong phần trước), thì không cần phải thực hiện lại. Bỏ qua các bước tải xuống và xử lý trước trong quy trình dành cho các điểm chuẩn sau. 

NVIDIA TensorRT là công cụ suy luận cho phần phụ trợ. Nó bao gồm một trình tối ưu hóa suy luận deep learning và thời gian chạy mang lại độ trễ thấp và thông lượng cao cho các ứng dụng deep learning.

4.1 Chạy benchmark Resnet50

Để thiết lập tập dữ liệu và mô hình Resnet50 để chạy suy luận:

  1. Nếu bạn đã tải xuống và xử lý trước các tập dữ liệu, hãy chuyển sang bước 5.
  2. Tải xuống tập dữ liệu xác thực cần thiết ( https://github.com/mlcommons/training/tree/master/image_classification ).
  3. Trích xuất hình ảnh vào $MLPERF_SCRATCH_PATH/data/<dataset_name>/
  4. Chạy các lệnh sau:
    tạo download_model BENCHMARKS=resnet50
    tạo preprocess_data BENCHMARKS=resnet50
  5. Tạo các công cụ TensorRT:
    # tạo công cụ TRT với cấu hình được chỉ định. Trong trường hợp này, nó tạo công cụ cho cả kịch bản Ngoại tuyến và Máy chủ, 
    
     tạo generate_engines RUN_ARGS="--benchmarks=resnet50 --scenarios=Offline,Server --config_ver=default"
  6. Chạy điểm chuẩn:
# chạy điểm chuẩn hiệu suất
tạo run_harness RUN_ARGS="--benchmarks=resnet50 --scenarios=Offline --config_ver=default --test_mode=PerformanceOnly" 
tạo run_harness RUN_ARGS="--benchmarks=resnet50 --scenarios=Server --config_ver=default --test_mode=PerformanceOnly"
 
# chạy benchmark độ chính xác 
tạo run_harness RUN_ARGS="--benchmarks=resnet50 --scenarios=Offline --config_ver=default --test_mode=AccuracyOnly" 
tạo run_harness RUN_ARGS="--benchmarks=resnet50 --scenarios=Server --config_ver=default --test_mode=AccuracyOnly"

Ví dụ sau đây hiển thị đầu ra cho chế độ PerformanceOnly và hiển thị kết quả “HỢP LỆ”:

========================= Kết quả khai thác hoàn hảo: =========================
R7525_A100-PCIe-40GBx1_TRT-default-Server:
      resnet50: Số mẫu được lên lịch mỗi giây: 30400.32 và Kết quả là: HỢP LỆ
======================== Kết quả chính xác: ==========================
R7525_A100-PCIe-40GBx1_TRT-default-Server:
     resnet50: Không có kết quả chính xác ở chế độ PerformanceOnly.

4.2 Chạy benchmark SSD-Resnet34

Để thiết lập tập dữ liệu và mô hình SSD-Resnet34 để chạy suy luận:

  1. Nếu cần, hãy tải xuống và xử lý trước tập dữ liệu:
    tạo download_model BENCHMARKS=ssd-resnet34
    tạo download_data BENCHMARKS=ssd-resnet34 
    tạo preprocess_data BENCHMARKS=ssd-resnet34
  2. Tạo các công cụ TensorRT:
    # tạo công cụ TRT với cấu hình được chỉ định. Trong trường hợp này, nó tạo công cụ cho cả kịch bản Ngoại tuyến và Máy chủ
    
    tạo generate_engines RUN_ARGS="--benchmarks=ssd-resnet34 --scenarios=Offline,Server --config_ver=default"
  3. Chạy điểm chuẩn:
# chạy điểm chuẩn hiệu suất
tạo run_harness RUN_ARGS="--benchmarks=ssd-resnet34 --scenarios=Offline --config_ver=default --test_mode=PerformanceOnly"
tạo run_harness RUN_ARGS="--benchmarks=ssd-resnet34 --scenarios=Server --config_ver=default --test_mode=PerformanceOnly"
 
# chạy benchmark độ chính xác
tạo run_harness RUN_ARGS="--benchmarks=ssd-resnet34 --scenarios=Offline --config_ver=default --test_mode=AccuracyOnly" 
tạo run_harness RUN_ARGS="--benchmarks=ssd-resnet34 --scenarios=Server --config_ver=default --test_mode=AccuracyOnly"

4.3 Chạy benchmark RNN-T

Để thiết lập tập dữ liệu và mô hình RNN-T để chạy suy luận:

  1. Nếu cần, hãy tải xuống và xử lý trước tập dữ liệu:
    tạo download_model BENCHMARKS=rnnt
    tạo download_data BENCHMARKS=rnnt
    tạo preprocess_data BENCHMARKS=rnnt
  2.  Tạo các công cụ TensorRT :
    # tạo công cụ TRT với cấu hình được chỉ định. Trong trường hợp này, nó tạo công cụ cho cả kịch bản Ngoại tuyến và Máy chủ
    
    tạo generate_engines RUN_ARGS="--benchmarks=rnnt --scenarios=Offline,Server --config_ver=default"
  3. Chạy điểm chuẩn:
# chạy điểm chuẩn hiệu suất
tạo run_harness RUN_ARGS="--benchmarks=rnnt --scenarios=Offline --config_ver=default --test_mode=PerformanceOnly"
tạo run_harness RUN_ARGS="--benchmarks=rnnt --scenarios=Server --config_ver=default --test_mode=PerformanceOnly" 
 
# chạy benchmark độ chính xác 
tạo run_harness RUN_ARGS="--benchmarks=rnnt --scenarios=Offline --config_ver=default --test_mode=AccuracyOnly" 
tạo run_harness RUN_ARGS="--benchmarks=rnnt --scenarios=Server --config_ver=default --test_mode=AccuracyOnly"

5 Chạy điểm chuẩn mục tiêu có độ chính xác cao

Điểm chuẩn BERT, DLRM và 3D U-Net có mục tiêu có độ chính xác cao.

5.1 Chạy điểm chuẩn BERT

Để thiết lập tập dữ liệu BERT và mô hình để chạy suy luận:

  1. Nếu cần, hãy tải xuống và xử lý trước tập dữ liệu:
    tạo download_model BENCHMARKS=bert 
    tạo download_data BENCHMARKS=bert
    tạo preprocess_data BENCHMARKS=bert
  2. Tạo các công cụ TensorRT:
    # tạo công cụ TRT với cấu hình được chỉ định. Trong trường hợp này, nó tạo ra công cụ cho cả kịch bản Ngoại tuyến và Máy chủ cũng như cho các mục tiêu mặc định và có độ chính xác cao.
    
    tạo generate_engines RUN_ARGS="--benchmarks=bert --scenarios=Offline,Server --config_ver=default,high_accuracy"
  3. Chạy điểm chuẩn :
# chạy điểm chuẩn hiệu suất
tạo run_harness RUN_ARGS="--benchmarks=bert --scenarios=Offline --config_ver=default --test_mode=PerformanceOnly"
tạo run_harness RUN_ARGS="--benchmarks=bert --scenarios=Server --config_ver=default --test_mode=PerformanceOnly"
tạo run_harness RUN_ARGS="--benchmarks=bert --scenarios=Offline --config_ver=high_accuracy --test_mode=PerformanceOnly"
tạo run_harness RUN_ARGS="--benchmarks=bert --scenarios=Server --config_ver=high_accuracy --test_mode=PerformanceOnly" 
 
# chạy benchmark độ chính xác  
tạo run_harness RUN_ARGS="--benchmarks=bert --scenarios=Offline --config_ver=default --test_mode=AccuracyOnly" 
tạo run_harness RUN_ARGS="--benchmarks=bert --scenarios=Server --config_ver=default --test_mode=AccuracyOnly" 
tạo run_harness RUN_ARGS="--benchmarks=bert --scenarios=Offline --config_ver=high_accuracy --test_mode=AccuracyOnly" 
tạo run_harness RUN_ARGS="--benchmarks=bert --scenarios=Server --config_ver=high_accuracy --test_mode=AccuracyOnly"

5.2 Chạy điểm chuẩn DLRM

Để thiết lập tập dữ liệu và mô hình DLRM để chạy suy luận:

  1. Nếu bạn đã tải xuống và xử lý trước các tập dữ liệu, hãy chuyển sang bước 5.
  2. Tải xuống tập dữ liệu Criteo Terabyte .
  3. Trích xuất hình ảnh vào thư mục $MLPERF_SCRATCH_PATH/data/criteo/ .
  4. Chạy các lệnh sau:
    tạo download_model BENCHMARKS=dlrm
    tạo preprocess_data BENCHMARKS=dlrm
  5. Tạo các công cụ TensorRT:
    # tạo công cụ TRT với cấu hình được chỉ định. Trong trường hợp này, nó tạo ra công cụ cho cả kịch bản Ngoại tuyến và Máy chủ cũng như cho các mục tiêu mặc định và có độ chính xác cao.
    
    tạo generate_engines RUN_ARGS="--benchmarks=dlrm --scenarios=Offline,Server --config_ver=default, high_accuracy"
  6. Chạy điểm chuẩn :
# chạy điểm chuẩn hiệu suất
tạo run_harness RUN_ARGS="--benchmarks=dlrm --scenarios=Offline --config_ver=default --test_mode=PerformanceOnly"
tạo run_harness RUN_ARGS="--benchmarks=dlrm --scenarios=Server --config_ver=default --test_mode=PerformanceOnly"
tạo run_harness RUN_ARGS="--benchmarks=dlrm --scenarios=Offline --config_ver=high_accuracy --test_mode=PerformanceOnly"
tạo run_harness RUN_ARGS="--benchmarks=dlrm --scenarios=Server --config_ver=high_accuracy --test_mode=PerformanceOnly"
 
# chạy benchmark độ chính xác
tạo run_harness RUN_ARGS="--benchmarks=dlrm --scenarios=Offline --config_ver=default --test_mode=AccuracyOnly"
tạo run_harness RUN_ARGS="--benchmarks=dlrm --scenarios=Server --config_ver=default --test_mode=AccuracyOnly"
tạo run_harness RUN_ARGS="--benchmarks=dlrm --scenarios=Offline --config_ver=high_accuracy --test_mode=AccuracyOnly"
tạo run_harness RUN_ARGS="--benchmarks=dlrm --scenarios=Server --config_ver=high_accuracy --test_mode=AccuracyOnly"

5.3 Chạy benchmark 3D U-Net

Lưu ý : Điểm chuẩn này chỉ có kịch bản Ngoại tuyến.

Để thiết lập bộ dữ liệu và mô hình 3D U-Net để chạy suy luận:

  1. Nếu bạn đã tải xuống và xử lý trước bộ dữ liệu, hãy chuyển sang bước 5
  2. Tải xuống dữ liệu thử thách BraTS .
  3. Trích xuất hình ảnh vào thư mục $MLPERF_SCRATCH_PATH/data/BraTS/MICCAI_BraTS_2019_Data_Training   .
  4. Chạy các lệnh sau:
    tạo download_model Benchmarks=3d-unet
    tạo preprocess_data BENCHMARKS=3d-unet
  5. Tạo các công cụ TensorRT:
    # tạo công cụ TRT với cấu hình được chỉ định. Trong trường hợp này, nó tạo ra công cụ cho cả kịch bản Ngoại tuyến và Máy chủ cũng như cho các mục tiêu mặc định và có độ chính xác cao.
    tạo generate_engines RUN_ARGS="--benchmarks=3d-unet --scenarios=Offline --config_ver=default,high_accuracy"
  6. Chạy điểm chuẩn:
# chạy điểm chuẩn hiệu suất
tạo run_harness RUN_ARGS="--benchmarks=3d-unet --scenarios=Offline --config_ver=default --test_mode=PerformanceOnly"
tạo run_harness RUN_ARGS="--benchmarks=3d-unet --scenarios=Offline --config_ver=high_accuracy --test_mode=PerformanceOnly"
 
# chạy benchmark độ chính xác 
tạo run_harness RUN_ARGS="--benchmarks=3d-unet --scenarios=Offline --config_ver=default --test_mode=AccuracyOnly" 
tạo run_harness RUN_ARGS="--benchmarks=3d-unet --scenarios=Offline --config_ver=high_accuracy --test_mode=AccuracyOnly"

6 hạn chế và cách thực hành tốt nhất để chạy MLPerf

Lưu ý những hạn chế và phương pháp hay nhất sau đây:

  • Để xây dựng công cụ và chạy điểm chuẩn bằng một lệnh duy nhất, hãy sử dụng phím tắt make run RUN_ARGS…  . Phím tắt này là sự thay thế hợp lệ cho lệnh make generate_engines … && make run_harness.. .
  • Bao gồm cờ –fast trong lệnh RUN_ARGS để kiểm tra các lần chạy nhanh bằng cách đặt thời gian chạy thành một phút. Ví dụ
tạo run_harness RUN_ARGS="–-fast --benchmarks=<bmname> --scenarios=<scenario> --config_ver=<cver> --test_mode=PerformanceOnly"

     Điểm chuẩn chạy trong một phút thay vì 10 phút mặc định. 

  • Nếu kết quả máy chủ là “INVALID”, hãy giảm server_target_qps để  chạy kịch bản Máy chủ. Nếu các giới hạn về độ trễ không được đáp ứng trong quá trình chạy thì kết quả sẽ là “INVALID”.
  • Nếu kết quả là “INVALID” khi chạy kịch bản Ngoại tuyến thì hãy tăng offline_expected_qps . “INVALID” chạy cho kịch bản Ngoại tuyến xảy ra khi hệ thống có thể cung cấp QPS cao hơn đáng kể so với QPS được cung cấp thông qua cấu hình offline_expected_qps  .
  • Nếu kích thước lô thay đổi, hãy xây dựng lại động cơ.
  • Chỉ các tiêu chuẩn BERT, DLRM, 3D-U-Net mới hỗ trợ các mục tiêu có độ chính xác cao.
  • 3D-U-Net chỉ có kịch bản Ngoại tuyến.
  • Máy chủ suy luận Triton chạy bằng cách chuyển triton  và high_accuracy_triton  cho các mục tiêu mặc định và high_accuracy  tương ứng bên trong đối số config_ver  .
  • Khi chạy lệnh bằng RUN_ARGS , hãy lưu ý đến dấu ngoặc kép. Lỗi có thể xảy ra nếu bạn bỏ qua dấu ngoặc kép. 

Phần kết luận

Blog này cung cấp quy trình từng bước để chạy và tái tạo kết quả suy luận MLPerf phiên bản 1.1 của trung tâm dữ liệu đóng trên máy chủ Dell EMC có GPU NVIDIA.