GPT-OSS-120B를 8GB VRAM, 64GB RAM으로 구동시켜보기

webnautes
By -
0

 GPT-OSS 120B를  8GB VRAM,  메모리  64GB로 구동시켜볼 수 있다하여 다음 레딧글을 참고해서 시도해봤습니다.

https://old.reddit.com/r/LocalLLaMA/comments/1mke7ef/120b_runs_awesome_on_just_8gb_vram/ 



테스트에 사용한 노트북 사양입니다.


CPU AMD Ryzen 7 8845HS w/ Radeon 780M Graphics     (3.80 GHz)

Geforce RTX 4060 8G

시스템 메모리 64GB 



2025. 8. 15 최초작성 

2025. 8. 16 스레드에서 한 분이 실행결과가 CPU에서 돌린것 수준이라하셔서 다시 확인해보니 그런거 같아서 다시 시도해봤습니다. 

2025. 8. 31 버전차이로 옵션 변경됨. 


영상으로도 제작했지만 주요 명령은 블로그 글을 참고 해야 합니다.

https://youtu.be/zvZ5ywqYq9M 




참고한 레딧글에서 llama.cpp를 사용한걸 확인하고 깃허브 저장소를 찾았습니다.

https://github.com/ggml-org/llama.cpp




최근에 릴리즈된 것을 확인해보니 윈도우용이 압축파일로 제공되네요. 빨간 사각형으로 표시한 llama cpp 파일을 다운로드 받았습니다. 그리고 CUDA를 사용하면 필요할거 같아 파란색 사각형으로 표시한 것도 다운로드 받았습니다.


https://github.com/ggml-org/llama.cpp/releases 






압축을 풀었더니 여러 파일들이 있네요. 



명령 프롬프트에서 해당 폴더로 이동합니다. 





llama-server를 실행시켜보니 CPU를 사용하는 듯 보입니다.




앞에서 다운로드 받았던 cudart-llama-bin-win-cuda-12.4-x64.zip 파일을 압축풀어 해당 폴더에 넣어보고 다시 실행해봅니다.


압축파일엔 다음 파일들이 있습니다.


llama-server를 다시 실행시켜본 결과입니다. 예상대로 CUDA를 사용가능하게 된 걸로 보입니다. 앞에서 보인거랑 메시지에 CUDA 관련 내용이 있습니다. 




이제 모델이 필요하다 싶어 참고한 레딧글에서 사용한  gpt-oss-120b-mxfp4-00001-of-00003.gguf라는 모델을 구글에서 우선 찾아보니 다음 링크에 있네요.

https://huggingface.co/ggml-org/gpt-oss-120b-GGUF



다음 명령을 사용하여 모델을 다운로드 하였습니다. 좀 시간이 걸립니다. 


llama-cli -hf ggml-org/gpt-oss-120b-GGUF




진행화면이 다음처럼 보여서 혼란스럽지만 다운로드는 되는게 분명해보였습니다. 로그 시작 부분을 확인해보니 예상시간이 17분이지만… 네트워크 속도에 따라 다를 수 있을 듯합니다.




다운로드가 완료되면 다음 화면이 보이는데 Ctrl + C를 눌러 종료시킵니다. 종료시키기전 LLM에게 질문을 할 수 있는 것으로 보이지만 해보진 않았습니다. CUDA 가속을 활성화해준 DLL을 복사하기 전에 다운로드를 시작했기 때문에 스크린샷엔 CPU만 사용가능한걸로 보입니다. 





