시작 전에
환경설정
이 과정은 Windows PC 의 VS Code 에서 실습합니다. 과정 내내 같은 가상환경을 쓰고, 장마다 필요한 패키지를 그때그때 더해 설치합니다. GPU 는 없어도 됩니다.
설치하기
파이썬과 VS Code 는 이미 있다고 보고, 버전만 확인합니다. Python 3.12 이상이면 됩니다.
python --versionPython 3.14.6- 과정 폴더(예:
C:\llm-course)를 만들고 VS Code 로 엽니다. - VS Code 의 터미널(Ctrl+`)에서 가상환경을 만듭니다. 가상환경은 이 과정의 패키지만 따로 담아 두는 상자입니다. 다른 과제의 패키지와 버전이 섞이지 않습니다.
- 가상환경을 켭니다. 줄 앞에
(.venv)가 붙으면 켜진 것입니다.
python -m venv .venv.venv\Scripts\Activate.ps1- VS Code 오른쪽 아래의 파이썬 버전을 눌러
.venv의 파이썬을 고릅니다. 그래야 실행 단추가 같은 가상환경을 씁니다.
패키지 설치하기
1장에서는 표를 다루고, 그래프를 그리고, 머신러닝 모델을 만드는 패키지 넷을 씁니다.
pip install numpy pandas matplotlib scikit-learn2장부터는 신경망 라이브러리 PyTorch 를 씁니다. NVIDIA GPU 가 있는 PC 는 GPU 판을, 없는 PC 는 CPU 판을 설치합니다. GPU 판은 내려받는 파일이 2.6GB 쯤이라 시간이 걸립니다.
pip install torch --index-url https://download.pytorch.org/whl/cu126pip install torch위가 GPU 판(CUDA 12.6), 아래가 CPU 판입니다. 그냥 pip install torch 를 하면 Windows 에서는 CPU 판이 설치되어, GPU 가 있어도 쓰지 못합니다. PyTorch 는 Windows 의 Visual C++ 런타임을 함께 씁니다. 설치한 뒤 import torch 에서 오류가 나면 아래 "자주 나는 오류" 표를 봅니다.
3장부터는 남이 학습해 공개한 모델을 Hugging Face 에서 받아 씁니다. 모델을 불러오는 transformers 와, 번역 모델의 토크나이저가 쓰는 sentencepiece 를 설치합니다.
pip install transformers sentencepiece모델 파일은 처음 불러올 때 인터넷으로 내려받아 C:\Users\사용자이름\.cache\huggingface 에 저장되고, 다음부터는 바로 불러옵니다. 3장에서 받는 모델은 번역 모델 300MB 쯤, 챗봇 모델 1GB 쯤입니다. 내려받을 때 "unauthenticated requests" 라는 안내가 나와도 그대로 진행됩니다(로그인 없이 받을 때 나오는 안내입니다).
4장에서는 데이터를 다루는 datasets 와, Trainer 가 GPU 를 쓸 때 필요한 accelerate 를 더 설치합니다. 4장에서 새로 받는 모델(Qwen/Qwen2.5-0.5B)도 1GB 쯤입니다.
pip install datasets accelerate5장에서는 LoRA 를 붙이는 peft 와 DPO 를 하는 trl 을 더 설치합니다. 5장의 학습은 GPU 가 있어야 알맞은 시간 안에 끝납니다(GTX 1650 에서 실습 하나에 4~7분).
pip install peft trl6장에서는 API 서버에 요청을 보내는 openai 라이브러리를 더 설치합니다. 외부 API 와 Ollama 를 같은 코드로 부를 때 씁니다. python-dotenv 는 API 키를 .env 파일에서 읽을 때 씁니다(6장 「외부 API 로 만드는 RAG」).
pip install openai python-dotenvOllama 설치(6장부터)
Ollama 는 파이썬 패키지가 아니라 따로 설치하는 프로그램입니다. ollama.com 에서 Windows 설치 파일을 내려받아 설치하거나, PowerShell 에서 winget 으로 설치합니다.
winget install --id Ollama.Ollama설치하면 Ollama 서버가 백그라운드에서 켜집니다. 새 PowerShell 창을 열고 6장에서 쓰는 모델 셋을 내려받습니다. 합쳐서 3.3GB 쯤입니다. 4GB 보다 작은 GPU 나 GPU 가 없는 PC 는 qwen2.5:0.5b 와 qwen2.5:1.5b 만 받아도 실습 5까지 됩니다.
ollama --version
ollama pull qwen2.5:0.5b
ollama pull qwen2.5:1.5b
ollama pull qwen2.5:3b
ollama listollama version is 0.40.1
NAME ID SIZE
qwen2.5:3b 357c53fb659c 1.9 GB
qwen2.5:1.5b 65ec06548149 986 MB
qwen2.5:0.5b a8b0c5157701 397 MB위 출력은 교안을 만든 PC 의 것이고, 내려받은 시각 열과 6장에서 쓰지 않는 모델은 뺐습니다. 모델 파일은 C:\Users\사용자이름\.ollama\models 에 저장됩니다. 서버가 떠 있는지는 브라우저에서 http://localhost:11434 를 열어 "Ollama is running" 이 나오는지로도 봅니다.
7장에서는 임베딩 모델을 쓰는 sentence-transformers 와 벡터DB faiss-cpu, chromadb 를 설치하고, 비교할 오픈소스 LLM 둘을 Ollama 로 더 받습니다. 임베딩 모델(intfloat/multilingual-e5-small)과 재정렬 모델(cross-encoder/mmarco-mMiniLMv2-L12-H384-v1)은 처음 쓸 때 470MB 쯤씩 내려받습니다.
pip install sentence-transformers faiss-cpu chromadb
ollama pull gemma3:1b
ollama pull llama3.2:1b10장에서는 MCP 서버와 클라이언트를 만드는 mcp 패키지를 설치합니다. 교안을 만든 PC 는 2.3.0 입니다. 1.x 와는 이름이 달라서(FastMCP 가 2.x 에서 MCPServer), 인터넷의 1.x 예제를 그대로 쓰면 오류가 납니다.
pip install mcp11장에서는 서버 없이 도는 벡터DB 하나를 더 견주려고 qdrant-client 를 설치합니다. 교안을 만든 PC 는 1.20.0 입니다. 11장의 문서 읽기(html, docx, csv)는 표준 라이브러리만 쓰므로 더 설치할 것이 없습니다.
pip install qdrant-client12장에서는 그림과 글을 함께 다루는 CLIP 모델 둘(clip-ViT-B-32 607MB, sentence-transformers/clip-ViT-B-32-multilingual-v1 543MB)을 처음 쓸 때 내려받고, 그림을 읽는 비전 언어 모델 qwen2.5vl:3b(3.2GB)를 Ollama 로 받습니다. 그림은 Pillow 로 읽습니다(torch 와 함께 설치되어 있다). 4GB GPU 에는 비전 모델이 다 올라가지 않아 일부를 CPU 에서 돌리므로, 그림 한 장 설명에 20초쯤 걸립니다.
ollama pull qwen2.5vl:3b13장에서는 API 를 만드는 fastapi 를 설치합니다. 교안을 만든 PC 는 fastapi 0.162.0 입니다. 서버를 띄우는 uvicorn(0.54.0), 서버 없이 시험하는 TestClient 가 쓰는 httpx, 토큰을 만드는 PyJWT(2.15.1)는 앞 장의 패키지와 함께 이미 설치되어 있었습니다. 없으면 함께 설치합니다.
pip install fastapi uvicorn httpx PyJWT14장에서는 웹 화면을 만드는 streamlit 을 설치합니다. 교안을 만든 PC 는 streamlit 1.66.1 입니다. compose 파일을 읽는 PyYAML(6.0.3)은 이미 있었습니다.
pip install streamlit15장에서는 불러올 때 8비트·4비트로 줄이는 bitsandbytes 를 설치하고(교안을 만든 PC 는 0.50.2, NVIDIA GPU 가 있어야 한다), 같은 모델의 다른 양자화 단계를 Ollama 로 받습니다. GPTQ·AWQ 도구는 Windows 에서 설치가 어려워 설치하지 않았습니다.
pip install bitsandbytes
ollama pull qwen2.5:0.5b-instruct-q8_0
ollama pull qwen2.5:0.5b-instruct-fp1616장은 새 패키지가 없습니다. 7장의 임베딩·재정렬 모델, 3장의 Qwen2.5-0.5B-Instruct, Ollama 의 qwen2.5:3b 를 다시 씁니다. vLLM 은 Windows 에서 바로 설치되지 않아 Linux 나 WSL2 의 우분투에서 설치합니다. 교안을 만든 PC 에는 설치하지 않았고, 아래 명령도 실행하지 않았습니다.
# WSL2 의 우분투 터미널에서
python3 -m venv vllm-env
source vllm-env/bin/activate
pip install vllm21장도 새 패키지가 없습니다. 인젝션 시험과 요약은 Ollama 의 qwen2.5:3b, 개인정보 찾기는 파이썬의 re, 가명 처리는 hmac 과 secrets, GPU 메모리 확인은 PyTorch 의 torch.cuda.get_device_properties 와 Ollama 의 /api/ps 를 씁니다. 프로젝트의 CI 스크립트는 하위 프로세스로 돌리며, GitHub Actions 파일은 실행하지 않은 안내 코드입니다. garak, Presidio 같은 보안 도구는 설치하지 않았습니다.
20장도 새 패키지가 없습니다. 답 생성과 LLM 채점은 Ollama 의 qwen2.5:3b, 임베딩은 7장의 intfloat/multilingual-e5-small, KS 검정은 scikit-learn 과 함께 설치된 scipy(교안을 만든 PC 는 1.18.1), 대시보드는 14장의 streamlit 을 씁니다. 실습 1~4와 프로젝트는 Ollama 를 200번 가까이 부르므로 몇 분 걸립니다. 본문의 Prometheus 계기 코드는 실행하지 않은 안내 코드이고, prometheus_client 는 설치하지 않았습니다.
19장에서는 실험 기록과 모델 레지스트리를 맡는 mlflow 를 설치합니다. 교안을 만든 PC 는 mlflow 3.17.2 입니다. 기록은 SQLite 파일(out_mlflow.db)에 두므로 따로 서버를 띄우지 않아도 됩니다. 실행할 때 화면에 INFO, WARNING, DeprecationWarning 같은 안내가 나오지만 실습 결과와는 관계가 없습니다. Airflow 는 Windows 에서 바로 돌지 않아 설치하지 않았고, 19장의 Airflow DAG 와 Docker 명령은 안내 코드와 예상 출력입니다.
pip install mlflow
python -c "import mlflow; print(mlflow.__version__)"18장도 새 패키지가 없습니다. 9장의 openai 라이브러리(Ollama 의 OpenAI 호환 tools), 7장의 e5 임베딩, 13장의 FastAPI 를 다시 씁니다. 모델은 qwen2.5:3b 와 견주기용 qwen2.5:1.5b 이고, 없으면 ollama pull qwen2.5:1.5b 로 받습니다(약 1GB).
17장도 새 패키지가 없습니다. 13장의 fastapi·uvicorn, 7장의 intfloat/multilingual-e5-small, scikit-learn, Ollama 의 qwen2.5:3b 를 다시 쓰고, compose 파일은 14장의 PyYAML 로 읽습니다. 프로젝트가 8171, 8172 번 포트에 서버를 띄웠다 끄므로, 다른 프로그램이 그 포트를 쓰고 있으면 번호를 바꿉니다. 프로젝트 3의 docker compose 명령은 실행하지 않은 안내 코드입니다. GPU 를 컨테이너에 주려면 Docker Desktop(WSL2)과 NVIDIA 드라이버가 필요합니다.
14장의 Docker 명령을 직접 실행해 보려면 Docker Desktop 이 필요합니다. Windows 에서는 WSL2 위에서 돌며, 관리자 권한으로 설치하고 재부팅해야 합니다. 직원이 많은 회사는 유료 구독이 필요할 수 있으니 조건을 확인합니다. 교안을 만든 PC 에는 설치하지 않았고, 아래 명령도 실행하지 않았습니다.
wsl --install
winget install -e --id Docker.DockerDesktop
docker run hello-world뒤의 장에서 쓰는 패키지는 그 장의 첫머리에서 설치합니다. 버전과 설치 확인은 그 장을 만들 때 이 표에 더합니다.
| 패키지 | 쓰는 곳 | 비고 |
|---|---|---|
| numpy, pandas, matplotlib | 1장부터 과정 내내 | 이미 아시는 도구입니다 |
| scikit-learn | 1장의 모델과 평가 지표 | |
| torch | 2장부터 신경망과 언어모델 | GPU 판과 CPU 판의 설치 명령이 다르다(위 참고) |
| transformers, sentencepiece | 3장부터 Hugging Face 모델 | 교안을 만든 PC 는 transformers 5.21.0. 5 버전부터 pipeline("translation") 이 없어졌다 |
| datasets, accelerate | 4장부터 학습 데이터와 Trainer | 교안을 만든 PC 는 datasets 5.1.0, accelerate 1.15.0. tokenizers 0.23.3 은 transformers 와 함께 설치된다 |
| peft, trl | 5장의 LoRA 와 DPO | 교안을 만든 PC 는 peft 0.21.2, trl 1.16.0. trl 1.x 는 DPOConfig 의 loss_type 목록으로 SFT 손실을 섞는다 |
| openai, python-dotenv, Ollama | 6장부터 외부 API 와 로컬 LLM | 교안을 만든 PC 는 openai 3.39.0, python-dotenv 1.2.4, Ollama 0.40.1(12장부터는 자동 업데이트된 0.40.12). Ollama 는 pip 가 아니라 따로 설치하는 프로그램이다(위 참고) |
| sentence-transformers, faiss-cpu, chromadb | 7장부터 임베딩과 벡터DB | 교안을 만든 PC 는 sentence-transformers 6.2.0, faiss-cpu 1.15.1, chromadb 1.5.9 |
| mcp | 10장의 MCP 서버와 클라이언트 | 교안을 만든 PC 는 2.3.0 |
| qdrant-client | 11장의 벡터DB 견주기 | 교안을 만든 PC 는 1.20.0. QdrantClient(path=…) 로 서버 없이 쓴다 |
| bitsandbytes | 15장의 8비트·4비트 불러오기 | 교안을 만든 PC 는 0.50.2. NVIDIA GPU 가 필요하다 |
| fastapi, uvicorn, PyJWT | 13장의 API 와 인증 | 교안을 만든 PC 는 fastapi 0.162.0, uvicorn 0.54.0, PyJWT 2.15.1 |
| streamlit | 14장의 화면 | 교안을 만든 PC 는 1.66.1. 화면 시험은 streamlit.testing.v1.AppTest |
| mlflow | 19장의 실험 기록과 모델 레지스트리 | 교안을 만든 PC 는 3.17.2. 기록은 sqlite:///out_mlflow.db |
| Docker, vLLM, Airflow | 14장, 16장, 19장 | Linux 나 WSL 이 필요합니다. 교안을 만든 PC 에서는 실행하지 않았습니다 |
실행 확인하기
VS Code 에서 새 파이썬 파일을 만들어 아래 코드를 실행합니다. 버전이 나오면 설치가 끝난 것입니다.
import sys
import numpy, pandas, matplotlib, sklearn, torch
print("python", sys.version.split()[0])
for m in (numpy, pandas, matplotlib, sklearn, torch):
print(m.__name__, m.__version__)
print("GPU 사용 가능:", torch.cuda.is_available())
if torch.cuda.is_available():
print("GPU 이름:", torch.cuda.get_device_name(0))python 3.14.6
numpy 2.5.4
pandas 3.1.0
matplotlib 3.11.2
sklearn 1.9.1
torch 2.14.1+cu126
GPU 사용 가능: True
GPU 이름: NVIDIA GeForce GTX 1650위 출력은 교안을 만든 PC 의 것입니다. 버전 숫자가 조금 달라도 괜찮습니다. scikit-learn 은 설치할 때의 이름과 불러올 때의 이름(sklearn)이 다릅니다. torch 버전 끝의 +cu126 은 GPU 판이라는 표시이고, CPU 판은 +cpu 이거나 아무것도 붙지 않습니다. GPU 가 없는 PC 에서는 "GPU 사용 가능: False" 가 나오고, 실습은 그대로 돌아갑니다.
NVIDIA GPU 가 있는 PC 라면 GPU 이름과 메모리를 확인해 둡니다. 4장부터 모델 크기를 고를 때 씁니다. 없으면 이 명령이 오류를 내는데, 실습에는 지장이 없습니다.
nvidia-smi --query-gpu=name,memory.total --format=csvname, memory.total [MiB]
NVIDIA GeForce GTX 1650, 4096 MiB실습 파일 놓기
실습 코드는 data 폴더를 작업 폴더로 삼습니다. 교안과 함께 받은 data 폴더를 과정 폴더 안에 두고, 코드 파일도 그 안에서 실행합니다. 파일 목록은 실습 데이터에 있습니다.
자주 나는 오류
| 오류 글 | 까닭 | 해결 |
|---|---|---|
이 시스템에서 스크립트를 실행할 수 없으므로 | PowerShell 이 가상환경을 켜는 스크립트를 막았다 | Set-ExecutionPolicy -Scope CurrentUser RemoteSigned 를 한 번 실행하고 다시 켠다 |
ModuleNotFoundError: No module named 'sklearn' | 패키지를 다른 파이썬에 설치했다 | 가상환경을 켠 터미널에서 다시 설치하고, VS Code 에서 .venv 의 파이썬을 골랐는지 본다 |
FileNotFoundError: delivery.csv | 작업 폴더가 data 가 아니다 | 터미널에서 cd data 로 옮긴 뒤 실행하거나, 파일 경로를 data/delivery.csv 로 적는다 |
| 그래프의 한글이 네모로 나온다 | 한글 글꼴이 정해지지 않았다 | 그래프를 그리기 전에 plt.rcParams["font.family"] = "Malgun Gothic" 을 넣는다 |
nvidia-smi 를 찾을 수 없다 | NVIDIA GPU 나 드라이버가 없다 | GPU 없이 진행한다. 작은 모델은 CPU 로도 돈다 |
OSError: [WinError 1114] ... c10.dll | Windows 의 Visual C++ 런타임이 오래되었다(교안을 만든 PC 는 14.28 에서 이 오류가 났다) | 관리자 권한 PowerShell 에서 winget install --id Microsoft.VCRedist.2015+.x64 를 실행하거나, Microsoft 에서 vc_redist.x64.exe 를 받아 설치한다. "설치된 앱"에 "Visual C++ 2015-2022 Redistributable (x64) - 14.4x" 이상이 보여야 한다 |
torch.cuda.is_available() 이 False | CPU 판 torch 를 설치했다 | pip uninstall torch 뒤 위의 GPU 판 명령으로 다시 설치한다 |
KeyError: 'The task translation has been removed' | transformers 5 버전부터 번역 pipeline 이 없어졌다 | 3장 실습 5처럼 AutoModelForSeq2SeqLM 으로 직접 불러 generate 한다 |
모델을 내려받다가 멈추거나 ConnectionError | 인터넷이 끊겼거나 회사 방화벽이 Hugging Face 를 막는다 | 인터넷이 되는 곳에서 한 번 받아 두면 다음부터는 저장된 파일을 쓴다 |
openai.APIConnectionError: Connection error. | Ollama 서버가 꺼져 있다 | 시작 메뉴에서 Ollama 를 켜거나 PowerShell 에서 ollama serve 를 실행한다 |
model "qwen2.5:3b" not found | 그 모델을 내려받지 않았다 | ollama pull qwen2.5:3b 로 받은 뒤 다시 실행한다 |
bind: Only one usage of each socket address | ollama serve 를 실행했는데 서버가 이미 떠 있다 | 오류가 아니다. 이미 떠 있는 서버를 그대로 쓴다 |
Ollama 의 답이 @@@@ 같은 글자로만 나온다 | 교안을 만든 PC 에서 모델을 여러 번 바꿔 올린 뒤 가끔 생겼다 | ollama stop 모델이름 으로 내린 뒤 다시 부른다 |
| Ollama 가 오류를 내거나 아주 느려진다(임베딩 모델과 함께 쓸 때) | 같은 파이썬에서 불러 둔 임베딩·재정렬 모델이 GPU 메모리를 차지했다 | 임베딩 모델을 device="cpu" 로 불러 GPU 를 Ollama 에 비워 둔다(7장 프로젝트) |
does not support tools (Ollama, 400) | 그 모델은 도구 호출을 지원하지 않는다(교안을 만든 PC 에서 gemma3:1b) | qwen2.5 처럼 도구를 지원하는 모델을 쓰거나, 9장 실습 5의 ReAct 처럼 글로 도구를 쓰게 한다 |
No module named 'mcp.server.fastmcp' | mcp 2.x 에서 FastMCP 가 MCPServer 로 바뀌었다 | from mcp.server.mcpserver import MCPServer 로 쓰거나, 1.x 예제를 쓰려면 pip install "mcp<2" |
MCP 도구 결과가 Error executing tool … 뿐이다 | mcp 2.x 는 도구 함수의 예외 내용을 클라이언트에 보내지 않는다 | 모델에게 알릴 오류는 예외 대신 {"오류": "…"} 결과로 돌려준다 |
ModuleNotFoundError: No module named 'out_offline' | 11장 실습 1이 만든 out_offline.py 가 없거나, 작업 폴더가 data 가 아니다 | 실습 1을 먼저 실행하고, data 폴더에서 실행한다(실습 코드의 sys.path.insert(0, ".") 가 작업 폴더를 찾게 한다) |
OSError: 폐쇄망: … 로 나가는 연결을 막았습니다 | 11장의 막기가 켜진 채 인터넷이 필요한 일(새 모델 내려받기 등)을 했다 | 모델은 막기 전에 한 번 받아 둔다. 막기를 풀려면 out_offline.release() |
Storage folder … is already accessed by another instance of Qdrant client | Qdrant 로컬 모드가 연 폴더를 닫지 않고 다시 열었다 | 쓴 뒤 qc.close() 를 부르고, 주피터라면 커널을 다시 시작한다 |
UnicodeDecodeError: 'utf-8' codec can't decode | 옛 메모장 방식(cp949)으로 저장한 파일이다 | 11장 실습 2의 decode() 처럼 utf-8 로 안 되면 cp949 로 읽는다 |
| 비전 모델의 답이 아주 느리다(그림 한 장에 수십 초) | 모델이 GPU 에 다 올라가지 않아 일부가 CPU 에서 돈다. 앞서 쓴 다른 모델이 GPU 에 남아 있으면 더 느리다 | ollama ps 로 확인하고 ollama stop 모델이름 으로 다른 모델을 내린다. 설명은 미리 만들어 파일로 저장해 두고 쓴다(12장 실습 3) |
| Ollama 를 쓰다가 버전이 바뀌었다 | Windows 의 Ollama 앱은 스스로 업데이트한다(교안을 만든 PC 는 12장 작업 중 0.40.1 에서 0.40.12 로) | 결과 숫자가 조금 달라질 수 있다. 수업 전에 ollama --version 을 확인한다 |
| uvicorn 서버에 보낸 요청이 한 번에 2초쯤 걸린다(Windows) | localhost 가 먼저 IPv6(::1)로 연결을 시도하는데 uvicorn 은 127.0.0.1 에서만 기다린다 | 주소를 http://127.0.0.1:포트 로 적거나, 서버를 --host :: 로 띄운다 |
address already in use 또는 [WinError 10048] | 같은 포트에 서버가 이미 떠 있다(앞서 띄운 서버를 끄지 않았다) | 앞 서버를 끄거나(Ctrl+C, terminate()) 다른 포트를 쓴다 |
UnicodeEncodeError: 'ascii' codec (요청 머리글) | HTTP 머리글에 한글을 넣었다 | 머리글 값(API 키 등)은 영문과 숫자로 쓴다. 한글은 본문(JSON)에 넣는다 |
응답이 422 이고 detail 이 온다 | 요청 본문이 Pydantic 모델의 규칙에 어긋났다 | detail 의 loc(칸)과 msg(까닭)를 보고 고친다 |
AppTest 가 RuntimeError: AppTest script run timed out | 화면이 모델이나 API 를 기다리는 동안 기본 시간(3초)이 지났다 | AppTest.from_file(..., default_timeout=120) 처럼 시간을 늘린다 |
| 화면에서 단추를 눌러도 앞의 결과가 사라진다 | Streamlit 은 누를 때마다 스크립트를 처음부터 다시 실행한다 | 남길 값은 st.session_state 에 둔다 |
| 컨테이너로 띄운 API 에 바깥에서 연결되지 않는다 | 서버를 127.0.0.1 로 띄웠다 | 컨테이너 안에서는 --host 0.0.0.0(Streamlit 은 --server.address 0.0.0.0)으로 띄운다 |
Ollama 의 답이 888888… 처럼 같은 글자만 되풀이된다 | 교안을 만든 PC 에서 같은 파이썬 프로그램이 앞서 PyTorch 로 GPU 를 쓴 뒤에 생겼다. 따로 돌리면 생기지 않았다 | 모델을 내렸다(keep_alive: 0) 다시 묻는다(15장 실습 3의 ask()). 양자화 단계의 품질로 오해하지 않는다 |
MatMul8bitLt: inputs will be cast from torch.bfloat16 to float16 | 8비트로 불러올 때 계산 꼴을 정하지 않았다 | from_pretrained(..., dtype=torch.float16) 을 함께 준다 |
Ollama 가 500 Internal Server Error 를 돌려주고 기록에 CUDA error: an illegal memory access 가 남는다 | 교안을 만든 PC(GTX 1650)에서 PyTorch 가 GPU 를 쓰는 동안이나 바로 뒤에 Ollama 가 모델을 올릴 때 가끔 생겼다 | 모델을 내렸다(keep_alive: 0) 다시 보낸다(16장 실습의 chat()). PyTorch 모델은 쓴 뒤 del 과 torch.cuda.empty_cache() 로 GPU 를 돌려준다 |
| 동시에 요청을 보내도 처리량이 늘지 않고 기다리는 시간만 길어진다 | Ollama 가 요청을 하나씩 처리하고 있다(교안을 만든 PC 의 기본 설정) | 서버를 띄울 때 환경 변수 OLLAMA_NUM_PARALLEL 로 함께 처리할 수를 늘리거나(메모리가 더 든다), 동시 사용자가 많으면 vLLM 같은 서버용 엔진을 쓴다(16장) |
CUDA out of memory | GPU 메모리가 모자라다 | 배치 크기를 줄이거나 작은 모델을 쓴다. 4GB GPU 는 4장의 작은 모델까지가 알맞다 |