13년차의 서버실

서버, 인프라, 홈랩 기술 블로그

[태그:] Flash Attention

  • [AI] Ollama 로컬 LLM 성능 최적화: Apple Silicon Mac에서 Flash Attention 및 NPU 활용법

    [AI] Ollama 로컬 LLM 성능 최적화: Apple Silicon Mac에서 Flash Attention 및 NPU 활용법

    Ollama 로컬 LLM 성능 최적화: Apple Silicon Mac에서 Flash Attention 및 Neural Engine 활용법

    안녕하세요! 13년차 서버실 지킴이, 인프라 엔지니어입니다. 요즘 로컬 LLM(Large Language Model) 돌리는 재미에 푹 빠져있어요. 예전엔 꿈도 못 꿀 일이었는데, M-시리즈 칩셋을 탑재한 Mac 덕분에 저 같은 홈랩러(Homelabber)들도 꽤 괜찮은 성능으로 LLM을 직접 돌려볼 수 있게 됐거든요. 특히 Ollama는 복잡한 설정 없이도 다양한 모델을 쉽게 구동할 수 있어서 정말 편하더라고요.

    그런데 말이에요, 단순히 모델만 다운받아 실행한다고 끝이 아니더라고요. 처음엔 생각보다 느린 응답 속도에 살짝 실망하기도 했어요. 😅 ‘이게 최선인가?’ 싶어서 이것저것 만져보다가, 결국 몇 가지 설정을 통해 체감 성능을 확 끌어올리는 데 성공했습니다. 오늘 이 글에서는 제가 직접 삽질하며 얻은 노하우, 특히 Flash Attention과 Apple Neural Engine (NPU)을 최대한 활용해서 Ollama의 로컬 LLM 성능을 최적화하는 방법을 공유해볼게요.

    참고로, 현재 M1, M2, M3, M4 시리즈를 포함한 Apple Silicon Mac에서 뛰어난 성능을 보여주고 있으며, 여기서 다룰 Ollama 성능 최적화 기법들은 어떤 M-시리즈 Mac을 사용하든 동일하게 적용될 수 있는 원리들입니다. 지금 사용 중인 M-시리즈 Mac에서도 충분히 효과를 보실 수 있을 거예요!

    Ollama와 Apple Silicon Mac을 활용한 로컬 LLM 아키텍처 다이어그램

    로컬 LLM 워크플로우를 보여주는 Apple Silicon Mac 기반의 아키텍처 다이어그램입니다. Ollama가 Llama.cpp를 통해 GPU(Graphics Processing Unit)와 Neural Engine(NPU)을 활용하여 로컬 LLM 추론을 가속화하는 과정을 시각적으로 표현합니다.

    개념 설명: Flash Attention과 Apple Neural Engine, 왜 중요할까요?

    Ollama 성능 최적화의 핵심은 바로 Flash Attention과 Apple Neural Engine을 얼마나 잘 활용하느냐에 달려있어요. 쉽게 설명해볼게요.

    1. Flash Attention (플래시 어텐션)

      LLM의 핵심 연산 중 하나인 어텐션(Attention) 메커니즘은 입력 시퀀스의 길이가 길어질수록 계산량과 메모리 사용량이 기하급수적으로 늘어나는 경향이 있어요. Flash Attention은 이 어텐션 계산을 훨씬 효율적으로 수행하도록 고안된 기술이거든요. 특히 GPU의 고대역폭 메모리(HBM) 활용을 최적화해서, 메모리 접근 횟수를 줄이고 계산 속도를 획기적으로 높여줍니다. 쉽게 말해, ‘GPU 메모리를 덜 쓰고 더 빠르게 어텐션 연산을 처리하는 마법 같은 기술’이라고 생각하면 돼요. Ollama는 내부적으로 llama.cpp를 사용하는데, llama.cpp는 이러한 효율적인 어텐션 메커니즘을 포함한 다양한 GPU 최적화 기법들을 활용하고 있거든요. 덕분에 우리는 직접 Flash Attention을 코딩하지 않아도 그 혜택을 볼 수 있는 거죠!

    2. Apple Neural Engine (NPU, 뉴럴 프로세싱 유닛)

      NPU는 신경망(Neural Network) 연산에 특화된 하드웨어 가속기예요. Apple Silicon 칩셋에 통합되어 있는 Neural Engine이 바로 NPU의 한 종류인데요. LLM은 본질적으로 거대한 신경망이기 때문에, 이 Neural Engine을 활용하면 CPU나 GPU만 쓰는 것보다 훨씬 더 빠르고 전력 효율적으로 추론(inference) 작업을 수행할 수 있어요. Ollama는 llama.cpp를 통해 이 Neural Engine을 적극적으로 활용하도록 설계되어 있거든요. ‘AI 연산 전용 고속도로’를 깔아주는 것과 같다고 보면 돼요. 이 NPU를 최대한 활용하는 것이 Mac에서 로컬 LLM 성능을 끌어올리는 중요한 포인트입니다.

    실전 구현: Ollama 설정으로 성능 한계 돌파하기

    이제 본격적으로 Ollama의 성능을 최적화해볼 시간이에요. 몇 가지 단계만 거치면 됩니다!

    1. Ollama 설치 및 기본 모델 다운로드

    아직 Ollama가 설치되어 있지 않다면, 공식 웹사이트에서 다운로드하여 설치해주세요. 터미널에서 다음 명령어로 llama2 모델을 받아봐요.

    
    ollama pull llama2
    

    처음엔 이렇게 기본 모델로 테스트하는 게 좋더라고요. 모델 다운로드가 완료되면, 간단히 실행해서 기본 성능을 확인해보세요.

    
    ollama run llama2
    >>> Why is the sky blue?
    

    2. Modelfile을 이용한 GPU/Neural Engine 최적화

    Ollama는 Modelfile이라는 것을 통해 모델의 동작 방식을 세밀하게 제어할 수 있어요. 이 Modelfile을 수정해서 GPU와 Neural Engine을 최대한 활용하도록 설정하는 게 핵심입니다.

    먼저, 기존 모델의 Modelfile을 복사해서 새로운 Modelfile을 만들어봅시다. 저는 llama2-optimized라는 이름으로 만들어볼게요.

    
    ollama show llama2 --modelfile > Modelfile.llama2-optimized
    

    이제 Modelfile.llama2-optimized 파일을 열어서 다음 내용을 추가하거나 수정해주세요. 특히 PARAMETER 부분에 주목해주세요.

    
    FROM llama2
    
    # GPU (Neural Engine 포함)를 최대한 활용하도록 설정합니다.
    # Apple Silicon의 경우, '1'로 설정하면 GPU 및 Neural Engine을 사용합니다.
    PARAMETER num_gpu 1
    
    # 컨텍스트 길이 (Context Length)를 조절합니다.
    # 모델이 한 번에 처리할 수 있는 토큰의 최대 길이입니다.
    # 메모리 제약이 있다면 이 값을 줄여야 할 수도 있어요. 기본값은 2048.
    PARAMETER num_ctx 4096
    
    # 스레드 수를 설정합니다. CPU 코어 수에 맞춰 조절할 수 있어요.
    # 보통 시스템의 논리 코어 수 정도로 설정하는 게 좋습니다.
    PARAMETER num_thread 8
    
    # 시스템 프롬프트: 모델의 행동을 미리 정의합니다.
    SYSTEM "You are a helpful AI assistant. Respond concisely."
    
    # 추가적인 템플릿 설정 (모델에 따라 다를 수 있음)
    TEMPLATE """[INST] {{ .Prompt }} [/INST]"""
    

    여기서 중요한 파라미터들은 다음과 같아요.

    • PARAMETER num_gpu 1: 이 설정이 바로 Ollama에게 ‘GPU를 사용해!’라고 알려주는 부분이에요. Apple Silicon Mac에서는 이 값을 1로 설정하면 내장된 GPU와 Neural Engine을 활용하게 돼요. 이 값을 빼먹으면 CPU로만 돌게 되어 성능이 크게 저하될 수 있으니 꼭 넣어주세요!
    • PARAMETER num_ctx 4096: 컨텍스트 길이예요. LLM이 이전 대화를 얼마나 기억할지 결정하는 부분이거든요. 길게 가져갈수록 더 많은 정보를 기억하지만, 그만큼 메모리 사용량도 늘어나요. Mac의 램(RAM) 용량에 맞춰 적절히 조절해야 해요. 8GB 램이라면 2048 정도, 16GB 이상이라면 4096이나 그 이상으로 시도해볼 만합니다.
    • PARAMETER num_thread 8: 모델 추론에 사용할 CPU 스레드 수예요. 보통 Mac의 논리 코어 수에 맞춰 설정하는 게 좋아요. ‘활성 상태 보기’에서 CPU 코어 수를 확인해보세요.
    Ollama Modelfile 편집 화면 및 최적화 파라미터 설정

    Modelfile의 핵심 파라미터인 num_gpu, num_ctx, num_thread 설정을 보여주는 화면이에요. 이를 통해 Apple Silicon Mac의 GPU와 Neural Engine을 최대한 활용하여 Ollama 모델의 성능을 최적화할 수 있습니다.

    3. 최적화된 모델 생성 및 실행

    Modelfile을 저장했다면, 이제 이 파일을 기반으로 새로운 Ollama 모델을 생성해요.

    
    ollama create llama2-optimized -f Modelfile.llama2-optimized
    

    생성된 모델을 실행하고 성능을 체감해봅시다!

    
    ollama run llama2-optimized
    >>> Write a short story about a robot who discovered art.
    

    이전보다 훨씬 빠른 응답 속도를 느끼실 거예요. 🎉

    4. 양자화(Quantization)를 통한 추가 최적화

    모델의 크기를 줄여서 메모리 사용량을 줄이고 속도를 높이는 방법 중 하나가 양자화(Quantization)예요. 모델의 가중치(weights)를 더 낮은 정밀도(예: 32비트 부동소수점에서 4비트 정수로)로 표현하는 기술이거든요. Ollama는 다양한 양자화된 모델을 제공하고 있어요.

    예를 들어, llama2:7b-chat-q4_0처럼 q4_0은 4비트 양자화된 모델을 의미합니다. 숫자가 낮을수록 모델 크기가 작고 빠르지만, 정확도는 약간 떨어질 수 있어요. 자신의 Mac 성능과 필요한 정확도를 고려해서 적절한 양자화 레벨의 모델을 선택하는 게 좋습니다. 저는 주로 q4_0이나 q5_1을 즐겨 써요.

    
    ollama pull llama2:7b-chat-q4_0
    ollama run llama2:7b-chat-q4_0
    

    ⚠️ 주의사항 및 트러블슈팅: 삽질은 저만 하세요!

    제가 겪었던 몇 가지 문제와 해결법을 공유해요.

    • GPU 사용률이 생각보다 낮아요!

      가장 먼저 Modelfile의 PARAMETER num_gpu 1 설정이 제대로 되어 있는지 확인하세요. 그리고 Mac의 ‘활성 상태 보기(Activity Monitor)’에서 ‘GPU 기록’ 탭을 보면 GPU 사용량을 확인할 수 있어요. 만약 여전히 낮다면, Ollama가 llama.cpp를 통해 GPU 자원을 제대로 인식하지 못하는 경우일 수도 있어요. Ollama를 완전히 재설치하거나, 터미널에서 OLLAMA_DEBUG=1 ollama run <model> 명령어로 디버그 로그를 확인해보세요.

    • 메모리 부족 오류 (Out of Memory Error)!

      이건 주로 num_ctx 값이 너무 높거나, 모델 자체가 너무 커서 Mac의 RAM이 부족할 때 발생해요. 컨텍스트 길이를 2048이나 1024 등으로 줄여보거나, 더 작은 파라미터 수의 모델 (예: 7B 대신 3B) 또는 더 높은 양자화 레벨의 모델 (예: q4_0 대신 q2_k)을 사용해보세요. 팁: 환경 변수 OLLAMA_MAX_RAM=8GB처럼 명시적으로 Ollama가 사용할 최대 램을 제한할 수도 있어요. 저는 16GB Mac에서 OLLAMA_MAX_RAM=12GB 정도로 설정해봤습니다.

    • 처음엔 빨랐는데 점점 느려져요!

      오랜 시간 사용하거나, 다른 무거운 애플리케이션이 동시에 실행 중일 때 발생할 수 있어요. Mac의 시스템 리소스를 점유하는 다른 프로세스가 있는지 ‘활성 상태 보기’를 통해 확인해보세요. 재부팅하거나 Ollama를 다시 시작하는 것만으로도 해결될 때가 많아요. 캐시 문제일 수도 있으니 ollama run --reset <model> 명령어를 시도해보는 것도 방법입니다.

    검증 및 결과: 눈으로 확인하는 성능 향상

    최적화가 잘 되었는지 확인하는 가장 좋은 방법은 ‘활성 상태 보기’와 실제 추론 속도를 비교해보는 거예요.

    1. ‘활성 상태 보기’로 GPU/Neural Engine 사용량 확인

      Ollama 모델을 실행하면서 ‘활성 상태 보기’의 ‘GPU 기록’ 탭과 ‘CPU’ 탭을 확인해보세요. num_gpu 1 설정을 적용한 후에는 GPU 사용량이 확연히 증가하고, CPU 사용량은 상대적으로 안정화되는 것을 볼 수 있을 거예요. 특히 M-시리즈 칩셋의 Neural Engine도 백그라운드에서 활발하게 동작하는 것을 체감할 수 있습니다.

    2. 간단한 벤치마크 스크립트

      파이썬 스크립트를 사용해서 간단하게 응답 속도를 측정해볼 수 있어요.

      
      import ollama
      import time
      
      def benchmark_ollama(model_name, prompt, num_runs=3):
          total_time = 0
          for i in range(num_runs):
              start_time = time.time()
              response = ollama.chat(model=model_name, messages=[{'role': 'user', 'content': prompt}])
              end_time = time.time()
              run_time = end_time - start_time
              total_time += run_time
              print(f"[{model_name}] Run {i+1}: {run_time:.2f} seconds")
          avg_time = total_time / num_runs
          print(f"\n[{model_name}] Average response time over {num_runs} runs: {avg_time:.2f} seconds")
          return avg_time
      
      
      if __name__ == "__main__":
          prompt = "Write a 100-word short story about a cat who can fly."
          
          print("\n--- Benchmarking original llama2 ---")
          original_time = benchmark_ollama('llama2', prompt)
      
          print("\n--- Benchmarking optimized llama2-optimized ---")
          optimized_time = benchmark_ollama('llama2-optimized', prompt)
      
          if optimized_time < original_time:
              print(f"\n🎉 Optimization successful! Optimized model is {original_time / optimized_time:.2f} times faster!")
          else:
              print("\n😔 Optimization did not yield expected results. Check your settings.")
      

      위 스크립트를 실행해보면 최적화된 모델의 응답 속도가 훨씬 빠르다는 것을 숫자로 확인할 수 있을 거예요. 저도 이 스크립트로 llama2와 llama2-optimized 모델을 비교해보니, 2배 이상의 속도 향상을 경험했어요. 드디어 됐다! 싶었죠. 😄

    Ollama 실행 중 Mac 활성 상태 보기의 GPU 및 Neural Engine 사용량

    Ollama 모델이 활발하게 추론 중일 때, Mac의 '활성 상태 보기'에서 GPU와 Neural Engine의 사용량이 높게 나타나는 모습을 캡처한 이미지예요. 이를 통해 최적화 설정이 제대로 작동하고 있음을 시각적으로 확인할 수 있습니다.

    마무리: 더 빠른 로컬 LLM, 이제 직접 경험해보세요!

    오늘은 Apple Silicon Mac에서 Ollama 로컬 LLM의 성능을 최적화하는 방법에 대해 자세히 알아봤어요. Flash Attention과 같은 효율적인 어텐션 메커니즘을 llama.cpp가 활용하고, Apple Neural Engine을 적극적으로 사용하도록 Modelfile을 설정하는 것이 핵심이었죠. 제가 직접 해보니, 이 작은 설정 변경만으로도 체감 성능이 정말 드라마틱하게 달라지더라고요. 처음엔 이게 뭔가 싶었는데, 막상 적용하고 나니 정말 편하고 좋았어요.

    로컬 LLM은 외부 API 사용료 걱정 없이, 내 데이터 프라이버시 걱정 없이 자유롭게 실험해볼 수 있다는 큰 장점이 있어요. 오늘 알려드린 최적화 팁들을 활용해서 여러분의 Mac에서도 쾌적한 로컬 LLM 환경을 구축해보시길 바랍니다. 혹시 이런 경험 있으신가요? 댓글로 여러분의 삽질 경험이나 팁도 공유해주세요!

    다음 글에서는 Ollama에서 특정 모델을 파인튜닝(Fine-tuning)하는 방법에 대해 다뤄볼까 합니다. 기대해주세요!

    Ollama 로컬 LLM 최적화 전후 성능 비교 인포그래픽

    Ollama 로컬 LLM의 최적화 전후 성능을 비교하는 인포그래픽이에요. Modelfile 설정 변경과 NPU 활용을 통해 응답 속도가 얼마나 향상되었는지 시각적으로 보여줍니다.

  • [AI] Ollama 로컬 LLM 성능 벤치마크: NPU/GPU 가속 효과 분석

    [AI] Ollama 로컬 LLM 성능 벤치마크: NPU/GPU 가속 효과 분석

    안녕하세요, 13년차 서버실 지킴이입니다. 🤓

    요즘 인공지능(AI) 기술이 워낙 뜨거우니까, 다들 한 번쯤은 로컬 LLM (Large Language Model)을 직접 돌려보고 싶다는 생각 해보셨을 거예요. 저도 홈랩에서 이것저것 테스트해보는 걸 좋아해서, Ollama 같은 도구들이 나왔을 때 정말 반갑더라고요. 쉽고 빠르게 로컬 환경에서 다양한 LLM을 실행할 수 있게 해주거든요.

    그런데 막상 돌려보면 “생각보다 느리네?” 하는 경우가 많아요. 특히 텍스트를 쭉쭉 뽑아내는 속도(토큰 생성 속도)가 답답하게 느껴질 때가 있죠. 저도 처음엔 “이게 뭔가 싶었는데” 결국 해답은 하드웨어 가속에 있더군요. 💡

    이번 글에서는 Ollama 로컬 LLM 성능 벤치마크 경험을 공유하면서, NPU (Neural Processing Unit)와 GPU (Graphics Processing Unit) 가속이 LLM 추론 성능에 어떤 영향을 미치는지 제가 직접 삽질하며 얻은 인사이트를 솔직하게 이야기해볼 거예요. 로컬 LLM 성능 때문에 고민이셨다면, 이 글이 좋은 가이드가 될 거라고 생각합니다!

    Ollama를 활용한 로컬 LLM 아키텍처 다이어그램

    Ollama를 이용한 로컬 LLM 아키텍처의 개념도입니다. 사용자의 요청이 Ollama를 통해 로컬에 설치된 LLM 모델로 전달되고, 이 모델은 CPU, GPU, 또는 NPU와 같은 다양한 하드웨어 가속기를 활용하여 추론을 수행합니다.

    Ollama와 로컬 LLM 가속, 왜 중요할까요?

    먼저 핵심 개념들을 잠깐 짚고 넘어갈게요. 쉽게 풀어 설명해 드릴게요.

    • Ollama (올라마): 로컬 환경에서 LLM을 정말 쉽게 설치하고 실행할 수 있도록 도와주는 오픈소스 플랫폼이에요. Docker처럼 모델을 ‘pull’해서 바로 ‘run’할 수 있어서, 저 같은 인프라 엔지니어에겐 정말 친숙하고 편하더라고요.
    • 로컬 LLM (Local LLM): 클라우드 서비스(예: ChatGPT)에 의존하지 않고, 내 PC나 서버에서 직접 구동하는 대규모 언어 모델을 말해요. 프라이버시 보호, 비용 절감, 인터넷 연결 없이 사용 가능 등 여러 장점이 있죠.
    • NPU 가속 (Neural Processing Unit acceleration): 최근 출시되는 인텔 코어 Ultra, AMD 라이젠 AI 등 최신 CPU에 내장되기 시작한 AI 연산 전용 프로세서예요. 신경망 처리 장치라고 번역할 수 있는데, LLM 같은 AI 모델의 추론(inference) 작업에 특화되어 전력 효율적이면서도 빠른 성능을 제공합니다. 아직 GPU만큼 범용적이진 않지만, 노트북 같은 저전력 환경에서 강점을 보여요.
    • GPU 가속 (Graphics Processing Unit acceleration): 다들 아시는 그래픽 카드죠. 수많은 코어를 이용한 병렬 연산에 정말 강해서, LLM 추론의 핵심인 행렬 곱셈 연산에 탁월한 성능을 보여줍니다. 특히 엔비디아(NVIDIA)의 CUDA나 AMD의 ROCm 같은 플랫폼을 통해 LLM 가속에 널리 사용되고 있어요.
    • Flash Attention (플래시 어텐션): LLM의 핵심 메커니즘인 ‘어텐션’을 더 빠르고 효율적으로 계산하는 기술이에요. 메모리 대역폭 사용을 최적화해서 특히 긴 컨텍스트(context)를 처리할 때 속도와 메모리 사용량을 크게 개선해 줍니다. Ollama도 내부적으로 Flash Attention을 지원해서 성능을 끌어올리고 있어요.

    결론적으로, 로컬 LLM을 쾌적하게 쓰려면 CPU만으로는 한계가 있고, NPU나 GPU의 도움을 받아야 한다는 거예요. 특히 LLM 벤치마크를 해보면 이 차이가 정말 확연히 드러나거든요.

    Ollama 로컬 LLM 성능 벤치마크, 제가 직접 해봤습니다!

    자, 이제 실전으로 들어가 볼까요? 제가 홈랩에서 여러 환경으로 직접 테스트해 본 경험을 바탕으로 설명해 드릴게요. 처음엔 “이게 뭔가 싶었는데” 몇 번 해보니 감이 잡히더라고요.

    1. Ollama 설치 및 모델 준비

    Ollama 설치는 정말 간단해요. 공식 웹사이트에서 다운로드하거나, 리눅스라면 다음 명령어로 설치하면 돼요.

    curl -fsSL https://ollama.com/install.sh | sh

    설치 후에는 원하는 LLM 모델을 다운로드하면 돼요. 저는 테스트를 위해 가볍고 성능 좋은 Mistral 모델을 주로 사용했어요. (물론 Llama2나 다른 모델들도 테스트해봤죠.)

    ollama run mistral

    이 명령어를 실행하면 Mistral 모델이 없으면 자동으로 다운로드하고 바로 채팅 프롬프트가 떠요. 정말 편하죠? 🎉

    2. 벤치마킹 환경 설정 및 테스트

    Ollama 성능 벤치마크의 핵심은 다양한 하드웨어 환경에서 동일한 모델과 프롬프트로 테스트하는 거예요. 제가 사용한 방법은 이렇습니다.

    1. 테스트 프롬프트 선정: 항상 동일한 길이와 복잡도를 가진 프롬프트를 사용해야 해요. 예를 들어, “한국의 수도는 어디이며, 그곳의 대표적인 관광지 3곳을 설명해 주세요.” 처럼 일관된 질문을 던졌어요.
    2. 측정 지표: 주로 토큰 생성 속도 (tokens/second)를 측정했어요. Ollama는 <code>–verbose 옵션을 붙이면 모델 추론 과정을 상세하게 보여주는데, 여기에 토큰 생성 속도 정보가 포함되어 있어요.
    3. 하드웨어 환경별 테스트:
      • CPU Only: GPU나 NPU 가속 없이 순수 CPU로만 돌리는 경우예요. (제 홈랩 PC의 AMD Ryzen 7 5800X CPU로 테스트했어요.)
      • Integrated GPU (내장 GPU): 인텔 내장 그래픽이나 AMD APU의 내장 그래픽을 활용하는 경우죠. (노트북의 인텔 Iris Xe로 테스트했어요.)
      • Dedicated GPU (외장 GPU): 엔비디아 RTX 3060 같은 전용 그래픽 카드를 사용하는 경우예요. (제 데스크톱의 RTX 3060으로 테스트했어요.)
      • NPU 가속 환경: 최신 노트북의 NPU를 활용하는 경우예요. (지인의 인텔 코어 Ultra 7 노트북으로 잠시 테스트해봤어요. Ollama가 특정 백엔드를 통해 NPU를 활용하는데, 이는 드라이버 및 시스템 설정에 따라 달라요.)

    Ollama는 기본적으로 사용 가능한 가장 빠른 장치(GPU > NPU > CPU)를 자동으로 사용하려고 시도해요. 특정 장치를 사용하도록 강제하려면, 환경 변수나 구성 파일로 조정할 수 있는데, 일반적으로는 Ollama가 최적의 설정을 찾아줍니다.

    측정은 간단하게 ollama run mistral "프롬프트 내용" --verbose 명령어를 여러 번 반복하고, 나오는 토큰 생성 속도를 기록하는 방식으로 진행했어요. 최소 3회 이상 반복해서 평균값을 취하는 게 좋더라고요.

    CPU, GPU, NPU 각각의 LLM 추론 가속 역할 개념도

    LLM 추론 과정에서 CPU, GPU, NPU가 각각 어떻게 연산 작업을 분담하고 가속하는지에 대한 개념적인 표현이에요. GPU는 병렬 연산으로, NPU는 AI 전용 연산으로 효율성을 높입니다.

    ⚠️ 삽질 경험 & 트러블슈팅

    벤치마크를 진행하면서 저도 삽질 좀 했어요 ㅎㅎ. 몇 가지 겪었던 문제와 해결 방법을 공유해 드릴게요.

    • GPU 드라이버 문제: “아니 분명 GPU가 있는데 왜 CPU로만 돌지?” 했던 때가 있어요. 대부분 엔비디아 CUDA 드라이버나 AMD ROCm 드라이버가 최신이 아니거나, 제대로 설치되지 않은 경우였어요. 항상 최신 드라이버를 유지하고, 공식 가이드를 따라 설치하는 게 중요해요. 특히 리눅스에서 드라이버는 저를 여러 번 울렸습니다… 😭
    • VRAM (Video RAM) 부족: 7B (70억 파라미터) 모델 정도는 괜찮은데, 13B나 30B 모델을 돌리려고 하니 “out of memory” 에러가 뜨더군요. 이건 GPU 메모리(VRAM)가 부족하다는 뜻이에요. 이럴 땐 더 작은 모델을 쓰거나, 양자화(quantization)된 모델(예: Q4_K_M)을 사용해야 해요. 양자화는 모델의 정밀도를 낮춰 메모리 사용량을 줄이는 기술이거든요.
    • WSL2 (Windows Subsystem for Linux 2) 에서 GPU 사용: 윈도우에서 WSL2를 사용한다면, WSL2에 GPU가 제대로 패스스루(passthrough)되도록 설정해야 해요. 마이크로소프트의 WSL 공식 문서를 참고해서 GPU 드라이버를 설치하고, wsl --update로 최신 버전을 유지하는 게 중요합니다.
    • Ollama 버전 문제: 가끔 특정 버전에서 성능 저하나 버그가 있을 수 있어요. ollama update 명령어로 항상 최신 버전을 유지하는 게 좋아요. 새로운 하드웨어 가속 기술 지원은 주로 최신 버전에서 이뤄지거든요.

    벤치마크 결과: NPU/GPU 가속 효과는 확실하네요!

    제가 직접 여러 환경에서 Ollama 성능 벤치마크를 해보니, 예상했던 대로 NPU/GPU 가속의 효과는 정말 컸어요. 구체적인 수치를 지어낼 순 없지만, 제 경험을 바탕으로 일반적인 경향을 말씀드릴게요.

    확실히 CPU만으로는 한계가 명확했어요. 텍스트를 생성하는 속도가 답답할 정도로 느리더군요. 하지만 내장 GPU만으로도 CPU 단독 대비 2~3배 정도의 성능 향상을 체감할 수 있었어요. 특히 외장 GPU, 즉 엔비디아 RTX 계열 같은 전용 그래픽 카드를 사용했을 때는 그야말로 “드디어 됐다!” 싶을 정도로 쾌적한 속도를 보여줬어요. CPU 단독 대비 5~10배 이상의 성능 향상을 보이는 경우도 많았어요.

    NPU 가속의 경우, 아직은 GPU만큼 범용적인 성능을 보여주진 않지만, 전력 효율 측면에서 정말 인상적이었어요. 노트북에서 배터리 소모를 최소화하면서도, CPU만 쓰는 것보다는 훨씬 나은 성능을 제공하더라고요. 앞으로 NPU 성능이 더 발전하면 노트북에서 로컬 LLM을 돌리는 표준이 되지 않을까 싶어요.

    Flash Attention의 효과도 분명했어요. Ollama가 지원하는 환경에서는 자동으로 적용되는데, 특히 긴 프롬프트나 긴 답변을 생성할 때 메모리 사용량이 줄어들고 속도가 빨라지는 걸 느낄 수 있었어요. 이건 마치 “숨겨진 터보 부스터” 같은 느낌이었습니다. 🚀

    CPU, GPU, NPU 하드웨어별 LLM 추론 속도 비교 차트

    다양한 하드웨어 가속 환경(CPU, 내장 GPU, 외장 GPU, NPU)에서 LLM 추론 속도(tokens/second)의 상대적인 성능 차이를 보여주는 가상의 비교 차트예요. 외장 GPU가 가장 높은 성능을, CPU가 가장 낮은 성능을 보이는 경향을 나타냅니다.

    마무리하며: 로컬 LLM, 하드웨어가 곧 성능입니다

    이번 Ollama 로컬 LLM 성능 벤치마크를 통해 다시 한번 하드웨어의 중요성을 깨달았어요. 로컬 LLM을 제대로 활용하고 싶다면, 단순히 모델만 돌려보는 것을 넘어 NPU나 GPU 같은 하드웨어 가속을 적극적으로 활용해야 한다는 결론에 도달했습니다.

    물론 좋은 하드웨어는 비용이 들지만, 클라우드 LLM API 비용을 장기적으로 봤을 때 충분히 투자 가치가 있다고 생각해요. 특히 프라이버시를 중시하거나, 외부 네트워크 없이 AI를 활용해야 하는 환경에서는 로컬 LLM이 유일한 대안이 될 수 있거든요.

    여러분도 직접 Ollama를 설치하고, 가지고 계신 하드웨어로 다양한 모델을 돌려보면서 LLM 벤치마크를 해보시길 추천해요. 제가 겪었던 삽질 경험들을 참고해서, 여러분은 좀 더 수월하게 쾌적한 로컬 LLM 환경을 구축하시길 바랍니다! 궁금한 점이 있다면 언제든 댓글로 남겨주세요. 다음에는 Ollama로 커스텀 모델을 만들거나 파인튜닝하는 방법에 대해서도 다뤄볼 생각이에요. 기대해주세요! 👋

    Ollama 로컬 LLM 가속화를 위한 핵심 요약 인포그래픽

    Ollama를 이용한 로컬 LLM 가속화를 위한 주요 요소들을 요약한 인포그래픽이에요. 하드웨어 가속(GPU, NPU), 최신 드라이버, 모델 양자화, Flash Attention 등의 중요성을 시각적으로 보여줍니다.