Comfy Org 브랜드 페이지에서 받은 ComfyUI(Comfy) 공식 로고를 원본 그대로 두고 아래에 글 제목을 적은 이미지

ComfyUI Torch not compiled with CUDA enabled, CPU 모드로 기동

ComfyUI는 --cpu를 빼면 CUDA 미지원 오류로 종료됐고, 붙이면 /system_stats가 HTTP 200과 장치 cpu를 돌려줬습니다. 서버에 올릴 수 있는지를 가르는 질문은 간단했습니다. GPU가 없는 평범한 Linux, 그러니까 Debian 13에서 CPU용 PyTorch만으로 실제로 기동이 되는지, 그리고 장치와 메모리가 어떻게 표시되는지입니다. 점검은 프로세스가 떴는지와 애플리케이션이 응답하는지를 따로 떼어서 했고, 기동 옵션을 바꿀 때마다 결과가 어떻게 갈리는지 비교했습니다.

함정은 CPU용 휠을 깔았다고 애플리케이션이 알아서 CPU 경로로 가지 않는다는 데 있습니다. 이번 실행은 execution 모듈을 불러오는 중에 get_torch_device()를 거쳐 torch.cuda.current_device()까지 들어갔습니다. 아래에서는 기동 옵션으로 실행 장치를 못 박는 방법을 먼저 보이고, 배타 옵션에서 나는 오류와 CPU 텐서 연산 결과를 이어서 비교합니다. 범위는 ComfyUI 서버 프로세스가 기동해 /system_stats에 응답하기까지입니다. ComfyUI 없이 diffusers 파이프라인을 스크립트에서 직접 부르다가 to("cuda")에서 AssertionError가 나는 경우는 원인 지점이 다르므로, tiny-sd CUDA AssertionError, CPU 전용 PyTorch로 PNG 저장에서 PNG 저장까지 이어서 확인했습니다.

재현에 쓴 운영체제, 인터프리터, 라이브러리 구성은 표와 같습니다. CPU는 nproc=8, RAM은 ram_total_mb=16002, PyTorch는 2.14.1+cpu입니다. 운영 서버에서 같은 문제를 쫓을 때도 패키지 이름만 적어 두면 부족합니다. 어떤 인터프리터로 돌았는지, 휠이 CPU 빌드인지까지 함께 남겨야 범위가 빨리 좁혀집니다.

항목값
OSDebian GNU/Linux 13 (trixie), Linux x86_64
CPUnproc=8
RAMram_total_mb=16002
Python3.13.5 (main, Aug 10 2026, 12:06:59) [GCC 14.2.0]
PyTorch2.14.1+cpu, cuda_is_available False
ComfyUI0.39.0, commit 08ff3c1 2026-10-09
실행일2026-10-14 (UTC)

--cpu 없이 띄운 ComfyUI가 CUDA를 찾다 멈추는 과정

인터프리터와 휠부터 봅니다. 아래 코드는 재현 스크립트에서 떼어 온 부분이고, PY와 WORK는 스크립트가 정합니다. 파이썬은 ComfyUI 가상환경의 실행 파일이며, 출력에는 torch 2.14.1+cpu와 cuda_is_available False가 찍힙니다. 같은 출력에서 ComfyUI __version__은 0.39.0, 체크아웃 커밋은 08ff3c1 2026-10-09입니다.

"$PY" -W ignore -c 'import torch; print("torch", torch.__version__); print("cuda_is_available", torch.cuda.is_available())'

이어서 스크립트에서 ComfyUI 디렉터리로 이동한 뒤 --cpu 없이 main.py를 실행합니다. 수신 주소는 127.0.0.1, 포트는 18297입니다. 커스텀 노드, 오프라인 실행, 브라우저 자동 실행, 에셋 관련 보조 플래그와 작업 폴더의 데이터 경로를 함께 지정합니다. 성공 실행과 비교할 때 포트와 데이터 경로만 다르고, 기동 플래그의 차이는 --cpu의 유무입니다.

timeout 45 "$PY" main.py \
  --listen 127.0.0.1 --port 18297 \
  --disable-all-custom-nodes --offline --disable-auto-launch --disable-assets \
  --base-directory "$WORK/data-a"

환경 정보 확인에서 시작해 --cpu 없는 기동이 실패하기까지의 기록입니다. torch 2.14.1+cpu와 cuda_is_available False가 먼저 찍히고, 마지막은 reproduce_exit:1입니다. 패키지가 깔려 있다는 사실보다, 서버가 어떤 장치 선택 경로로 들어갔는지를 traceback으로 따라가는 편이 원인에 더 빨리 닿습니다.

