본문으로 건너뛰기

© 2026 Molayo

Qiita헤드라인2026. 05. 19. 12:40

AI가 추론을 수행할 때 내부에서 어떤 일이 일어나는지, 로컬 LLM을 사용하여 시각화해 보았다

요약

로컬 LLM인 Qwen2.5-0.5B-Instruct를 활용하여 AI의 추론 과정 내부에서 발생하는 데이터 흐름을 시각화하는 실험을 진행했습니다. 모든 함수의 입출력을 디버그 트레이싱으로 기록하여 서버 기동부터 토큰 생성 단계까지의 전체 경로를 분석했습니다.

핵심 포인트

  • Qwen2.5-0.5B-Instruct 모델을 사용하여 CPU 환경에서도 동작 가능한 가벼운 실험 환경 구축
  • OpenAI의 API 구조를 모방하여 외부 호출 시 내부 데이터 경로를 추적할 수 있도록 설계
  • 모든 함수의 입출력을 표준 출력으로 기록하는 디버그 트레이싱 기법 적용
  • 토큰 생성 페이즈(Token Generation Phase)에서 반복적인 데이터 흐름이 발생하는 것을 확인

이번에 새롭게 AI 프로젝트에 배정되게 되었는데, AI 앱 자체는 개발해 본 적이 있지만 실제로는 시간이 별로 없어서 내부 구조를 직접 다뤄보지는 못했다.

내부 구조라고 해도, LLM이 일반적으로 공개되었던 초기에는 대전제로서 "AI라는 것은 결국 특정 단어로부터 다음 단어를 확률 모델 (Probability Model)에 따라 예측하고 있을 뿐이다"라는 점은 알고 있었다.

다만, LLM이 이만큼 진화하고 추론 (Inference) 성능도 상당히 높아진 시점에서 내부적으로 무엇이 변하고 있는지는 알지 못했기에, 그 공부를 위해 일부러 스크립트를 짜서 실험을 진행하게 되었다.

만약 소스 코드를 보고 싶으신 분은 이 리포지토리 (Repository)를 clone 해주시기 바란다. python3.11 이상에서 동작한다. 아래에 명시된 모델을 사용하면 CPU 머신에서도 문제없이 동작한다.

구성으로는 로컬 LLM + 추론 기구 (Inference Engine) + API만으로 이루어진 심플한 구성으로 했다. 로컬 LLM은 Huggingface의 Qwen/Qwen2.5-0.5B-Instruct를 사용했다. 이번에는 LLM이 어떻게 추론을 하는지?를 조사하는 것이 목적이었기에 그리 무거운 모델은 채택하지 않았다.

그리고 로컬 LLM을 핵심에 두면서, OpenAI의 Responsive API와 동일한 구조의 API를 모의적으로 구현했다. 이를 통해 외부에서 API를 호출했을 때, 도대체 내부에서 어떤 일이 일어나고 있는지?를 전부 볼 수 있다.

이번에 알고 싶었던 것은 "LLM에게 추론이라는 것을 시켰을 때 내부에서 어떤 일이 일어나는가"이다. 그래서 이번에는 다소 무리수일 수 있지만, 모든 함수의 모든 IN, OUT을 매번 표준 출력 (Standard Output)으로 output 하도록 설정했다. 이를 통해 모든 데이터의 경로를 시각화할 수 있다.

※ logger로 출력하려고 했으나 설정이 생각보다 번거로워 print로 처리했다. 일단 나중에 지울 수 있도록 해두었으니 양해 부탁드린다.

로그를 그대로 붙여넣으려고 한다. 매우 길기 때문에 열람에 주의해 달라.

※ AI의 답변이 일부 포함되어 있으나, ChatGPT 등 소스가 공개되지 않은 모델에 대한 언급은 추측의 범위를 벗어나지 않음을 양해해 주시기 바란다

[DEBUG-TRACE] enable_full_tracing | ENABLING FULL DEBUG TRACING for local_llm_runtime
14:05:38 [TRACE] ============================================================
14:05:38 [TRACE] ENABLING FULL DEBUG TRACING for local_llm_runtime
...

이 내용을 AI에게 해석시켜서, 결국 어떤 경로인지?를 해설하게 해 보았더니,

이와 같은 결과가 나왔다.

1. 서버 기동 페이즈 (Server Startup Phase)
python -m local_llm_runtime.api --port 8000 으로 서버를 기동
디버그 트레이싱 (Debug Tracing)이 활성화되어, 모든 함수의 입출력이 기록되는 설정
...

참고로 로그를 보면, 후반부는 거의 동일한 문자열이 나열되어 있는 것에 주목하셨는가? 이것은 아무래도 5번인 "토큰 생성 페이즈 (Token Generation Phase)"인 것이다. 이곳이 모델에 의한 생성의 본체이다.

