Chạy Private ASR trên Ascend 910B: Thiết lập, điều chỉnh điều hành và thông lượng
Một hướng dẫn đầy đủ về việc hạ cánh một công cụ thoại sang văn bản của Trung Quốc trên các NPU Huawei Ascend trong một môi trường riêng tư không khí - ma trận phiên bản, chuyển đổi mô hình ONNX-to-OM, lệnh triển khai container, sáu cạm bẫy tấn công trên triển khai thực tế và số liệu hiệu suất tham khảo. Dành cho các kỹ sư triển khai ASR trong môi trường Xinchuang.

Bài viết này đi qua việc hạ cánh một công cụ thoại thành văn bản của Trung Quốc trên các NPU Huawei Ascend trong một môi trường riêng tư - phiên bản môi trường, chuyển đổi mô hình, lệnh triển khai, cạm bẫy và số liệu hiệu suất tham khảo.
Trên những con số: các con số được đánh dấu "spec" đến từ sản phẩm được xuất bản Thông số kỹ thuật. Bảng hiệu suất cho magnitudes tham chiếu trong điều kiện điển hình; các giá trị thực tế thay đổi tùy theo điều kiện âm thanh, kích thước mô hình và chiến lược đồng thời. Luôn luôn đo lường trên khối lượng công việc của riêng bạn.
Tại sao nó phải chạy trên phần cứng trong nước
Trong chính phủ, tài chính và quốc phòng, các hệ thống không chỉ phải là "dữ liệu tại chỗ" mà còn phải là "tự phụ thuộc về công nghệ.Điều đó có nghĩa là chuyển tính toán cơ bản từ GPU nhập khẩu sang chip Ascend, Cambricon, và Hygon trong nước, và hệ điều hành sang Kylin, UnionTech và các hệ thống trong nước khác.
Trong thuật ngữ kỹ thuật, điều này trở thành ba hạn chế khó khăn:
- Dữ liệu cư trú - âm thanh cuộc họp chứa các cuộc thảo luận nội bộ, và nhiều tổ chức rõ ràng cấm âm thanh rời khỏi mạng nội bộ
- Xinchuang mua sắm - GPU nhập khẩu có thể không xuất hiện trong danh sách mua đã được phê duyệt
- Hoạt động không khí - một số trang web không có kết nối bên ngoài, vì vậy trọng lượng mô hình phải được đóng gói vào môi trường phía trước
Điểm cốt lõi: triển khai tại chỗ trả lời "dữ liệu ở đâu "; bản địa hóa trả lời" ai kiểm soát công nghệ. Cùng nhau "Họ hội tụ trên một nhiệm vụ duy nhất - nhận được ASR chạy trên NPU trong nước, và chạy đủ nhanh.
Các accelerator được hỗ trợ
Được xây dựng dựa trên nghiên cứu của NEU NLP (Đại học Đông Bắc), động cơ VoiVision hỗ trợ các bộ gia tốc chính:
| Loại hình | Các đại diện | Sử dụng |
|---|---|---|
| NVIDIA | T4 / L4 / A10 / A100 | Tổng quát, hiệu suất cao |
| Ascend | 310P / 910B | Máy chủ nội địa hóa, máy chủ nội địa |
| Cambricon | MLU370 / MLU590 | Máy chủ nội địa hóa, máy chủ nội địa |
| Hygon DCU | Dòng DCU | Đường dẫn x86 trong nước |
| Chỉ có CPU | x86 / ARM | Tái sử dụng hiện có, đồng thời thấp |
Ascend hiện có Hệ sinh thái hoàn chỉnh nhất trong số các máy gia tốc trong nước (CANN + MindSpore + vườn thú mô hình). 910B nhắm mục tiêu đào tạo và suy luận thông lượng cao, trong khi 310P nhắm mục tiêu cạnh và sử dụng năng lượng thấp.Đối với cuộc họp đồng thời kéo dài phiên âm giọng nói, một mô hình phổ biến là 910B cho suy luận trung tâm và 310P cho các nút cạnh.
Thiết lập môi trường: Căn chỉnh phiên bản là cái bẫy lớn nhất
Nỗi đau trong Ascend Hệ sinh thái không phải là tính toán, nó là phiên bản ma trận. Trình điều khiển, firmware, CANN, khung và định dạng mô hình - bất kỳ một trong năm không đồng bộ hóa tạo ra các lỗi khó hiểu.
Một sự kết hợp mà chúng ta thường thấy ổn định:
| Thành phần | Phiên bản | Ghi chú |
|---|---|---|
| Trình điều khiển / firmware | Tắt chặt với CANN | Kiểm tra bảng tương thích chính thức trước khi nâng cấp |
| CANN (Cần) | Dòng 8.x | Thư viện nhà điều hành và các công cụ chuyển đổi mô hình sống ở đây |
| Container (Container) | Ascend Docker Thời gian chạy | Yêu cầu - Docker đơn giản không thể gắn NPU |
| khung suy luận | Thời gian chạy ONNX + ACL | Các mô hình OM hoạt động tốt mà không có MindSpore |
| Hệ điều hành | mởEuler / Kylin V10 / UnionTech UOS | Thông thường trong môi trường Xinchuang |
Bước đầu tiên là luôn xác nhận NPU có thể nhìn thấy:
# List NPU devices and status
npu-smi info
# Expect a device list with 910B entries in a healthy state
# If the card is not visible here, nothing downstream matters — fix the driver first
Bẫy: trên một số hệ thống Kylin V10, npu-smi info báo cáo lỗi daemon dmp ngay sau khi cài đặt trình điều khiển. Nguyên nhân hóa ra là xung đột giữa phiên bản dkms của hệ thống và trình cài đặt driver. Việc sửa chữa là loại bỏ dkms hệ thống và cài đặt lại bằng cách sử dụng phiên bản đi kèm với gói trình điều khiển. Các vấn đề thích ứng cấp phân phối như thế này hiếm khi được ghi nhận và là một trong những blockers phổ biến nhất tại chỗ.
Chuyển đổi mô hình: ONNX sang OM
Các mô hình ASR thường được đào tạo trong PyTorch, xuất sang ONNX, sau đó chuyển đổi sang định dạng OM của Ascend.
3 điều cần xem xét khi xuất ONNX
torch.onnx.export(
model, dummy_input,
"asr.onnx",
opset_version=14, # Ascend supports lower opsets better — avoid the newest
do_constant_folding=True,
input_names=["audio", "audio_len"],
output_names=["logits"],
dynamic_axes={ # critical: audio length is variable
"audio": {0: "batch", 1: "time"},
"logits": {0: "batch", 1: "time"},
},
)
Ba nơi mà điều này thường xảy ra sai:
- Phiên bản Opset - mới hơn không tốt hơn. Các phiên bản opset cao tấn công các nhà khai thác không được hỗ trợ thường xuyên hơn trong quá trình chuyển đổi; 14 là một lựa chọn đã được thử nghiệm tốt.
- Trục động - chiều dài âm thanh vốn có là biến thể, vì vậy
dynamic_axesphải được khai báo, nếu không bạn bị giới hạn ở đầu vào chiều dài cố định và kết quả không thể sử dụng trong sản xuất. - không đổi gấp -
do_constant_folding=Truethu hẹp đáng kể đồ thị và cải thiện thành công chuyển đổi.
Chuyển đổi với ATC
atc --model=asr.onnx \
--framework=5 \
--output=asr_om \
--input_format=ND \
--input_shape="audio:-1,-1;audio_len:-1" \
--dynamic_dims="1,16000;1,32000;1,48000" \
--soc_version=Ascend910B \
--precision_mode=allow_fp16 \
--log=error
Các tham số thực sự có nghĩa là gì:
--soc_version- phải phù hợp với phần cứng vật lý chính xác. Chỉ định 910A trên một 910B không thành công tại thời gian tải với một lỗi mơ hồ.--dynamic_dims- các hồ sơ hình dạng động.Đối với âm thanh, hồ sơ theo thời gian; quá nhiều hồ sơ làm tăng thời gian biên dịch, quá ít kích hoạt biên dịch lại thường xuyên và độ trễ jitter.--precision_mode-allow_fp16thường chi phí chính xác không đáng kể trên ASR trong khi cải thiện thông lượng rõ ràng.
Bạn có nên quantize không?
| Độ chính xác | Thông lượng | Độ chính xác |
|---|---|---|
| FP16 - FP16 | Cơ sở | Cơ sở |
| INT8 | Lợi ích rõ ràng | Chi phí đáng chú ý |
Phán quyết (phán quyết): giữ FP16 nơi độ chính xác là quan trọng (y tế, các cuộc họp pháp lý); INT8 là giao dịch tốt hơn nơi dung sai lỗi cao hơn, chẳng hạn như các bản ghi đứng nội bộ và các bản ghi đào tạo.
Deployment: Container là lựa chọn duy nhất hợp lý
Lắp đặt bằng kim loại trần gần như không thể duy trì được trên các trang web của Xinchuang. Chúng tôi cung cấp các container:
docker run -it --name asr_server \
--device /dev/davinci0 \
--device /dev/davinci_manager \
--device /dev/devmm_svm \
--device /dev/hisi_hdc \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /data/models:/models \
-p 8000:8000 \
asr-server:910b \
./asr_server --model /models/asr_om --port 8000
- Chạy trên kim loại trần, đám mây chính phủ và môi trường địa phương hóa;
- Tích hợp với OA và các hệ thống họp thông qua các API RESTful / WebSocket tiêu chuẩn;
- Scale elastically by concurrency (tạm dịch: quy mô đàn hồi bằng đồng thời).
Lưu ý các mục nhập --device: Mất bất kỳ một trong số đó tạo ra một lỗi khởi tạo ACL, và lỗi sẽ không cho bạn biết một thiết bị bị mất.Đây là rào cản phổ biến nhất cho những người mới đến.
Ngoài ra - Đừng tạo ra một giao thức riêng tư. Sử dụng tiêu chuẩn REST (tệp phiên âm giọng nói) và WebSocket (trực-time streaming), hoặc tích hợp với OA của khách hàng và các hệ thống họp trở nên đau đớn.
Nếu bạn đã có máy chủ, hãy triển khai software-only engine để có được phiên âm giọng nói riêng tư trên các bộ gia tốc trong nước mà không cần mua phần cứng.
Hiệu suất tham chiếu
Điều kiện thử nghiệm: Ascend 910B, FP16, âm thanh họp Trung Quốc, 16 kHz mono.
| Số liệu | Tài liệu tham khảo | Ghi chú |
|---|---|---|
| Yếu tố thời gian thực (RTF) | ~ 0.1 trật tự | 1 tiếng âm thanh trong vài biên bản cuộc họp |
| Các luồng đồng thời trên mỗi thẻ | Tens | Pure phiên âm giọng nói, đồng thời cuộc họp bền vững |
| Độ trễ token đầu tiên | Tiểu giây | Chế độ phát trực tuyến; thường dưới 1s trong thực tế |
| Trung Quốc phiên âm giọng nói chính xác | ≥98% | Kịch bản cuộc họp Tiêu chuẩn tiếng Quan Thoại (spec) |
| Phạm vi phủ sóng phương ngữ | 22 | Tự động phát hiện (spec) |
Ừ Ừ Ừ Ừ️ Con số đồng thời ở trên là Chỉ có phiên âm giọng nói (thẻ ASR duy nhất, không có cấu trúc phân tách người nói hoặc phút). Thêm tách loa cộng với trích xuất chủ đề / hành động làm giảm đáng kể công suất mỗi thẻ - thiết bị được đánh giá tại 10 cuộc họp đồng thời, trong đó đề cập đến đường ống đầy đủ (phiên âm giọng nói + tách + cấu trúc); hình thức cụm được đánh giá ở 50+ luồng. Luôn luôn hỏi lớp nào mà nhà cung cấp đang báo giá - ba lớp khác nhau bằng bội số.
Sáu cạm bẫy từ triển khai thực tế
Đây là phần có giá trị nhất của bài viết. Tất cả những người này đều bị tấn công trên trang web.
1. Hình dạng động gây ra việc biên dịch lại liên tục Nếu không có --dynamic_dims, mỗi độ dài âm thanh mới sẽ kích hoạt một biểu đồ biên dịch lại và độ trễ tăng lên đến giây. Hồ sơ theo thời gian đã đưa nó trở lại dưới một giây.
2. Bộ nhớ âm thanh dài Nạp một cuộc họp ghi âm hai giờ trực tiếp vào mô hình OOMs thiết bị. Bạn cần Chunked Incremental Inference (truy luận gia tăng) -segment theo VAD và giải mã từng đoạn thay vì tải toàn bộ tệp.
3. Các nhà khai thác không được hỗ trợ thất bại im lặng Một biến thể của LayerNorm không có đối tác Ascend. ATC không gây ra lỗi nào trong quá trình chuyển đổi, và mô hình đầu ra tất cả các số không tại thời gian chạy. Luôn chạy kiểm tra tương đương sau khi chuyển đổi: chạy cùng một âm thanh thông qua ONNX Runtime (CPU) và OM (NPU) và so sánh đầu ra.
4. Context leaks under multi-threaded concurrency (rò rỉ ngữ cảnh dưới đồng thời đa luồng) Một phiên bản trước đã tạo ra một ngữ cảnh ACL riêng biệt cho mỗi yêu cầu và các ngữ cảnh cạn kiệt dưới tải. Context pooling đã khắc phục.
5. Các mô hình phải được chuyển đổi lại sau khi nâng cấp driver Sau khi nâng cấp CANN lớn, các mô hình OM cũ hơn có thể không tải hoặc mất hiệu suất. Đặt chuyển đổi mô hình trong CI thay vì chuyển đổi bằng tay một lần. (Tạm dịch: Đặt chuyển đổi mô hình trong CI thay vì chuyển đổi bằng tay một lần.)
6.Đóng gói ngoại tuyến cho các trang web không khí Trong môi trường cách ly vật lý, các phụ thuộc CANN, trình điều khiển, trọng lượng mô hình, phông chữ và chứng chỉ đều phải được đóng gói trước. Một lần chúng tôi đến trang web để tìm một phông chữ CJK bị mất, và mọi bản sao đều trở lại như hộp đậu phụ. Rehease the full deployment on an equivalent environment before shipping the offline package. (Tạm dịch: Rehease the full deployment on an equivalent environment before shipping the offline package.)
Khi nào không nên chọn gia tốc trong nước
Trực tiếp với anh. Bỏ qua nếu:
- Không có Xinchuang hoặc bản địa hóa nhiệm vụ → GPU Hệ sinh thái là nhiều trưởng thành hơn, không làm việc cho chính mình
- Không ai trong nhóm biết rằng CANN → chi phí hoạt động sẽ vượt xa bất cứ điều gì phần cứng tiết kiệm
- Đồng thời là một chữ số → CPU đơn giản là đủ, bỏ qua bộ tăng tốc
Các máy gia tốc trong nước là cuộc gọi đúng khi: có một nhiệm vụ tuân thủ rõ ràng + áp lực đồng thời bền vững + khả năng kỹ thuật để sao lưu nó.
Tư vấn kích thước
- Cụm địa phương mới: VV05 / VV10+ Ascend hoặc bộ gia tốc Cambricon;
- Tái sử dụng x86 hiện có: động cơ trên CPU hoặc Hygon DCU;
- Môi trường hỗn hợp: thống nhất NVIDIA và gia tốc trong nước, lịch trình theo tải.
Nếu bạn đang cân nhắc riêng tư so với đám mây, hãy xem on-premise ASR selection guide.
Câu hỏi thường gặp
Q: phiên âm giọng nói hỗ trợ chip nào trong nước?
A: Động cơ VoiVision tự nhiên hỗ trợ Ascend (310P/910B), Cambricon (MLU370 / MLU590), Hygon DCU, và toàn bộ đội ngũ NVIDIA; nó cũng chạy trên CPU một mình, bao gồm toàn bộ ngăn xếp địa phương và trong nước.
Q: Tại sao ASR phải chạy trên máy gia tốc trong nước?
A: Các chương trình chính phủ, tài chính và quốc phòng thường yêu cầu cư trú dữ liệu, tuân thủ mua sắm của Xinchuang và hoạt động không khí cùng một lúc. Kết hợp lại, những điều này thường loại bỏ hoàn toàn GPU nhập khẩu, để lại NPU trong nước là con đường duy nhất khả thi.
Q: Những điểm thất bại phổ biến chuyển đổi ONNX sang Ascend OM là gì?
A: Ba cái chính: Một phiên bản opset quá cao gây ra các toán tử không được hỗ trợ (14 là một lựa chọn an toàn), thiếu các khai báo dynamic_axes giới hạn bạn với âm thanh có chiều dài cố định và một soc_version không phù hợp với phần cứng thực tế, không thành công tại thời gian tải với một lỗi mơ hồ. Luôn luôn chạy kiểm tra tương đương đầu ra giữa CPU ONNX Runtime và NPU OM sau khi chuyển đổi.
Q: Số lượng hóa INT8 trên Ascend có đáng giá không?
A: Nó phụ thuộc vào mức độ lỗi mà kịch bản chịu đựng. INT8 mang lại lợi nhuận thông lượng rõ ràng nhưng chi phí độ chính xác đáng chú ý. Giữ FP16 cho các kịch bản nhạy cảm với độ chính xác như các cuộc họp y tế hoặc pháp lý; INT8 là một giao dịch tốt hơn cho các bản ghi âm đứng và đào tạo nội bộ.
Q: Thiết bị nào phải được gắn để chạy Ascend trong một container?
A: Bốn trong số đó là /dev/davinci0, /dev/davinci_manager, /dev/devmm_svm và /dev/hisi_hdc, cộng với thư mục driver. Mất bất kỳ một trong số đó tạo ra lỗi khởi tạo ACL và thông báo lỗi sẽ không cho bạn biết thiết bị bị bị mất.
Q: phiên âm giọng nói có thể chỉ chạy trên CPU không?
A: Vâng. Công cụ được tối ưu hóa cho CPU, vì vậy nó chạy trên các máy chủ địa phương hóa hoặc chung mà không có bộ tăng tốc rời rạc - lý tưởng cho sự đồng thời thấp hoặc tái sử dụng phần cứng hiện có.
Q: Làm thế nào để triển khai với Docker / K8s?
A: VoiVision được cung cấp dưới dạng một hình ảnh container với triển khai Docker và Kubernetes một lệnh, chạy trên kim loại trần, đám mây chính phủ và môi trường bản địa hóa, và tích hợp thông qua các API RESTful / WebSocket tiêu chuẩn.
Q: Độ chính xác có giảm trên máy gia tốc trong nước?
A: Không. Mô hình được xây dựng trên nghiên cứu của NEU NLP (Đại học Đông Bắc); bộ gia tốc chỉ ảnh hưởng đến thông lượng và độ trễ. Sau khi lượng tử hóa và điều chỉnh nhà điều hành trên Ascend / Cambricon, độ chính xác phiên âm giọng nói của Trung Quốc vẫn ở cùng mức.