$ . /etc/os-release && printf "os=%s\n" "$PRETTY_NAME" && uname -sm && printf "nproc=%s\n" "$(nproc)" && date -u +%F
os=Debian GNU/Linux 13 (trixie)
Linux x86_64
nproc=8
2026-10-14
$ free -m | awk 'NR==2{printf "ram_total_mb=%s\n",$2}'
ram_total_mb=16002
$ /home/user/comfy/ComfyUI/v/bin/python --version
Python 3.13.5
$ /home/user/comfy/ComfyUI/v/bin/python -W ignore -c 'import torch; print("torch", torch.__version__); print("cuda_is_available", torch.cuda.is_available())'
torch 2.14.1+cpu
cuda_is_available False
$ grep __version__ /home/user/comfy/ComfyUI/comfyui_version.py
__version__ = "0.39.0"
$ git -C /home/user/comfy/ComfyUI log -1 --format=%h%x20%cs
08ff3c1 2026-10-09
$ timeout 45 /home/user/comfy/ComfyUI/v/bin/python main.py --listen 127.0.0.1 --port 18297 --disable-all-custom-nodes --offline --disable-auto-launch --disable-assets --base-directory /home/user/comfyui/run/work/data-a
reproduce_exit:1
Traceback (most recent call last):
  File "/home/user/comfy/ComfyUI/main.py", line 265, in <module>
    import execution
  File "/home/user/comfy/ComfyUI/execution.py", line 17, in <module>
    import comfy.model_management
  File "/home/user/comfy/ComfyUI/comfy/model_management.py", line 364, in <module>
    total_vram = get_total_memory(get_torch_device()) / (1024 * 1024)
                                  ~~~~~~~~~~~~~~~~^^
  File "/home/user/comfy/ComfyUI/comfy/model_management.py", line 213, in get_torch_device
    return torch.device(torch.cuda.current_device())
                        ~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/home/user/comfy/ComfyUI/v/lib/python3.13/site-packages/torch/cuda/__init__.py", line 1267, in current_device
    _lazy_init()
    ~~~~~~~~~~^^
  File "/home/user/comfy/ComfyUI/v/lib/python3.13/site-packages/torch/cuda/__init__.py", line 584, in _lazy_init
    raise AssertionError("Torch not compiled with CUDA enabled")
AssertionError: Torch not compiled with CUDA enabled

터미널 캡처에서도 종료 값은 1이고, 마지막 예외는 AssertionError: Torch not compiled with CUDA enabled입니다. 환경 정보와 traceback이 한 화면에 같이 있다는 점이 쓸모 있습니다. 나중에 다른 인터프리터에서 나온 로그를 가져와 같은 문제로 착각하는 일을 막아 주기 때문입니다.

ComfyUI 실행 화면: ComfyUI 기동 시 CUDA 미지원 오류와 reproduce_exit:1이 나옵니다
2026-10-14 14:41:09 KST, Debian 13 — ComfyUI 기동 시 CUDA 미지원 오류와 reproduce_exit:1이 나옵니다.

ComfyUI를 띄운 캡처들에는 설치 폴더와 작업 폴더가 실제 경로로 나옵니다. 본문의 명령과 트레이스백은 이를 /home/user/comfy와 /home/user/comfyui로 줄였을 뿐 같은 실행입니다.

출력의 reproduce_exit는 1입니다. traceback을 위에서부터 읽으면 main.py 265행의 import execution, execution.py 17행의 import comfy.model_management, model_management.py 364행의 get_total_memory(get_torch_device()) 순서로 들어갑니다. 이어서 model_management.py 213행의 get_torch_device()가 torch.cuda.current_device()를 부르고, torch/cuda/__init__.py 1267행의 _lazy_init()이 같은 파일 584행에서 AssertionError: Torch not compiled with CUDA enabled를 던집니다.

휠은 torch 2.14.1+cpu, cuda_is_available은 False입니다. 즉 CPU용 빌드 위에서 --cpu 없는 기동이 torch.cuda.current_device()를 호출했고, 그 호출이 _lazy_init에서 위 예외로 끝난 것입니다.

트러블슈팅 절에서 torch.cuda.current_device()를 직접 호출했을 때도 똑같은 예외 문장이 나옵니다. 다만 그쪽은 직접 호출이고 이쪽은 ComfyUI 기동이라 서로 다른 실행입니다. 기동 쪽 스택은 위의 출력 블록에 있습니다.

