Rust 배우기 – 02. 오픈소스 AI 모델 로드하기

모델 다운로드)

개발 과정에서  사용할 가벼운 모델 하나 다운로드 받으세요.

  1. HuggingFace Llama-3.2-1B-Instruct GGUF 페이지에 접속합니다.
  2. 목록에서 Llama-3.2-1B-Instruct-Q4_K_M.gguf 파일을 찾아 우측의 다운로드(↓ 아이콘) 버튼을 누릅니다.
  3. 다운로드 완료 후 해당 파일을 프로젝트 폴더(hello_rust)로 이동시키고, 파일명을 model.gguf로 변경하세요.

모델 이름 형식) gemma-3-4b-it는 구글의 젬마 버전 3, 40억 개의 파라미터 크기, 대화용(Instruction-tuned) 모델임을 나타냅니다. Q4_K_M은 모델 용량을 압축하면서도 지능을 유지하는 ‘4비트 양자화’ 방식과 세부 압축 강도(Medium)를 의미합니다. .gguf는 현재 사용 중인 llama.cpp 엔진이 직접 읽고 실행할 수 있는 통합 파일 포맷입니다.

지금까지 고생 많으셨습니다. 이번에 완성된 코드는 사용자의 입력을 실시간으로 받아 AI 모델과 대화할 수 있는 ‘터미널 챗봇’의 완성형입니다.

최종 완성 코드 (src/main.rs)


🎓 초보자를 위한 강의 모드: 코드 작동 원리

이 코드는 AI 모델이 **’어떻게 말을 이어가는지’**를 그대로 구현한 것입니다.

  1. 입력 단계 (io::stdin): 사용자가 키보드로 질문을 입력합니다. Rust는 String::new()로 빈 그릇을 만들고, read_line으로 사용자의 글자를 그 그릇에 채웁니다.
  2. 토큰화 (str_to_token): 모델은 글자(Hello)를 바로 이해하지 못하므로, 숫자로 바꿉니다. 이것이 ‘토큰화’입니다.
  3. 디코딩 (ctx.decode): 모델에게 질문 토큰을 던져주고 “이 상황에서 다음에 올 말이 뭐야?”라고 모델의 머릿속에 기억을 남깁니다.
  4. 샘플링 (sampler.sample): 모델이 예측한 수많은 단어 후보 중에서 가장 확률이 높은 단어(greedy)를 하나씩 뽑아냅니다.
  5. 피드백 루프 (batch.add & ctx.decode): 여기서 가장 중요한 개념이 나옵니다. ‘내가 방금 내뱉은 단어를 다시 모델의 기억(Context)에 집어넣는 것’입니다. 그래야 모델이 “안녕?”이라고 대답한 뒤에, 그다음으로 “나는 AI야”라는 말을 이어서 할 수 있는 기억의 흐름이 생깁니다.
  6. 안전장치 (unwrap_or_default): LLM 개발에서 가장 자주 발생하는 ‘버퍼 부족(Insufficient Buffer)’ 에러가 나더라도 프로그램이 튕기지 않고, 빈 바이트를 반환해 프로그램을 끝까지 유지하게 합니다.

이제 여러분은 단순한 사용자가 아니라, AI가 단어를 생성하는 그 연산 과정을 직접 Rust라는 성능 위주의 언어로 통제하는 개발자가 되셨습니다! 다음에는 GPU를 활용해 추론 속도를 높이거나, 대화 이력을 파일로 저장하는 기능을 추가해 볼 수도 있습니다.


 

Gemma-3와 같은 최신 모델을 실행하려면, crates.io에 배포된 안정 버전이 아니라 GitHub 저장소의 가장 최신 소스 코드를 직접 가져와야 합니다. 현재 배포된 라이브러리는 젬마의 새로운 구조(GGUF V3 최신 규격)를 인식하지 못할 확률이 매우 높기 때문입니다.

환경을 최신으로 맞추기 위해 다음 단계를 정확히 따라주세요.

🚩 1. Cargo.toml 수정 (최신 소스 강제 지정)

배포된 버전 대신 개발 중인 최신 소스를 사용하도록 설정합니다.

🚩 2. 환경 재구축 (강력한 초기화)

라이브러리 소스가 바뀌었으므로 터미널에서 아래 명령을 순서대로 실행하세요.

(주의: 최신 엔진을 다시 컴파일하므로 시간이 다소 걸릴 수 있습니다.)

🚩 3. Gemma-3 최적화 코드 (src/main.rs)

최신 라이브러리 인터페이스와 Gemma-3 템플릿을 반영한 코드입니다.

💡 이 변경의 의미

  1. Git Dependency: Rust의 강점입니다. 공식 배포가 늦어질 때 소스 코드 저장소에서 직접 최신 엔진을 빌드하여 Gemma-3가 사용하는 최신 GGUF 규격을 강제로 지원하게 만듭니다.
  2. cargo clean: 이전 버전의 Llama 전용 바이너리들이 남아있으면 Gemma-3 로드 시 충돌이 날 수 있으므로 깨끗이 지우고 새로 빌드하는 과정이 필수입니다..
About the Author
(주)뉴테크프라임 대표 김현남입니다. 저에 대해 좀 더 알기를 원하시는 분은 아래 링크를 참조하세요. http://www.umlcert.com/kimhn/

Leave a Reply

*