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:// 방식으로 로컬 모델을 읽을 때 실패하는 현상이 발생.
  • 주요 원인:
    1. Node 환경에서 TensorFlow 모델을 파일 시스템에서 직접 읽으려면 Node용 네이티브 바인딩(@tensorflow/tfjs-node)이 필요하지만 설치/로딩에 실패함.
    2. file:// URL 생성 및 Windows 경로 처리 문제로 인해 중복된 드라이브 접두사(C:\C:\...)가 발생.
    3. @tensorflow/tfjs-node의 prebuilt 바이너리가 현재 Node ABI와 맞지 않아 소스 빌드로 넘어가고 빌드 툴(Visual C++) 부족으로 실패.

환경

  • 프로젝트 루트: 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 (버전 일치 권장)

발생한 증상(타임라인)

  1. npm run backtest -- --data=... --model=SUSDT 실행 시 콘솔 출력이 전혀 없음.

    • 원인: 스크립트에 직접 실행 시 진입점(if (require.main === module)) 누락/혹은 호출 문제.
    • 조치: src/backtest.ts에 main guarded entrypoint 및 run() 호출 추가.
  2. 모델 로딩 실패 에러: "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 오류 확인.
  3. npm install @tensorflow/tfjs-node 실패 (prebuilt 없음 → 소스 빌드 → Visual Studio C++ 필요)

    • 에러 로그 예: node-pre-gyp ERR! install response status 404 Not Found ... 또는 gyp ERR! find VSCould not find any Visual Studio installation to use.
  4. 로드 시 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)입니다.

  1. Node용 네이티브 바인딩 우선 require
  • 파일 최상단에서 require('@tensorflow/tfjs-node')를 시도해 네이티브 IO 핸들러를 먼저 등록하도록 변경.
  1. file:// / http(s) URL 처리 개선
  • --model 인자로 http(s) URL을 허용하도록 변경.
  • modelDir가 로컬 경로일 때: path.resolve(modelDir, 'model.json') -> pathToFileURL(...).href 방식으로 URL 생성.
  • file://나 path 처리의 미묘한 Windows 중복 문제를 잡기 위해 fileURLToPath 사용.
  1. tfjs-node 설치 실패 시 우회 로딩 방법 추가
  • @tensorflow/tfjs-node가 정상 로드되지 않으면 HTTP URL을 통한 로딩을 허용하는 옵션 제공.
  1. (빌드/런타임 이슈 해결) DLL 복사
  • 설치 도중 build 과정에서 생성된 deps\lib\tensorflow.dlllib\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
  1. Windows file:// 및 tfjs-node 관련 최종 우회: 메모리 IO handler 사용
  • model.jsonweights.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가 생성됨을 확인.

근본적 원인 정리

  1. Node ABI(버전) 불일치: 최신 Node(예: v20)는 특정 tfjs-node prebuilt 바이너리를 지원하지 않아 소스 빌드가 트리거됨.
  2. 소스 빌드 실패: Windows에서 소스 빌드를 하려면 Visual Studio C++(Desktop development with C++)와 기타 도구가 필요. 없으면 node-gyp 실패.
  3. 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

블로그용 포스트 템플릿 (복사해서 사용 가능)

제목: Windows에서 TensorFlow.js(@tensorflow/tfjs-node) 로컬 모델 로드 실패 해결기

요약: (여기에 요약 한두 문장)

문제 재현 방법, 진단 명령, 원인, 해결 방법(빠른 복구 + 근본 해결), 코드 스니펫, 결과 스크린샷(로그) 등을 포함해 작성하세요. 위의 "발생한 증상"~"검증" 섹션을 그대로 붙여넣으면 블로그 포스트로 충분합니다.


추가 도움

원하시면 이 문서를 기반으로 README에 요약본을 추가하거나 블로그용 마크다운(이미 이 파일)로 포맷을 다듬어 드리겠습니다. 또한 Visual Studio 설치/Node 전환까지 제가 단계별로 도와드릴 수 있습니다.

© 2025 Mingu Kim. All rights reserved.