--cpu 한 줄로 장치를 cpu에 묶기

--cpu와 아래 보조 플래그를 붙이자 서버가 응답했습니다. 해결 스크립트의 기동 부분이고, 스크립트의 PORT는 18299입니다. 데이터 디렉터리는 재현 때와 다른 작업 폴더를 쓰고, 표준 출력은 작업 폴더의 로그로 돌립니다. 이 스크립트는 /system_stats 응답을 확인하고 나면 프로세스를 내리므로, 상시 운영용 기동 설정과는 성격이 다릅니다.

"$PY" main.py \
  --listen 127.0.0.1 --port "$PORT" \
  --cpu \
  --disable-all-custom-nodes --offline --disable-auto-launch --disable-assets \
  --base-directory "$WORK/data"

--cpu를 붙인 서버의 응답과 장치 정보가 함께 나옵니다. system_stats_http=200 다음에 device_type cpu와 device_name cpu가 이어지니, 응답 상태와 실행 장치를 한 번에 확인하는 셈입니다. 운영 헬스체크도 상태 코드만 볼 것이 아니라, 의도한 장치가 선택됐는지 응답 필드까지 검사하도록 짜는 구성을 권합니다.

$ /home/user/comfy/ComfyUI/v/bin/python main.py --listen 127.0.0.1 --port 18299 --cpu --disable-all-custom-nodes --offline --disable-auto-launch --disable-assets --base-directory /home/user/comfyui/run/work/data
$ curl -s -m 3 -o /home/user/comfyui/run/work/logs/stats.json -w %{http_code} http://127.0.0.1:18299/system_stats
system_stats_http=200
$ sed log | grep -E "Total VRAM|pytorch version|Device:|Python version|To see the GUI|Set vram state"
[INFO] Total VRAM 16002 MB, total RAM 16002 MB
[INFO] pytorch version: 2.14.1+cpu
[INFO] Set vram state to: DISABLED
[INFO] Device: cpu
[INFO] Python version: 3.13.5 (main, Aug 10 2026, 12:06:59) [GCC 14.2.0]
[INFO] To see the GUI go to: http://127.0.0.1:18299
$ python3 -c parse system_stats
comfyui_version 0.39.0
pytorch_version 2.14.1+cpu
python_version 3.13.5 (main, Aug 10 2026, 12:06:59) [GCC 14.2.0]
device_type cpu
device_name cpu
ram_total 16779780096
vram_total 16779780096
vram_total_eq_ram_total True
SUCCESS system_stats HTTP 200 device cpu comfyui 0.39.0 torch 2.14.1+cpu

--cpu를 지정한 뒤 서버 응답을 확인한 캡처에는 HTTP 200과 cpu 장치, 그리고 vram_total_eq_ram_total True가 함께 보입니다. CPU로 돌 때는 VRAM 표시가 RAM 총량과 같은 값이 됩니다. 모니터링 화면에 이 숫자를 띄운다면 장치 유형을 옆에 적어 두어야 VRAM이 넉넉하다고 오해하지 않습니다.

ComfyUI 실행 화면: --cpu로 기동한 /system_stats가 HTTP 200·CPU 장치를 보고합니다
2026-10-14 14:41:24 KST, Debian 13 — –cpu로 기동한 /system_stats가 HTTP 200·CPU 장치를 보고합니다.

출력의 system_stats_http는 200입니다. 기동 로그는 Set vram state to: DISABLED, Device: cpu, pytorch version: 2.14.1+cpu를 찍고, GUI 주소로 http://127.0.0.1:18299를 안내합니다. /system_stats의 comfyui_version은 0.39.0, pytorch_version은 2.14.1+cpu, device_type은 cpu입니다. 파이썬 문자열은 3.13.5 (main, Aug 10 2026, 12:06:59) [GCC 14.2.0]입니다.

같은 로그의 Total VRAM 16002 MB, total RAM 16002 MB는 free의 ram_total_mb=16002와 맞습니다. vram_total_eq_ram_total은 True입니다. Device가 cpu인 이 실행에서 VRAM 칸은 RAM 총량과 같은 값입니다.

