mattn/go-tflite
Go binding for TensorFlow Lite
개요
go-tflite는 TensorFlow Lite C API를 위한 Go 언어 바인딩입니다. Go 프로그램이 .tflite 모델을 로드하고, 텐서를 할당하고, 입력 데이터를 공급하고, 추론을 실행하고, 결과를 읽을 수 있게 해주며, 전체 TensorFlow 라이브러리를 컴파일할 필요가 없습니다. 이 프로젝트는 주요 OS/CPU 조합을 위한 사전 빌드된 TensorFlow Lite "buildkits"를 제공하며, 다른 TensorFlow 버전이 필요한 경우를 위해 C 라이브러리를 직접 빌드하는 지침도 제공합니다.
주요 기능
| 기능 | 의미 |
|---|---|
| Go 네이티브 API | NewModelFromFile, NewInterpreter, AllocateTensors, GetInputTensor, Invoke, GetOutputTensor와 같은 간단한 Go 함수가 기본 C 호출을 래핑합니다. |
| 사전 빌드된 바이너리 | 릴리스 tarball에는 libtensorflowlite_c.so (Windows의 경우 .dll) 및 XNNPACK 델리게이트 라이브러리가 포함되어 있어 몇 가지 명령어로 설치할 수 있습니다. |
| Edge-TPU 지원 | Google Coral Edge-TPU 델리게이트를 연결하는 지침이 제공되어 지원되는 장치에서 하드웨어 가속 추론이 가능합니다. |
| Docker / Binder 데모 | Binder에서 호스팅되는 즉시 실행 가능한 Jupyter 노트북(iris.ipynb)을 통해 브라우저에서 직접 go-tflite를 사용하여 작은 Iris 분류기를 학습시키는 방법을 보여줍니다. |
| 크로스 플랫폼 | Linux (amd64/arm64), macOS (amd64/arm64) 및 Windows (amd64-mingw)용 buildkits를 사용할 수 있습니다. |
| MIT 라이선스 | 상업용 프로젝트에서 자유롭게 사용, 수정 및 임베드할 수 있습니다. |
일반적인 워크플로우 (README 예제)
model := tflite.NewModelFromFile("sin_model.tflite")
interpreter := tflite.NewInterpreter(model, tflite.NewInterpreterOptions())
interpreter.AllocateTensors()
// Fill the first input tensor
v := float64(1.2) * math.Pi / 180.0
interpreter.GetInputTensor(0).Float32s()[0] = float32(v)
// Run inference
interpreter.Invoke()
// Read the first output tensor
result := float64(interpreter.GetOutputTensor(0).Float32s()[0])
- 로드: 컴파일된 TensorFlow Lite 모델 (
*.tflite)을 로드합니다. - 생성: 선택적 구성 (
InterpreterOptions)을 사용하여 인터프리터를 생성합니다. - 할당: 모든 텐서에 대한 메모리를 할당합니다.
- 쓰기: 텐서의 타입 지정 슬라이스 헬퍼 (
Float32s())를 통해 입력 값을 씁니다. - 호출: 모델을 실행합니다.
- 읽기: 출력 값을 읽습니다.
모든 리소스는 메모리 누수를 방지하기 위해 Delete() 호출을 통해 수동으로 해제해야 합니다.
시작하기
- C 라이브러리 설치: 릴리스 페이지에서 적절한
tflite-buildkit-<tag>-<target>.tar.gz를 다운로드하여/usr/local(Linux/macOS) 또는 사용자 지정 폴더 (Windows)에 추출한 다음, Linux에서는ldconfig를 실행합니다. - CGO 플래그 설정: 헤더/라이브러리를 표준이 아닌 위치에 배치한 경우 (
CGO_CFLAGS,CGO_LDFLAGS,LD_LIBRARY_PATH)를 설정합니다. - Go 코드 작성: 위 API를 사용합니다. 저장소에는 더 완전한 샘플이 포함된
_example디렉토리가 있습니다. - 실행:
go build를 실행합니다 (TensorFlow Lite를 XNNPACK과 함께 빌드한 경우-tags xnnpack_builtin추가).
go-tflite 사용 시기
- 장치 내 추론이 필요한 Go 서비스나 CLI를 구축하는 경우 (예: 에지 장치, IoT 또는 저지연 서버).
- 무거운 TensorFlow 런타임을 임베드하고 싶지 않은 경우; TensorFlow Lite의 C API는 가볍고 빠릅니다.
- Go에서 XNNPACK이나 Google Edge TPU와 같은 하드웨어 델리게이트를 활용하려는 경우.
제한 사항
- 바인딩이 얇습니다. 여전히 텐서 메모리를 수동으로 관리해야 하며 모델이 예상하는 모양/타입을 이해해야 합니다.
- 학습은 지원되지 않습니다. TensorFlow Lite와 마찬가지로 go-tflite는 추론 전용입니다.
- 호환되는
libtensorflowlite_c라이브러리를 제공해야 합니다. 버전이 일치하지 않으면 런타임 오류가 발생할 수 있습니다.
리소스
- Binder 노트북 – 대화형 Iris 분류기 데모.
- Docker 이미지 – 노트북 사용을 위한
ghcr.io/mattn/go-tflite/gophernotes. - Edge-TPU 가이드 – Google Coral 저장소 및 설치 단계 링크.
- 소스 예제 – 저장소의
_example폴더를 참조하세요.
위의 모든 정보는 저장소의 README에서 직접 가져온 것입니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트