Failed to load model: Failed to load model using file:// URL. To load local models in Node, install '@tensorflow/tfjs-node' and retry: npm install @tensorflow/tfjs-node
8/31/2025
Auto-trade-model Troubleshooting & Resolution
이 문서는 Windows 환경에서 auto-trade-model
프로젝트를 실행하면서 마주친 문제들과 그 원인, 진단 방법, 해결 과정을 정리한 것입니다. 블로그 포스트용으로도 바로 복사하여 붙여넣을 수 있게 구성했습니다.
개요
- 문제 요약:
src/backtest.ts
실행 시 모델이 로드되지 않거나(또는 아무 출력이 없음),file://
방식으로 로컬 모델을 읽을 때 실패하는 현상이 발생. - 주요 원인:
- Node 환경에서 TensorFlow 모델을 파일 시스템에서 직접 읽으려면 Node용 네이티브 바인딩(
@tensorflow/tfjs-node
)이 필요하지만 설치/로딩에 실패함. file://
URL 생성 및 Windows 경로 처리 문제로 인해 중복된 드라이브 접두사(C:\C:\...
)가 발생.@tensorflow/tfjs-node
의 prebuilt 바이너리가 현재 Node ABI와 맞지 않아 소스 빌드로 넘어가고 빌드 툴(Visual C++) 부족으로 실패.
- Node 환경에서 TensorFlow 모델을 파일 시스템에서 직접 읽으려면 Node용 네이티브 바인딩(
환경
- 프로젝트 루트:
C:\Users\gugu0\Desktop\auto-trade-model
- 주요 파일:
src/backtest.ts
,models/SUSDT/model.json
,models/SUSDT/weights.bin
등 - Node: v20.x (초기), 권장: Node 18.x (LTS)
- npm: 출력 예시:
10.x
- tfjs 패키지:
@tensorflow/tfjs
및@tensorflow/tfjs-node
(버전 일치 권장)
발생한 증상(타임라인)
-
npm run backtest -- --data=... --model=SUSDT
실행 시 콘솔 출력이 전혀 없음.- 원인: 스크립트에 직접 실행 시 진입점(
if (require.main === module)
) 누락/혹은 호출 문제. - 조치:
src/backtest.ts
에 main guarded entrypoint 및run()
호출 추가.
- 원인: 스크립트에 직접 실행 시 진입점(
-
모델 로딩 실패 에러: "Failed to load model using file:// URL. To load local models in Node, install '@tensorflow/tfjs-node'"
- 원인:
@tensorflow/tfjs-node
가 설치되지 않았거나 네이티브 바인딩(.node) 로드 실패. - 진단:
node -e "require('@tensorflow/tfjs-node')..."
실행으로 require 오류 확인.
- 원인:
-
npm install @tensorflow/tfjs-node
실패 (prebuilt 없음 → 소스 빌드 → Visual Studio C++ 필요)- 에러 로그 예:
node-pre-gyp ERR! install response status 404 Not Found ...
또는gyp ERR! find VS
및Could not find any Visual Studio installation to use
.
- 에러 로그 예:
-
로드 시 Windows 경로가
C:\C:\...
처럼 중복되어 모델 경로가 잘못 해석됨.- 원인: file:// URL 생성 또는 path.resolve 중복 결합.
진단 명령 목록
- Node / npm 버전 확인
node -v
npm -v
node -p "process.versions"
- tfjs-node 설치·로드 확인
npm ls @tensorflow/tfjs-node
node -e "try{require('@tensorflow/tfjs-node'); console.log('tfjs-node ok')}catch(e){console.error(e && e.message ? e.message : e)}"
- 파일 존재/권한 확인 (PowerShell)
Test-Path .\node_modules\@tensorflow\tfjs-node\lib\napi-v8\tfjs_binding.node
Get-Item .\node_modules\@tensorflow\tfjs-node\lib\napi-v8\tfjs_binding.node | Format-List *
Get-ChildItem -Path .\node_modules\@tensorflow\tfjs-node -Recurse -Force | Where-Object { $_.Name -match 'tensorflow.dll|tfjs_binding.node|\\.dll$' }
실제로 내가 한 해결 단계(리포지토리 변경 포함)
아래는 수정한 핵심 내용(파일: src/backtest.ts
)입니다.
- Node용 네이티브 바인딩 우선 require
- 파일 최상단에서
require('@tensorflow/tfjs-node')
를 시도해 네이티브 IO 핸들러를 먼저 등록하도록 변경.
- file:// / http(s) URL 처리 개선
--model
인자로 http(s) URL을 허용하도록 변경.modelDir
가 로컬 경로일 때:path.resolve(modelDir, 'model.json')
->pathToFileURL(...).href
방식으로 URL 생성.file://
나 path 처리의 미묘한 Windows 중복 문제를 잡기 위해fileURLToPath
사용.
- tfjs-node 설치 실패 시 우회 로딩 방법 추가
@tensorflow/tfjs-node
가 정상 로드되지 않으면 HTTP URL을 통한 로딩을 허용하는 옵션 제공.
- (빌드/런타임 이슈 해결) DLL 복사
- 설치 도중 build 과정에서 생성된
deps\lib\tensorflow.dll
을lib\napi-v8\tensorflow.dll
로 복사해.node
가 의존하는 DLL을 찾을 수 있게 했고, 이로써require('@tensorflow/tfjs-node')
가 정상 로드되도록 함.- 명령 예:
Copy-Item .\node_modules\@tensorflow\tfjs-node\deps\lib\tensorflow.dll -Destination .\node_modules\@tensorflow\tfjs-node\lib\napi-v8\tensorflow.dll -Force
- Windows file:// 및 tfjs-node 관련 최종 우회: 메모리 IO handler 사용
model.json
과weights.bin
(또는 weights manifest에 명시된 파일들)을 직접 읽어 메모리에 결합한 뒤, tfjs의 custom IOHandler 형태로 모델을 로드하도록 구현했습니다. 이로써 file:///path 결합 문제와 tfjs-node의io.fileSystem
내부 처리 차이로 인한 오류를 회피했습니다.
검증
- 수정 후
npm run backtest -- --data=data/SUSDT_1m.csv --model=SUSDT
실행 - 정상적으로
tfjs-node
로드 로그(예: TensorFlow CPU optimized 메시지) 출력 및 백테스트 로그가 나오며models/SUSDT/trades.csv
가 생성됨을 확인.
근본적 원인 정리
- Node ABI(버전) 불일치: 최신 Node(예: v20)는 특정 tfjs-node prebuilt 바이너리를 지원하지 않아 소스 빌드가 트리거됨.
- 소스 빌드 실패: Windows에서 소스 빌드를 하려면 Visual Studio C++(Desktop development with C++)와 기타 도구가 필요. 없으면
node-gyp
실패. - Windows file:// 경로 핸들링: 경로를 문자열로 결합하거나 url/파일 경로 변환을 잘못 사용하면 드라이브 접두사가 두 번 들어가는 등 오류 발생.
권장 영구 해결책
- Node 버전: 팀/환경에서 Node 18.x LTS 사용 권장 (nvm-windows로 관리).
- 패키지 버전 고정:
@tensorflow/tfjs
와@tensorflow/tfjs-node
를 같은 마이너 버전으로 맞춤(예: 4.11.0과 4.11.0). - Windows에서 빌드가 필요하면 Visual Studio Build Tools 설치(Desktop development with C++ 포함).
- CI/서버에서는 가능하면 미리 빌드된 바이너리나 Docker 컨테이너(리눅스 기반)를 사용.
- 코드 측면: 로컬 모델 로드는
tf.io.fileSystem
(tfjs-node) 또는 메모리 IOHandler 둘 중 하나를 안정적으로 선택하도록 구현.
빠른 복구(명령 모음)
- Node 18 설치(권장): nvm-windows 사용
# nvm-windows 설치 후
nvm install 18.20.0
nvm use 18.20.0
- 노드 모듈 초기화 및 재설치
Remove-Item -Recurse -Force .\node_modules
Remove-Item -Force package-lock.json -ErrorAction SilentlyContinue
npm cache clean --force
npm install
- tfjs-node 강제 설치(버전 고정)
npm install @tensorflow/tfjs-node@4.11.0 --save
- Visual Studio Build Tools가 없다면 설치 안내(링크 제공)
- https://visualstudio.microsoft.com/visual-cpp-build-tools/
- 설치 시 "Desktop development with C++" workload 선택
블로그용 포스트 템플릿 (복사해서 사용 가능)
제목: Windows에서 TensorFlow.js(@tensorflow/tfjs-node
) 로컬 모델 로드 실패 해결기
요약: (여기에 요약 한두 문장)
문제 재현 방법, 진단 명령, 원인, 해결 방법(빠른 복구 + 근본 해결), 코드 스니펫, 결과 스크린샷(로그) 등을 포함해 작성하세요. 위의 "발생한 증상"~"검증" 섹션을 그대로 붙여넣으면 블로그 포스트로 충분합니다.
추가 도움
원하시면 이 문서를 기반으로 README에 요약본을 추가하거나 블로그용 마크다운(이미 이 파일)로 포맷을 다듬어 드리겠습니다. 또한 Visual Studio 설치/Node 전환까지 제가 단계별로 도와드릴 수 있습니다.