--cpu로 서버를 띄우는 방식의 득실은 분명합니다. 이미 설치된 2.14.1+cpu 휠을 그대로 두고 플래그 하나만으로 /system_stats가 HTTP 200과 device cpu를 돌려준다는 것이 장점입니다. 반면 공식 시작 플래그 문서는 CPU 모드가 느리다고 안내하고, --lowvram과 함께 쓰면 기동 전에 거절됩니다.

배타 플래그 충돌과 CPU 연산을 갈라 보기

공식 시작 플래그 문서는 VRAM 모드가 서로 배타적이라고 설명합니다. 이번 실행에서는 --cpu와 --lowvram을 한 명령에 넣었습니다. 종료 코드는 2이고, 메시지는 argument --lowvram: not allowed with argument --cpu입니다.

"$PY" main.py \
  --listen 127.0.0.1 --port 18301 \
  --cpu --lowvram \
  --disable-all-custom-nodes --offline --disable-auto-launch --disable-assets \
  --base-directory "$WORK/data-c"

같은 인터프리터에서 2×2 일 행렬 두 개를 곱하면 장치는 cpu이고, 출력의 cpu_mm_sum은 8.0입니다. 바로 이어서 torch.cuda.current_device()를 호출하면 AssertionError: Torch not compiled with CUDA enabled가 납니다. 이 문장은 앞의 ComfyUI 기동 traceback 마지막 줄과 같고, 스택은 기동 때와 다릅니다.

import torch
print("torch", torch.__version__)
print("cuda_is_available", torch.cuda.is_available())
x = torch.ones(2, 2)
y = torch.mm(x, x)
print("cpu_mm_device", y.device.type)
print("cpu_mm", y.tolist())
print("cpu_mm_sum", float(y.sum()))
try:
    torch.cuda.current_device()
    print("cuda_current ok")
except AssertionError as exc:
    print("cuda_current_error", type(exc).__name__ + ": " + str(exc))

배타 옵션 때문에 기동이 거절된 기록과, 따로 돌린 CPU 연산 결과가 한 출력에 있습니다. 옵션 충돌은 exclusive_exit:2로 끝나고, 행렬곱은 cpu_mm_sum 8.0을 돌려줍니다. CPU 연산은 성공하는데 CUDA 장치 조회만 실패하는 장면이 동시에 나타나는 셈이니, 이 오류를 텐서 연산 전체의 실패로 받아들이면 진단이 엇나갑니다.

$ /home/user/comfy/ComfyUI/v/bin/python main.py --listen 127.0.0.1 --port 18301 --cpu --lowvram --disable-all-custom-nodes --offline --disable-auto-launch --disable-assets --base-directory /home/user/comfyui/run/work/data-c
exclusive_exit:2
main.py: error: argument --lowvram: not allowed with argument --cpu
$ /home/user/comfy/ComfyUI/v/bin/python -W ignore  # CPU 행렬곱과 torch.cuda.current_device
torch 2.14.1+cpu
cuda_is_available False
cpu_mm_device cpu
cpu_mm [[2.0, 2.0], [2.0, 2.0]]
cpu_mm_sum 8.0
cuda_current_error AssertionError: Torch not compiled with CUDA enabled
$ curl -sI -m 15 official urls
HTTP/2 200 https://docs.comfy.org/installation/system_requirements
HTTP/2 200 https://docs.comfy.org/development/comfyui-server/startup-flags
HTTP/2 200 https://docs.comfy.org/troubleshooting/overview
HTTP/2 200 https://github.com/Comfy-Org/ComfyUI
HTTP/2 200 https://raw.githubusercontent.com/Comfy-Org/ComfyUI/master/README.md

점검 캡처는 옵션 충돌과 CPU 연산을 나란히 놓고 있습니다. --cpu와 --lowvram을 같이 쓰면 종료 값 2로 거절되지만, CPU 행렬곱의 합은 8.0으로 제대로 나옵니다. 기동 인자 오류와 라이브러리 연산 결과를 따로 적어 두면, 재시작 설정을 고칠지 실행 환경을 들여다볼지가 바로 정해집니다.

ComfyUI 실행 화면: --cpu·--lowvram 병용은 종료 값 2, CPU 행렬곱의 합은 8.0입니다
2026-10-14 14:41:40 KST, Debian 13 — –cpu·–lowvram 병용은 종료 값 2, CPU 행렬곱의 합은 8.0입니다.