그리고 이번에 사실 여러분께 전달하고 싶었던 것은 여기가 아니다. 내가 계속 궁금했던 것은 "그렇다면 AI가 생각하고 있는 것처럼 보이는 것은 어디서 이루어지는가?"라는 점이다. GPT-3.5나 GPT-4 시절이라면 그런 복잡한 일은 하지 않았고, 단순히 확률 모델로 다음 토큰을 예측하는 것이 인간의 눈에는 사고하는 것처럼 보일 뿐이라는 것을 알고 있었다. 실제로 당시 모델은 수학 질문을 해도 적당히 증명을 해오거나, 동작하지 않는 코드나 틀린 결론을 태연하게 내놓기도 해서, '아, 확률 모델이구나'라고 피부로 느낄 수 있었다. 다만 최근의 모델은 정말로 성능이 올라가서, 인간의 일을 빼앗는다는 것이 엔지니어 세계에서는 상당히 현실이 되어가고 있다고 생각한다. 그런 AI에 대해 내가 가지고 있던 인상은 "무언가 추론을 하기 위한 룰 베이스 (Rule-based) 로직 등을 넣고 있는 것이 아닐까?" 하는 것이었다. 아주 거친 이미지도로 표현하자면 다음과 같다.

다만 AI에게 이 질문을 던졌더니, 완전히 정반대의 답변이 돌아왔다.

추론 (Neural Network의 Forward Pass)은 두 개의 파일이 연계되어 실행됩니다:

  1. inference/decoder.py — 추론 루프 (Orchestrator)
    Decoder.generate() 메서드 (42행~)가 추론의 메인 루프입니다. 여기가 전체를 제어합니다:
    ...

그렇습니다. 사실 GPT-3.5 시대부터 해오던 방식은 크게 다르지 않으며, 추론(Inference)이라고 불리는 것도 결국은 확률 모델 (Probabilistic Model)에 의한 생성인 것입니다. 현대에 들어 정밀도가 높아진 것은 ① 단순히 파라미터 (Parameter) 수나 입력·출력할 수 있는 토큰 (Token) 수가 늘어났다 ② 도구를 통한 외부 검색을 사용할 수 있게 되었다 ③ 강화학습 (RL)을 통한 피드백을 강화했다 라는 세 가지 점뿐이었습니다. 즉, 결국 하고 있는 일은 앞서 보여드린 이미지 도표로 말하자면 다음과 같은 것에 불과합니다.

짧은 답변: 기본적인 메커니즘 (Next Token Prediction)은 동일함. 하지만 "루프를 돌리는 방식"이 진화하고 있음.
1. Chain-of-Thought (사고의 연쇄) — 가장 단순한 방법
ChatGPT나 Claude가 "생각하는 것처럼 보이는" 것은, 사실 텍스트로서 사고 과정을 생성하고 있을 뿐입니다:
...

그렇게 되면 궁금해지는 것은 reasoning level (추론 수준)입니다. 예를 들어 ChatGPT에서도 최근에는 "즉시 답변하기", "깊게 생각하기" 등의 선택을 할 수 있습니다. 이것이 도대체 무엇인지, 이 또한 AI에게 확인해 보았습니다.

핵심: "사고 토큰 (Thought Token)의 상한선을 바꾸고 있을 뿐"
당신의 코드에 대입하면 다음과 같습니다:
# 당신의 코드 (decoder.py:70)
...

놀라울 정도로 단순했습니다. 다룰 수 있는 토큰이 많아지면, 생성 결과물 중에서 이리저리 고민하며 생각하는 듯한 생성물이 나오고, 그것이 더욱 깊은 생성 결과로 이어지는 것입니다.

내부 구조는 알게 되었지만, 그렇다면 그것을 바탕으로 AI를 다룰 때 어떻게 해야 하는가?는 또 다른 문제이며, 그 점에 대해 저의 견해를 말씀드리고 싶습니다.

결국 AI라는 것은 확률 모델에 의한 토큰 예측이라는 사실은 예나 지금이나 변함이 없다는 것을 알게 되었습니다. 그렇게 되면 역으로 무엇을 말할 수 있느냐 하면, "모델이 아무리 정밀해졌다고 해도, AI에 입력하는 프롬프트 (Prompt)를 대충 해서는 안 된다"는 것입니다.

결국 독립적인 검증 메커니즘을 갖지 못하는 것이 AI이며, 한정된 토큰 안에서 뱅글뱅글 사고하며 생성하는 것이 내부 구조라면, 그 한정된 토큰을 어떻게 유효하게 사용하는가가 핵심이 됩니다.

즉, 역시 원래부터 말해져 왔던 것처럼 AI에 대해서는 ① 불필요한 정보나 노이즈는 넣지 않는다 ② 논리적으로 정리하고 지시를 단순화하여 전달한다 ③ AI가 한 번에 이해할 수 있는 정보량을 제공한다 ④ 지시를 여러 개詰め込지 말고, 한 번에 한 가지 지시만 한다 라는 것과 같은 것들이 필요하며, 이는 예나 지금이나 변하지 않는다는 결론에 도달합니다.

예를 들어 저는 앞으로 특정 데이터 기반의 잡 (Job) 정의를 다른 기반으로 이전하기 위한 에이전트 (Agent)를 작성하려고 하는데, 그때도 태스크 (Task)를 세밀하게 세분화하거나 긴 입력 데이터를 요약하는 것이 중요하다고 느끼고 있습니다.

LLM의 진화는 최근 눈부시며 기술적인 진보에 지식이 따라가지 못할 때도 있지만, 역시 앞으로의 시대에는 AI를 핵심에 두고 비즈니스를 전개하는 상황도 많아질 것이기에, 기술적인 실험은 앞으로도 꼭 계속해 나가고 싶습니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0