yalue/onnxruntime_go
A Go (golang) library wrapping microsoft/onnxruntime.
해결하는 문제
애플리케이션에서 ONNX 신경망을 실행하려는 Go 개발자는 어려움에 직면합니다. 공식 ONNX Runtime 라이브러리는 주로 C 및 C++ API를 제공하며, 기존 Go 래퍼는 MSVC 컴파일러에 의존하기 때문에 Windows에서 자주 실패합니다. Go의 cgo는 Windows에서 Mingw를 필요로 합니다. 이 라이브러리는 ONNX Runtime 공유 라이브러리를 런타임에 로드하여 이러한 마찰을 제거하므로, 동일한 Go 코드가 Windows, Linux, macOS, ARM64 시스템에서 ONNX 모델을 로드하고 실행할 수 있으며 ONNX Runtime 소스 코드에 대해 컴파일할 필요가 없습니다.
작동 방식
이 래퍼는 Go 글루 코드에만 cgo를 사용하며 ONNX Runtime에 직접 링크하지 않습니다. 대신 SetSharedLibraryPath를 호출하여 현재 플랫폼에 맞는 올바른 onnxruntime.so, .dll 또는 .dylib를 지정한 다음 ONNX C API 헤더를 사용하여 해당 공유 라이브러리에서 함수를 수동으로 로드합니다. 이 접근 방식은 Windows에서 작동하게 하고 모든 플랫폼에서 동일한 패턴을 유지합니다. 또한 이 라이브러리는 Go의 제네릭을 활용하여 타입이 지정된 텐서(NewTensor, NewEmptyTensor)를 정의하므로 float32와 같은 일반적인 데이터 타입을 추가 변환 없이 사용할 수 있습니다. 세션은 NewAdvancedSession으로 생성하며, 입력 및 출력 텐서 이름과 사전 할당된 텐서를 제공합니다. Run()을 호출하면 네트워크가 실행되고 출력 텐서가 업데이트됩니다. 빠른 반복을 위해 DynamicAdvancedSession도 있으며, 세션 생성 시가 아니라 Run() 시에 텐서를 제공할 수 있습니다.
대상 사용자
ONNX 신경망 추론을 애플리케이션에 통합하려는 Go 개발자, 특히 Windows를 포함한 여러 운영 체제를 대상으로 하는 개발자에게 적합합니다. 또한 특정 ONNX Runtime 버전을 사용해야 하고 간단하고 버전이 고정된 설정을 원하는 팀에게도 적합합니다. 이 라이브러리는 작은 스크립트에 충분히 간단하지만, 기본 ONNX Runtime 빌드에 포함된 경우 CUDA, TensorRT, CoreML과 같은 고급 실행 제공자를 지원합니다.
주요 특징
- 크로스 플랫폼 지원: 링크 대신 런타임에 공유 라이브러리를 로드하여 Windows, Linux, macOS, ARM64에서 작동합니다.
- 제네릭 기반 텐서:
NewTensor와NewEmptyTensor는 Go 제네릭을 사용하므로 일반적인 데이터 타입에 네이티브 Go 슬라이스를 보일러플레이트 없이 사용할 수 있습니다. - 성능을 위한 사전 할당 텐서: 입력 및 출력 텐서를 한 번 생성한 후 여러
Run()호출에서 재사용하여 약간의 속도 향상을 얻을 수 있습니다. - 실행 제공자 지원: CUDA, TensorRT, CoreML과의 호환성이 확인되었으며, 라이브러리에 포함되지 않은 경우 가속기 테스트를 자동으로 건너뛰는 테스트가 있습니다.
- 버전 관리: 프로젝트는 ONNX Runtime 1.31.0을 고정하고 있으며, 헤더 파일과 공유 라이브러리를 교체하여 간단한 업그레이드 경로를 제공합니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트