공식 트러블슈팅 문서는 NVIDIA GPU에서 이 AssertionError가 날 때 CUDA용 PyTorch를 다시 설치하는 명령을 안내합니다. 이번 실행에서 서버를 띄운 방법은 이미 있는 CPU 휠에 --cpu를 붙인 명령입니다. 문서 헤더 확인에 사용한 주소는 시작 플래그와 ComfyUI 저장소를 포함해 출력에 HTTP/2 200으로 남아 있습니다.

기동 설정과 응답 장치를 배포마다 맞춰 보기

운영 환경을 갱신했다면 기존 기동 명령과 헬스체크가 새 환경에서도 같은 뜻으로 동작하는지 다시 봅니다. 응답에 담긴 버전 문자열과 장치 필드는 배포 기록에 남기고, 헬스체크 경로나 응답 구조가 바뀌면 검사 조건도 같이 고칩니다. 프로세스가 떠 있다는 이유만으로 정상이라 치지 않고 애플리케이션 응답까지 확인해야 설정 변경의 여파가 빨리 드러납니다.

실행 설정은 서비스가 실제로 읽는 위치를 기준으로 관리합니다. 기동 스크립트와 서비스 설정 어느 쪽에서도 CPU 옵션이 빠지거나 배타 옵션이 겹치지 않게 하고, 데이터 경로와 로그 경로도 나란히 대조합니다. 업스트림에서 API가 폐기되거나 옵션이 바뀌었다면, 해당 배포의 안내와 실제 출력을 먼저 맞대어 본 다음 헬스체크와 재시작 설정을 한꺼번에 손봅니다.

어떤 기동 옵션으로 갈 것인가

표는 기동 옵션과 연산 호출에 따라 갈린 결과를 모은 것입니다. HTTP 200과 cpu 장치를 돌려준 것은 --cpu를 지정한 서버뿐이고, 배타 옵션을 함께 주면 종료 값 2로 거절됐습니다. 장애를 분류할 때 서버 초기화 오류인지 인자 검사 오류인지부터 가르면 고칠 설정이 금방 보입니다.

선택실행 결과
–cpu 없이 main.pyreproduce_exit 1. AssertionError: Torch not compiled with CUDA enabled
–cpu 로 main.pysystem_stats HTTP 200, Device cpu, comfyui 0.39.0, torch 2.14.1+cpu
–cpu 와 –lowvramexclusive_exit 2. argument –lowvram: not allowed with argument –cpu
CPU 행렬곱 뒤 current_devicecpu_mm_device cpu, cpu_mm_sum 8.0, 이어서 같은 AssertionError

캡처에 남은 기동 결과를 기준으로 말씀드리면, Debian 13에서 2.14.1+cpu 휠로 ComfyUI 서버를 여는 것이 목적이라면 --cpu를 명시하는 구성을 권합니다. CPU가 정말 선택됐는지는 기동 로그와 /system_stats 응답을 맞대어 확인합니다.

출발점으로는 성공한 명령의 로컬 수신 주소, 보조 플래그, 작업 폴더 구성을 그대로 둔 점검 환경을 추천합니다. 실제 서비스 설정으로 옮길 때는 --base-directory가 가리키는 데이터 위치와 로그 수집 위치를 확인하고, 재시작한 뒤에도 같은 옵션이 넘어가는지 봅니다.

메모리 지표는 장치 유형과 같이 읽어야 의미가 있습니다. 이번 환경의 nproc=8, RAM 16002 MB, CPU 행렬곱 결과만 가지고 이미지 생성 처리량이나 서비스 지연 시간을 가늠할 수는 없습니다. 용량 계획은 실제로 쓸 워크플로의 처리 시간과 메모리 사용량을 재서 세웁니다.

실시간 응답이 필요한 서비스라면 GPU와 거기에 맞는 PyTorch 빌드를 쓰는 구성을 대안으로 놓고, 실제 요청의 지연 시간을 기준으로 사양을 정하겠습니다. CPU 환경은 서버 기동과 연동 점검을 맡기고, 처리량이 필요한 용도는 별도 실행 환경에서 부하를 검증한 뒤에 배치합니다.

배포 기록에는 휠 정보, 기동 인자, 헬스체크 응답을 한데 남겨 두기를 권합니다. --cpu와 --lowvram의 중복을 걷어 내고 HTTP 200과 cpu 장치를 함께 확인하는 것, 이번 재현에서 건진 점검 기준은 이 두 가지입니다.

ComfyUI 말고도 로컬에서 모델을 설치하고 돌릴 때 부딪히는 오류는 로컬 LLM 실행 허브에 단계별로 모아 두었습니다.

Similar Posts

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다