Ultralytics YOLO용 Huawei Ascend 통합#
Huawei Ascend AI 프로세서에서 컴퓨터 비전 모델을 배포하려면 Ascend AI Core에서 실행되는 .om 오프라인 모델 형식으로 컴파일해야 합니다. Ultralytics YOLO 모델을 Ascend로 내보내면 로보틱스, 산업 검사, 스마트 카메라 배포에 사용되는 Atlas 개발 보드와 OrangePi AIPro 장치에서 빠르고 저전력으로 추론을 실행할 수 있습니다.
Huawei Ascend란 무엇인가요?#
Huawei Ascend는 CANN(신경망 컴퓨팅 아키텍처)과 결합된 AI 프로세서 제품군입니다. CANN은 호스트 측 도구인 ATC(Ascend 텐서 컴파일러)를 제공하며, 이 도구는 표준 ONNX 그래프를 Ascend AI Core용 하드웨어별 .om 오프라인 모델로 변환합니다.
ATC는 호스트에서만 실행되므로 Ascend 하드웨어를 연결하지 않은 일반 x86-64 또는 ARM64 Linux 머신에서 모델을 컴파일한 다음, 결과 .om을 대상 장치에 복사하여 추론할 수 있습니다.
Ascend NPU에서 학습#
Ultralytics는 torch_npu을 사용한 단일 및 다중 NPU 학습을 지원하며, AMP, 검증, 체크포인트 저장, 재개, AutoBatch 기능도 제공합니다. NPU 하나를 선택하려면 device=npu:0을, 여러 NPU를 선택하려면 device=npu:0,1를 사용합니다. 분산 학습에는 HCCL을 사용합니다. 호환되는 CANN, PyTorch, torch_npu 버전을 설치하고 먼저 CANN 환경을 설정합니다. 설치 및 사용 예시는 Ascend NPU 학습 섹션을 참조합니다.
Ascend 내보내기 형식#
Ultralytics 내보내기 도구는 먼저 중간 ONNX 그래프를 작성한 다음, name 인수로 지정한 대상 SoC용 컴파일을 ATC에 요청합니다. 그 결과 .om 바이너리와 Ultralytics 메타데이터가 포함된 독립형 모델 디렉터리가 생성됩니다.
Ascend 모델의 주요 기능#
- 전용 AI Core: 컴파일된 모델은 호스트 CPU가 아닌 Ascend AI Core에서 실행되므로 실시간 카메라 파이프라인의 처리량이 크게 향상됩니다.
- 호스트 측 컴파일: ATC는 연결된 NPU가 없어도 실행되므로 CI, 컨테이너 또는 노트북에서 내보낼 수 있습니다.
- ONNX 우선: 표준 Ultralytics ONNX 내보내기는 독점 중간 형식 없이 CANN 도구 체인에 직접 전달됩니다.
- 정적 셰이프: 컴파일 시 입력 셰이프가
.om에 포함되므로 런타임 셰이프 협상 오버헤드가 제거됩니다. - 다중 장치 대상 지정:
name을 변경하면 동일한 ONNX 그래프를 지원되는 모든 SoC용으로 컴파일할 수 있습니다.
지원 작업#
Huawei Ascend 내보내기는 Ultralytics의 7개 작업을 모두 지원합니다. 시맨틱 세그멘테이션과 깊이 추정은 해당 헤드를 제공하는 유일한 모델 계열인 YOLO26에서만 사용할 수 있습니다.
지원 장치#
name으로 대상 SoC를 지정합니다. ATC는 이를 .om에 --soc_version로 포함하므로 배포할 보드와 일치해야 합니다. 로컬에서는 CANN 설치에 해당 커널이 포함된 모든 SoC용으로 컴파일할 수 있습니다. Ultralytics Platform은 Ascend310P1, Ascend310P3, Ascend310B1, Ascend310B4 대상을 지원합니다.
name | 장치 | 로컬 내보내기 | Platform |
|---|---|---|---|
Ascend310P3 | Atlas 300I Pro, Atlas 300V Pro | ✅ | ✅ |
Ascend310P1 | Atlas 300I | ✅ | ✅ |
Ascend310B4 | OrangePi AIPro 8T, Atlas 200I A2 (8 TOPS) | ✅ | ✅ |
Ascend310B1 | OrangePi AIPro 20T, Atlas 200I A2 (20 TOPS) | ✅ | ✅ |
Ascend로 내보내기: YOLO 모델 변환#
Ascend 내보내기에는 Linux 전용 CANN 툴킷이 필요합니다. atc 컴파일러가 PATH에 있어야 합니다. 내보내기 전에 CANN 환경 스크립트를 설정합니다(예: source /usr/local/Ascend/ascend-toolkit/set_env.sh).
설치#
Ultralytics를 설치한 다음 Huawei에서 CANN을 별도로 설치합니다.
# Install the required package for YOLO
pip install ultralyticsCANN 툴킷은 Huawei에서 배포하며 자동으로 설치되지 않습니다. Ascend 커뮤니티 다운로드 페이지에서 다운로드하거나, ATC 및 종속 항목이 포함된 공식 ascendai/cann 컨테이너 이미지를 사용합니다.
ATC는 연산자 커널이 설치된 SoC 제품군용으로만 컴파일할 수 있습니다. ascend310p 커널만 포함된 툴킷은 Ascend310B4 대상을 지정하면 No supported Ops kernel and engine are found for ... Conv2D 오류와 함께 실패합니다. 배포 장치에 맞는 Ascend-cann-kernels-<soc> 패키지를 설치합니다.
사용법#
Ascend 형식은 내보내기, 예측, 검증 모드를 지원합니다. 추론과 검증은 Ascend 하드웨어에서 실행됩니다. 모델을 내보낸 다음, 내보낸 모델을 불러와 추론을 실행하거나 정확도를 검증합니다.
from ultralytics import YOLO
# YOLO26 모델 로드
model = YOLO("yolo26n.pt")
# Atlas 200I / OrangePi AIPro 보드용 Ascend 형식으로 모델 내보내기
model.export(format="ascend", name="Ascend310B4")
# 내보낸 Ascend 모델을 로드하고 디바이스에서 추론을 실행합니다
ascend_model = YOLO("yolo26n_ascend_model")
results = ascend_model("https://ultralytics.com/images/bus.jpg")내보내기 인수#
| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
format | str | 'ascend' | 내보낸 모델의 대상 형식으로, Ascend AI Processors와의 호환성을 정의합니다. |
name | str | 'Ascend310B4' | ATC에 전달하는 대상 SoC로, --soc_version이며 예를 들어 Ascend310P3입니다. CANN 설치에 커널이 있는 SoC라면 무엇이든 사용할 수 있습니다. 지원 디바이스를 참조하세요. 배포 디바이스와 일치해야 합니다. |
imgsz | int 또는 tuple | 640 | 모델 입력의 원하는 이미지 크기로, .om에 정적 shape으로 고정됩니다. |
batch | int | 1 | 오프라인 모델에 컴파일되는 정적 배치 크기입니다. |
quantize | int | 16 | 양자화 정밀도입니다. Ascend 내보내기는 FP16만 지원하며 지정되지 않은 경우 16을 자동으로 활성화합니다. 더 이상 사용되지 않는 half/int8 플래그를 대체합니다. |
opset | int | 17 | 중간 그래프의 ONNX opset입니다. CANN ONNX 파서가 지원하는 가장 높은 버전인 17로 제한됩니다. |
simplify | bool | True | onnxslim을 사용하여 중간 ONNX 그래프를 간소화합니다. |
nms | bool, 선택 사항 | None | 원시 출력(None, 기본값), 내장 NMS(True) 또는 NMS가 없는 head(False)를 선택합니다. |
device | str | None | 중간 ONNX 내보내기 단계의 디바이스로, 기본값은 CPU(device=cpu)입니다. ATC 컴파일에서는 사용되지 않습니다. |
Ascend AI Core는 컨볼루션 입력으로 DT_FLOAT16과 DT_INT8만 허용하므로 FP32 오프라인 모델은 하드웨어에서 실행할 수 없습니다. quantize=32를 요청하면 실행할 수 없는 모델을 조용히 생성하는 대신 오류가 발생합니다.
내보내기 프로세스에 관한 자세한 내용은 내보내기에 관한 Ultralytics 문서 페이지를 참조하세요.
출력 구조#
내보내기가 성공하면 다음과 같은 구조의 모델 디렉터리가 생성됩니다:
yolo26n_ascend_model/
├── yolo26n_Ascend310B4.om # Compiled Ascend offline model (AI Core executable)
└── metadata.yaml # Model metadata (classes, image size, task, etc.).om 파일은 CANN 런타임이 디바이스에서 로드하는 컴파일된 오프라인 모델입니다. 파일 이름에는 대상 SoC가 포함되어 있어 아티팩트 자체에서 정보를 확인할 수 있습니다. 로더가 해당 디렉터리에서 찾은 단일 모델을 선택하므로 디렉터리마다 .om을 하나씩만 유지하세요. metadata.yaml에는 Ultralytics 추론 파이프라인에서 사용하는 클래스 이름, 이미지 크기 및 기타 정보가 포함됩니다.
내보낸 YOLO Ascend 모델 배포#
Ultralytics YOLO 모델을 Ascend 형식으로 성공적으로 내보낸 다음 단계는 Ascend 하드웨어에 배포하는 것입니다.
런타임 설치#
추론을 실행하려면 디바이스에 CANN 런타임과 CANN의 pyACL 바인딩을 래핑하는 ais_bench Python 패키지가 필요합니다. Huawei Ascend 도구 리포지토리에서 빌드하고 설치하세요.
# On the Ascend device, with CANN installed and sourced
source /usr/local/Ascend/ascend-toolkit/set_env.sh
# Build and install the ais_bench inference wheel
git clone https://gitee.com/ascend/tools.git
cd tools/ais-bench_workload/tool/ais_bench
pip3 wheel ./backend -v
pip3 install ./aclruntime-*.whl
pip3 wheel ./ -v
pip3 install ./ais_bench-*.whl내보낸 yolo26n_ascend_model 디렉터리를 디바이스에 복사한 다음 다른 Ultralytics 형식과 동일한 방식으로 추론을 실행합니다.
권장 워크플로#
- Ultralytics Train Mode를 사용하여 모델을 학습하거나 사전 학습된 체크포인트에서 시작합니다.
- CANN이 설치된 Linux 호스트에서 대상 SoC에 해당하는
name을 전달하여 Ascend 형식으로 내보냅니다. - 내보낸 모델 디렉터리를 Ascend 디바이스에 복사합니다.
- 디바이스에서 추론을 실행하려면 CANN 런타임과
ais_bench을 사용하여 배포합니다.
실제 애플리케이션#
Ascend 하드웨어에서 실행되는 YOLO 모델은 다양한 임베디드 및 산업용 비전 애플리케이션에 적합합니다.
- 산업 자동화: 생산 라인에서 고속 품질 검사와 결함 감지를 수행합니다.
- 스마트 감시: 중앙 서버 없이 엣지 게이트웨이에서 실시간 다중 카메라 객체 감지를 수행합니다.
- 로보틱스: 자율 이동 로봇과 협동 로봇 팔을 위한 온보드 인식을 수행합니다.
- 스마트 시티: 저전력 도로변 장치에서 교통 모니터링과 보행자 분석을 수행합니다.
요약#
이 가이드에서는 Huawei Ascend NPU에서 Ultralytics YOLO를 학습하고 CANN ATC 컴파일러를 사용하여 모델을 Ascend .om 형식으로 내보내는 방법을 알아보았습니다. 내보내기는 호스트에서 전적으로 실행되고 독립적으로 사용할 수 있는 모델 디렉터리를 생성하며, 단일 name 인수를 통해 지원되는 모든 Ascend SoC를 대상으로 합니다.
사용법에 대한 자세한 내용은 공식 CANN 문서를 참조하세요.
또한 다른 Ultralytics YOLO 통합에 대해 자세히 알아보려면 통합 가이드 페이지에서 다양한 유용한 리소스를 확인하세요.
자주 묻는 질문#
Ultralytics와 CANN 툴킷을 설치하고 CANN 환경을 불러와
atc이PATH에 포함되도록 한 다음, Python에서model.export(format="ascend", name="Ascend310B4")를 사용하거나 CLI에서yolo export model=yolo26n.pt format=ascend name=Ascend310B4을 사용하여 내보냅니다.name를 배포 디바이스의 SoC로 설정합니다.아니요. ATC 컴파일러는 호스트에서 전적으로 실행되므로 NPU가 연결되지 않은 표준 x86-64 또는 ARM64 Linux 머신에서도 컴파일할 수 있습니다. 내보낸
.om에서 추론을 실행할 때만 Ascend 하드웨어가 필요합니다.CANN 설치에 요청한 SoC용 연산자 커널이 포함되어 있지 않습니다. 각 툴킷에는 특정 SoC 제품군용 커널이 포함되어 있으므로 대상에 맞는
Ascend-cann-kernels-<soc>패키지를 설치하거나 해당 디바이스 제품군용으로 빌드된 컨테이너 이미지를 사용하세요.Ascend AI Core 컨볼루션은
DT_FLOAT16및DT_INT8텐서만 허용합니다. FP32 오프라인 모델은 하드웨어에서 실행되지 않으므로 내보내기 도구는--precision_mode=force_fp16로 컴파일하고 명시적인quantize=32요청은 거부합니다.설치된 CANN 툴킷이 커널을 제공하는 모든 SoC를
name인수로 선택할 수 있습니다. 검증된 네 가지 대상과 Ultralytics Platform에서의 사용 가능 여부는 지원 디바이스를 참조하세요.