GPU 시세 · VRAM · 온디바이스 AI

transformers 사용법 — pipeline 세 줄로 모델 돌리기

· 읽는 시간 5분 · 데일리 딥러닝

transformers로 모델을 돌리는 최단 경로는 pipeline 세 줄입니다. 토크나이저와 모델을 따로 불러오고 채팅 템플릿을 적용하는 과정을 전부 감싸줍니다. 이 글은 설치부터 실행, 그리고 5.x 버전에서 실제로 튀어나온 경고 세 개까지 직접 실행한 결과로 정리합니다. 기준은 transformers 5.19.0, torch 2.11.0입니다.

3줄pipeline 최소 코드
20.6초파이프라인 준비
1.41초40토큰 생성
경고 3개5.19.0 실측

설치 — torch가 먼저다

transformers만 설치하면 모델을 못 돌립니다. 실제로 torch 없이 설치하면 이런 경고가 뜹니다.

[transformers] PyTorch was not found. Models won't be available and
only tokenizers, configuration and file/data utilities can be used.

설치 순서가 바뀌면 추론이 안 됩니다. torch 없이 transformers만 깔면 토크나이저와 설정 유틸리티만 쓸 수 있습니다. torch 먼저, transformers 나중입니다.

python3 -m venv hf
source hf/bin/activate
pip install torch
pip install transformers

설치 후 확인은 한 줄입니다. 맥에서는 MPS 가속 사용 여부까지 같이 봅니다.

python -c "import torch, transformers; print(torch.__version__, transformers.__version__, torch.backends.mps.is_available())"

pipeline 세 줄로 돌리기

가장 단순한 형태입니다. 모델 이름만 주면 다운로드와 로딩을 알아서 합니다.

from transformers import pipeline
import torch

pipe = pipeline("text-generation", model="Qwen/Qwen2.5-0.5B-Instruct",
                dtype=torch.float16, device="mps")
out = pipe([{"role": "user", "content": "로컬 LLM의 장점 한 가지만 말해줘."}],
           max_new_tokens=40)
print(out[0]["generated_text"][-1]["content"])

맥이면 device="mps", 엔비디아 GPU면 device="cuda", CPU만 쓸 거면 생략합니다. 실제 측정에서 파이프라인 준비에 20.6초, 생성 40토큰에 1.41초가 걸렸습니다. 준비 시간에는 모델 다운로드가 포함돼 있어 두 번째 실행부터는 훨씬 짧아집니다.

반환값 구조를 헷갈리는 분이 많습니다. 대화 형식으로 넣으면 generated_text가 문자열이 아니라 메시지 리스트로 돌아옵니다. 마지막 원소의 role이 assistant이고 거기에 답변이 들어 있습니다. 그래서 위 코드처럼 [-1]["content"]로 꺼냅니다.

실행하면 실제로 뜨는 경고 세 개

문서에는 잘 안 나오는데 돌리면 바로 보이는 것들입니다.

경고 의미 대응
generation_config 함께 전달 deprecated 생성 인자를 개별 전달하는 방식이 정리 중 GenerationConfig 객체로 묶기
max_new_tokens와 max_length 동시 설정 기본 max_length 20이 남아 충돌 max_new_tokens 쪽이 우선 적용됨
clean_up_tokenization_spaces BPE 토크나이저에서 파괴적일 수 있음 False로 명시

세 번째가 특히 중요합니다. 경고 문구 자체가 이 후처리는 WordPiece용이고 BPE에서는 구두점 앞 공백을 지워버려 파괴적이라고 말합니다. Qwen이나 Llama 계열은 BPE라 해당됩니다. 출력 품질이 미묘하게 이상하면 이 옵션부터 꺼 보십시오.

pipeline과 직접 호출 중 뭘 써야 하나

상황 권장 이유
빠르게 동작 확인 pipeline 세 줄이면 끝
배치 처리 pipeline 리스트를 그대로 받는다
생성 파라미터 세밀 제어 직접 호출 generate 인자를 전부 노출
KV 캐시·스트리밍 제어 직접 호출 pipeline이 감싸버린다

직접 호출로 가면 토크나이저와 모델을 따로 다루게 되는데, 여기서 5.x의 가장 큰 변경점을 만납니다. apply_chat_template이 텐서가 아니라 딕셔너리를 돌려줍니다. 예전 코드를 그대로 쓰면 AttributeError가 납니다. 해결은 return_dict=True를 주고 generate(**inputs) 형태로 넘기는 것이고, 전체 코드는 허깅페이스 사용법에 있습니다.

자주 묻는 질문

pipeline 결과에서 답변만 꺼내려면요?

대화 형식 입력이면 out[0]["generated_text"][-1]["content"]입니다. 문자열 입력이면 generated_text가 그냥 문자열입니다.

device를 지정하지 않으면 어떻게 되나요?

CPU에서 돌아갑니다. 동작은 하지만 속도가 크게 떨어지므로 맥은 mps, 엔비디아는 cuda를 명시하는 편이 낫습니다.

max_length 경고는 무시해도 되나요?

경고 문구가 max_new_tokens이 우선한다고 밝히고 있어 동작에는 문제가 없습니다. 다만 둘 중 하나만 쓰는 게 깔끔합니다.

작은 모델로 테스트해도 되나요?

동작 확인용으로는 적합합니다. 다만 0.5B급은 한국어 답변 품질이 낮아 실사용에는 7B 이상을 권합니다.

출처: 제조사 공식 스펙과 공개 유통 가격 기준. 가격·스펙은 변동될 수 있으므로 구매 전 최신 정보를 확인하세요.

답글 남기기