다운로드 받은 모델은 현재 디렉토리에 없고 다음 경로에 있습니다. 그래서 아래 명령어 실행시 모델 파일 앞에 $LLAMA_MODEL_DIR를 추가하는 듯합니다. everything(https://www.voidtools.com/ko-kr/ )이란 프로그램을 사용하면 파일 위치를 찾을 수 있습니다. 


C:\Users\freem\AppData\Local\llama.cpp\ggml-org_gpt-oss-120b-GGUF_gpt-oss-120b-mxfp4-00001-of-00003.gguf




이제 다음 명령으로 모델을 실행할 수 있습니다.  다음 두 명령의 차이는 n-cpu-moe 옵션값 차이입니다.


레딧글에서 5G VRAM에서 실행했다는 명령입니다.  gpt-oss-120b 모델은 36개의 MOE 블록을 가지고 있는데 cpu-moe가 36이란 것은 모든 MOE가 CPU에서 실행됨을 의미합니다.

 

llama-server  -m $LLAMA_MODEL_DIR/gpt-oss-120b-mxfp4-00001-of-00003.gguf     --n-cpu-moe 36  --n-gpu-layers 999  -c 0 -fa  --jinja --reasoning-format none  --host 0.0.0.0 --port 8502 --api-key "dummy" 


레딧글에서 8G VRAM에서 실행했다는 명령입니다. gpt-oss-120b 모델은 36개의 MOE 블록을 가지고 있는데 cpu-moe가 28이란 것은 대부분의 MOE는 CPU에서 실행되고 일부 MOE는 GPU에서 실행됨을 의미합니다.


llama-server  -m $LLAMA_MODEL_DIR/gpt-oss-120b-mxfp4-00001-of-00003.gguf  --n-cpu-moe 28   --n-gpu-layers 999 -c 0 -fa    --jinja --reasoning-format none  --host 0.0.0.0 --port 8502 --api-key "dummy" 



레딧글에서 옵션을 설명한 내용입니다. 


~/build/llama.cpp/build-cuda/bin/llama-server \

    -m $LLAMA_MODEL_DIR/gpt-oss-120b-mxfp4-00001-of-00003.gguf \

    --n-cpu-moe 36 \    # 이 모델은 36개의 MOE 블록을 가지고 있습니다. cpu-moe 36은 모든 MOE가 CPU에서 실행됨을 의미합니다. 일부 MOE를 GPU로 이동시키도록 조정할 수 있지만, 그렇게 해도 그리 빨라지지는 않습니다.

    --n-gpu-layers 999 \   # 나머지 모든 것을 GPU에서 처리, 약 8GB 사용

    -c 0 -fa \   # 최대 컨텍스트 길이 (128k), 플래시 어텐션 사용

    --jinja --reasoning-format none \

    --host 0.0.0.0 --port 8502 --api-key "dummy"




두번째 명령을 사용하여 실행해봅니다. 단 여기에선 릴리즈된 것을 다운로드하여 사용하기 때문에 모델 파일 앞에 붙어있는 $LLAMA_MODEL_DIR 환경변수가 정의 안되어 있습니다. 앞에서 찾은 모델 위치를 사용합니다. 윈도우에선 같은 위치에 다운로드 될거라고 생각되지만 문제 있으면 앞에서 사용한 everything 프로그램으로 모델 위치를 찾아보세요.


2025. 8. 31 사용하는 llama  cpp 버전이 올라간후 일부 옵션을 제거하고 옵션을 변경해야 했습니다.


llama-server  -m C:\Users\freem\AppData\Local\llama.cpp\ggml-org_gpt-oss-120b-GGUF_gpt-oss-120b-mxfp4-00001-of-00003.gguf     --n-cpu-moe 28  --n-gpu-layers 999  -c 0 --reasoning-format none  --host 127.0.0.1 --port 8502 




2025. 8. 16

스레드에서 한 분이 CPU에서 돌린거랑 비슷한 수준이라며 Attention만 GPU에서 돌린걸로 시도해보라고 하셔서 클로드를 사용하여 옵션을 변경해봤습니다.  총 5가지 명령이 있는데 각각의  실행 결과는 아래쪽에서 기존 결과와 같이 보여드립니다. 

똑같은 질문을 했지만 서로 다른 답변을 해서 차이가 생길 수 도 있다 싶습니다.



똑같은 환경인데 문제가 생겨서 다음 두 옵션을 변경했습니다.


네트워크 환경이 바뀌어서인지 실행결과 The drive at '/mnt/main: server is listening on http://0.0.0.0:8502 - starting the main loop 처럼 출력되어 옵션을  추가로 변경했습니다. 


질문시 Invalid API Key 에러도 나서 API KEY 옵션도 제거했습니다.  


llama-server -m C:\Users\freem\AppData\Local\llama.cpp\ggml-org_gpt-oss-120b-GGUF_gpt-oss-120b-mxfp4-00001-of-00003.gguf --n-cpu-moe 28 --n-gpu-layers 0 -c 0 --jinja --reasoning-format none --host 127.0.0.1 --port 8502



클로드에게 추가로 최적화 옵션을 알려달라하여 얻은 명령입니다. 


llama-server -m C:\Users\freem\AppData\Local\llama.cpp\ggml-org_gpt-oss-120b-GGUF_gpt-oss-120b-mxfp4-00001-of-00003.gguf --n-cpu-moe 28 --n-gpu-layers 20 -c 0 -fa --jinja --reasoning-format none --host 127.0.0.1 --port 8502 -b 512 --mlock



클로드에게 더 최적화 해달라고 해봤습니다. 2025.8.31 기준으로 -fa와 --jinja를 제거해야 했습니다.


llama-server -m C:\Users\freem\AppData\Local\llama.cpp\ggml-org_gpt-oss-120b-GGUF_gpt-oss-120b-mxfp4-00001-of-00003.gguf --n-cpu-moe 28 --n-gpu-layers 999 -c 0 --reasoning-format none --host 127.0.0.1 --port 8502 -b 1024 --mlock




GPU를 사용안하나 싶어 확인해보니 GPU 메모리를 사용하고 있습니다.




추가로 CPU만 사용한 경우도 해봤습니다. 64G 메모리를 사용하도록 -c 32768 옵션을 추가했습니다. 클로드에게 CPU만 사용하게 해달라고 했지만 로그를 보니 CUDA 관련 할당이 보입니다. 


llama-server -m C:\Users\freem\AppData\Local\llama.cpp\ggml-org_gpt-oss-120b-GGUF_gpt-oss-120b-mxfp4-00001-of-00003.gguf --n-cpu-moe 28 --n-gpu-layers 0 -c 32768 --jinja --reasoning-format none --host 127.0.0.1 --port 8502 -b 512 --mlock -t -1



cuda 관련 DLL을 제거 하고 같은 명령으로 다시 해봤습니다. 이번엔 GPU를 사용안하고 있네요. 똑같은 명령을 사용합니다.


llama-server -m C:\Users\freem\AppData\Local\llama.cpp\ggml-org_gpt-oss-120b-GGUF_gpt-oss-120b-mxfp4-00001-of-00003.gguf --n-cpu-moe 28 --n-gpu-layers 0 -c 32768 --jinja --reasoning-format none --host 127.0.0.1 --port 8502 -b 512 --mlock -t -1





문제 없이 실행되는데 다음 화면에서 좀 대기하네요.




잠시 후 다음 메시지가 보이면서 접속 가능한 URL을 알려줍니다. 여기에선 http://127.0.0.1:8080 입니다. 웹브라우저로 접속해봅니다.




다음처럼 보입니다. 질문을 해봅니다.





답변이 바로 나오지는 않네요. 옵션에 따라 달라집니다.



일분 정도 기다렸나 답변이 시작되었는데  빠른 편이 아니라서 모든 답변을 얻는 데 까지 꽤 걸릴듯합니다. 옵션에 따라 달라집니다.





다음 질문을 모두 얻는데 2분 내로 걸린듯합니다.옵션에 따라 달라집니다.




답변완료후 명령 프롬프트 상태입니다. 걸린 시간이 출력되어 있습니다. 


prompt eval time =    2283.92 ms /    17 tokens (  134.35 ms per token,     7.44 tokens per second)

       eval time =  220028.80 ms /  1215 tokens (  181.09 ms per token,     5.52 tokens per second)

      total time =  222312.73 ms /  1232 tokens



2025. 8. 16

추가 테스트 결과입니다. 


Attention만 GPU에서 돌리는 걸로 다시 실행할 경우 실행시간입니다.


prompt eval time =  136670.48 ms /    78 tokens ( 1752.19 ms per token,     0.57 tokens per second)

       eval time =  487443.87 ms /  1596 tokens (  305.42 ms per token,     3.27 tokens per second)

      total time =  624114.36 ms /  1674 tokens


추가로 클로드에게 최적화된 옵션을 알려달라하여 다시 실행한 경우 실행시간입니다.


prompt eval time =   10019.25 ms /    78 tokens (  128.45 ms per token,     7.79 tokens per second)

       eval time =  255915.06 ms /  1854 tokens (  138.03 ms per token,     7.24 tokens per second)

      total time =  265934.32 ms /  1932 tokens


클로드에게 추가로 최적화 해달라고 한 경우 실행시간입니다.

prompt eval time =    9724.32 ms /    78 tokens (  124.67 ms per token,     8.02 tokens per second)

       eval time =  154393.32 ms /  1343 tokens (  114.96 ms per token,     8.70 tokens per second)

      total time =  164117.64 ms /  1421 tokens



CPU만 사용한 경우 실행시간입니다. CPU만 사용한 결과로 보기 힘들어 보입니다. 


prompt eval time =    9727.71 ms /    78 tokens (  124.71 ms per token,     8.02 tokens per second)

       eval time =  184597.39 ms /  1483 tokens (  124.48 ms per token,     8.03 tokens per second)

      total time =  194325.11 ms /  1561 tokens 


cuda 관련 DLL을 제거 하고 CPU만 사용한 경우와 같은 명령으로 다시 해본 경우 실행시간입니다.


prompt eval time =   19287.76 ms /    78 tokens (  247.28 ms per token,     4.04 tokens per second)

       eval time =  505948.49 ms /  1554 tokens (  325.58 ms per token,     3.07 tokens per second)

      total time =  525236.25 ms /  1632 tokens





Ctrl + C를 눌러 중지시킬 수 있습니다.


이게 가능한게 원래는 GPU 메모리에 모두 올려야 하지만 일부를 시스템 메모리에 올려서인 듯합니다. 그로인해 적은 GPU 메모리로도 실행은 가능해지지만 속도가 느려질 수 밖에 없어보이네요. 시스템 메모리가 64GB인게 최소 사양이고 쓸만한 시스템 메모리 크기는 96GB라고 합니다. 



다음은 레딧글을 번역한 일부 내용입니다.


llama-cpp의 --cpu-moe 옵션을 활용해 MOE 전문가 레이어를 CPU에서 처리하고, 주의(attention) 레이어만 GPU에 오프로드해 5~8GB VRAM으로 빠른 프리필 성능을 구현

GPU에는 KV 캐시, Attention 가중치·활성값, 라우팅 테이블, LayerNorm 등 비전문가 파라미터만 상주해 메모리 사용량이 낮음

RTX 3060Ti급 GPU와 64GB~96GB 시스템 RAM으로도 120B 모델을 가볍게 구동 가능하며, BF16 지원 GPU(RTX 3000+)에서 최적 성능을 발휘함

5GB VRAM 사용 시 토큰당 8.15ms(122.66 토큰/초) 성능을 기록했고, 8GB VRAM 사용 시 7.44ms(134.44 토큰/초)까지 개선됨













댓글 쓰기

0 댓글

댓글 쓰기 (0)