DEV/AI

Ollama 설치와 운영 : 로컬 환경에서 대규모 언어 모델을 쉽게 실행하기

오리야호 2024. 9. 13. 01:34
반응형

 

최근 LLM 서비스들이 점점 더 널리 사용되고 있지만, 개인정보 보호와 비용 문제로 인해 고민하는 사용자들이 많습니다. 특히 폐쇄망 환경에서 오픈소스 기반 모델을 로컬 환경에서 실행할 수 있다면 이러한 고민들이 해소가 되겠죠.

 

Ollama는 클라우드에 의존하지 않고, 개인 컴퓨터에서 대형 언어 모델을 직접 실행할 수 있는 솔루션으로, 인터넷 연결이 불필요한 폐쇄망에서도 동작할 수 있어 괜찮은 대안이 될 수 있습니다.

 

지금부터 공개된 LLM 모델들을 로컬에서 직접 실행하고 관리할 수 있도록 해주는 Ollama에 대해 알아보겠습니다.

 

ollama 만을 활용해 llama 3.1 모델로 추론할 경우 아래와 같이 활용될 수 있습니다.

 

 

 

 

그런데 우리가 AI를 활용하여 서비스를 만들거나 ChatGPT같은 사이트를 생성하려면 추가적인 사용자 인터페이스나 도구들이 필요하게 됩니다. 이번 글에서는 다루지 않지만 활용할 수 있는 다양한 도구들이 있다는 것 정도만 언급하고 지나가도록 하겠습니다.

 

 

1. Ollama 란?

Ollama는 개인용 컴퓨터에서 대규모 언어 모델(LLM)을 쉽게 실행할 수 있게 해주는 오픈소스 프로젝트입니다. 이 도구는 복잡한 AI 모델을 로컬 환경에서 간단하게 설치하고 사용할 수 있도록 설계되었습니다. Ollama를 사용하면, 클라우드 서비스에 의존하지 않고도 강력한 AI 기능을 개인의 컴퓨터에서 직접 활용할 수 있습니다.

Ollama의 주요 목표는 AI 모델의 접근성을 높이는 것입니다. 개발자뿐만 아니라 AI에 관심 있는 모든 사용자들이 쉽게 AI 모델을 실험하고 활용할 수 있도록 돕습니다.

Ollama의 주요 기능

  1. 간편한 모델 관리: Ollama는 다양한 AI 모델을 쉽게 다운로드하고 관리할 수 있는 기능을 제공합니다. 사용자는 간단한 명령어를 통해 원하는 모델을 설치하고 실행할 수 있습니다.
  2. 로컬 실행: 모든 처리가 사용자의 로컬 머신에서 이루어지므로, 데이터 프라이버시와 보안이 보장됩니다. 인터넷 연결 없이도 모델을 사용할 수 있어 편리합니다.
  3. 다양한 모델 지원: Llama, CodeLlama, Mistral 등 다양한 오픈소스 AI 모델을 지원합니다. 사용자는 필요에 따라 적합한 모델을 선택하여 사용할 수 있습니다.
  4. 커스터마이징 기능: 사용자는 기존 모델을 fine-tuning 하거나 자신만의 모델을 만들어 사용할 수 있습니다. 이를 통해 특정 용도에 최적화된 AI 모델을 개발할 수 있습니다.
  5. API 지원: Ollama는 RESTful API를 제공하여 다양한 애플리케이션과 쉽게 통합할 수 있습니다. 이를 통해 개발자들은 자신의 프로젝트에 AI 기능을 손쉽게 추가할 수 있습니다.
  6. 경량화된 실행: Ollama는 최적화된 실행 환경을 제공하여, 비교적 적은 컴퓨팅 리소스로도 고성능 AI 모델을 실행할 수 있게 합니다.

2. Ollama 설치

지원되는 운영체제는

  • macOS (Apple Silicon 및 Intel)
  • Windows 11 이상 (WSL2 통해 실행)
  • Linux (대부분의 배포판)

GPU 지원

  • NVIDIA GPU: CUDA 11.7 이상
  • Apple Silicon: Metal API 지원
  • 공식 사이트

https://www.ollama.com/

 

Ollama

Get up and running with large language models.

ollama.com

 

  • OS 별 설치 방법

 

https://github.com/ollama/ollama?tab=readme-ov-file#ollama

 

GitHub - ollama/ollama: Get up and running with Llama 3.1, Mistral, Gemma 2, and other large language models.

Get up and running with Llama 3.1, Mistral, Gemma 2, and other large language models. - ollama/ollama

github.com

 

mac, windows의 경우 클릭 몇 번이면 설치가 가능하고, 리눅스의 경우도 명령어 한 줄이면 설치가 가능합니다.

예) 우분투 설치 시

# 온라인 설치, 업데이트 동일
curl -fsSL https://ollama.com/install.sh | sh

 

 

ollama 사용자가 생성되고 /usr/local/bin 에 설치됩니다.

처음 설치할 때는 서비스 등록이 자동으로 안되고 수작업으로 했던 것 같은데.. 기억이 가물하네요.

서비스로 등록이 안 되는 경우는 아래 내용 참고하여 서비스로 등록할 수 있습니다.

  • 리눅스 설치 시 서비스로 등록

https://github.com/ollama/ollama/blob/main/docs/linux.md

 

ollama/docs/linux.md at main · ollama/ollama

Get up and running with Llama 3.1, Mistral, Gemma 2, and other large language models. - ollama/ollama

github.com

 

# 서비스 관련 파일 생성
nano /etc/systemd/system/ollama.service
# 아래 내용으로 작성
[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/usr/local/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3

# 외부 연결 가능하도록 설정
Environment="OLLAMA_HOST=0.0.0.0"
# 모델 파일 경로
Environment="OLLAMA_MODELS=/data/ollama/models"

[Install]
WantedBy=default.target
# 서비스 활성화
sudo systemctl daemon-reload
sudo systemctl enable ollama

# 서비스 구동
sudo systemctl start ollama

업데이트 시 서비스 파일이 초기화되는 현상 발생하는데, 업데이트 스크립트 실행하여 서비스 파일이 변경될 때 오버라이드 되도록 값 추가

# 디렉토리 생성 (없는 경우)
mkdir -p /etc/systemd/system/ollama.service.d/

# 파일 생성
nano /etc/systemd/system/ollama.service.d/override.conf

# 추가 설정내용 작성
[Service]
Environment="OLLAMA_HOST=0.0.0.0"
Environment="OLLAMA_MODELS=/data/ollama/models"

# 변경사항 적용
systemctl daemon-reload
systemctl restart ollama

설치가 정상적으로 되었다면 ollama 명령어를 실행할 수 있게 됩니다.

 

 

브라우저로 접속 시

 

 

NVIDIA GPU 사용 시 GPU 드라이버(필수), CUDA 툴킷(필수), cuDNN(매우권장)을 설치해야 합니다.

3. Ollama를 이용한 모델 관리

지원하는 모델 검색

https://ollama.com/library

 

library

Get up and running with large language models.

ollama.com

 

 

3.1 생성된 모델 목록 확인

ollama list

3.2 모델 다운로드 및 업데이트

# 모델 다운로드
ollama pull [모델명]
# 예) ollama pull llama3.1

# 특정 대그의 모델 다운로드
ollama pull [모델명]:[태그]
# 예) ollama pull llama3.1:8b-instruct-fp16

태그를 따로 지정하지 않으면 latest 기본 설정값으로 모델이 생성됩니다.

 

 

폐쇄망 환경을 위한 모델 다운로드

망분리가 되어있어 인터넷 연결이 안 되는 환경으로 모델을 반입하는 가장 간단한 방법은 인터넷이 되는 환경에서 다운로드 받아서 압축해서 넘기는 거였어요.
(OLLAMA_MODELS 환경변수로 설정하거나 기본값 경로를 압축해서 반입)

그다음으로 불편하지만 가능한 것은 허깅페이스에서 GGUF를 반입하는 방법. 모델 별 modelfile을 생성하는 것도 일이었음..

3.3 커스텀 모델 생성

모델 파일은 각 모델별 공식 문서를 확인해서 작성합니다.

ollama create mymodel -f Modelfile

3.4 모델 실행

다운로드하거나 커스텀으로 생성한 모델을 실행.

# 대화모드
ollama run [모델명]

# 단일 프롬프트
ollama run [모델명] "프롬프트"

# 파라미터 조정
ollama run [모델명] --temperature 0.7 --top_p 0.9

3.5 모델 삭제 및 정보확인

# 모델 삭제
ollama rm [모델명]

# 모델 정보 확인
ollama show [모델명]

4. Ollama 운영

4.1 환경변수 관련 변경

환경변수 설정을 모아둔 공식 문서가 없는 것 같습니다.

https://github.com/ollama/ollama/issues/2941#issuecomment-2322778733

 

Global Configuration Variables for Ollama · Issue #2941 · ollama/ollama

I am currently using Ollama for running LLMs locally and am greatly appreciative of the functionality it offers. However, I've come across a point of confusion regarding the global configuration of...

github.com

 

 

아래 소스에서 설정되는 변수 이름을 참고할 수도 있습니다.

https://github.com/ollama/ollama/blob/main/envconfig/config.go

 

ollama/envconfig/config.go at main · ollama/ollama

Get up and running with Llama 3.1, Mistral, Gemma 2, and other large language models. - ollama/ollama

github.com

 

 

Variable Default Value Description + Effect + Scenario
OLLAMA_HOST "http://127.0.0.1:11434" Ollama 서버의 호스트 및 스킴을 설정합니다. 효과: Ollama 서버에 연결하는 URL을 결정합니다. 시나리오: 분산 환경에서 Ollama를 배포하거나 특정 네트워크 인터페이스에 서비스를 노출할 때 유용합니다.
OLLAMA_ORIGINS [localhost, 127.0.0.1, 0.0.0.0] + app://, file://, tauri:// CORS를 위한 허용된 출처를 설정합니다. 효과: Ollama 서버에 요청을 보낼 수 있는 출처를 제어합니다. 시나리오: 웹 애플리케이션과 Ollama를 통합할 때, 다른 도메인에서의 무단 접근을 방지하는 것이 중요합니다.
OLLAMA_MODELS $HOME/.ollama/models 모델 디렉토리의 경로를 설정합니다. 효과: 모델 파일이 저장되고 로드되는 위치를 결정합니다. 시나리오: 여러 사용자가 있는 환경에서 디스크 공간을 관리하거나 공유 모델 저장소를 설정할 때 유용합니다.
OLLAMA_KEEP_ALIVE 5 minutes 모델이 메모리에 유지되는 시간을 설정합니다. 효과: 모델이 사용된 후 메모리에 남아 있는 시간을 제어합니다. 시나리오: 자주 사용하는 쿼리의 응답 시간을 개선하지만 메모리 사용량이 증가할 수 있습니다.
OLLAMA_DEBUG false 추가 디버그 정보를 활성화합니다. 효과: 로깅과 디버깅 출력의 상세 정보가 증가합니다. 시나리오: 개발 또는 배포 중에 문제를 해결하거나 시스템 동작을 이해할 때 유용합니다.
OLLAMA_FLASH_ATTENTION false 실험적인 플래시 어텐션 기능을 활성화합니다. 효과: 어텐션 메커니즘에 대한 실험적 최적화를 활성화합니다. 시나리오: 호환 가능한 하드웨어에서 성능을 향상시킬 수 있지만 불안정성을 초래할 수 있습니다.
OLLAMA_NOHISTORY false Readline 히스토리를 비활성화합니다. 효과: 명령 기록이 저장되지 않도록 합니다. 시나리오: 명령 기록이 저장되지 않아야 하는 보안 민감 환경에서 유용합니다.
OLLAMA_NOPRUNE false 시작 시 모델 블롭의 가지치기를 비활성화합니다. 효과: 모든 모델 블롭을 유지하며, 디스크 사용량이 증가할 수 있습니다. 시나리오: 호환성 또는 롤백을 위해 모든 모델 버전을 유지해야 할 때 유용합니다.
OLLAMA_SCHED_SPREAD false 모델을 모든 GPU에 걸쳐 스케줄링할 수 있게 합니다. 효과: 모델 추론에 다중 GPU 사용을 활성화합니다. 시나리오: 여러 GPU를 보유한 고성능 컴퓨팅 환경에서 하드웨어 활용을 극대화할 때 유용합니다.
OLLAMA_INTEL_GPU false 실험적인 Intel GPU 감지를 활성화합니다. 효과: 모델 추론에 Intel GPU를 사용할 수 있게 합니다. 시나리오: Intel GPU 하드웨어를 사용하는 조직에서 AI 워크로드를 처리할 때 유용합니다.
OLLAMA_LLM_LIBRARY "" (auto-detect) 사용할 LLM 라이브러리를 설정합니다. 효과: LLM 라이브러리 자동 감지를 무시하고 설정된 라이브러리를 사용합니다. 시나리오: 호환성 또는 성능 문제로 인해 특정 라이브러리 버전 또는 구현을 강제로 사용할 때 유용합니다.
OLLAMA_TMPDIR System default temp directory 임시 파일을 저장할 위치를 설정합니다. 효과: 임시 파일이 저장되는 위치를 결정합니다. 시나리오: I/O 성능을 관리하거나 시스템 임시 디렉토리에 공간이 부족할 때 중요합니다.
CUDA_VISIBLE_DEVICES All available 사용 가능한 모든 NVIDIA 장치를 설정합니다. 효과: 사용 가능한 NVIDIA GPU를 제어합니다. 시나리오: 다중 사용자 또는 다중 프로세스 환경에서 GPU 할당을 관리할 때 중요합니다.
HIP_VISIBLE_DEVICES All available 사용 가능한 모든 AMD 장치를 설정합니다. 효과: 사용 가능한 AMD GPU를 제어합니다. 시나리오: AMD 하드웨어를 위한 CUDA_VISIBLE_DEVICES와 유사합니다.
OLLAMA_RUNNERS_DIR System-dependent 러너의 위치를 설정합니다. 효과: 러너 실행 파일이 위치하는 곳을 결정합니다. 시나리오: 커스텀 배포 또는 러너를 메인 애플리케이션과 격리해야 할 때 중요합니다.
OLLAMA_NUM_PARALLEL 0 (unlimited) 병렬 모델 요청의 수를 설정합니다. 효과: 모델 추론의 동시성을 제어합니다. 시나리오: 시스템 부하를 관리하고 트래픽이 많은 환경에서 응답성을 보장할 때 중요합니다.
OLLAMA_MAX_LOADED_MODELS 0 (unlimited) 로드된 모델의 최대 수를 설정합니다. 효과: 동시에 로드될 수 있는 모델의 수를 제한합니다. 시나리오: 제한된 자원이 있는 환경에서 메모리 사용량을 관리하거나 다양한 모델을 사용할 때 유용합니다.
OLLAMA_MAX_QUEUE 512 대기 중인 요청의 최대 수를 설정합니다. 효과: 요청 큐의 크기를 제한합니다. 시나리오: 트래픽 급증 중 시스템 과부하를 방지하고 요청 처리가 적시에 이루어지도록 합니다.
OLLAMA_MAX_VRAM 0 (unlimited) VRAM 사용량을 바이트 단위로 최대치로 설정합니다. 효과: 사용 가능한 VRAM을 제한합니다. 시나리오: 공유 GPU 환경에서 단일 프로세스가 GPU 메모리를 독점하지 않도록 방지하는 데 유용합니다.

 

설정할만한 환경변수는

  • 모델 메모리 사용 유지시간 변경
    • OLLAMA_KEEP_ALIVE
  • CORS 설정
    • OLLAMA_ORIGINS
  • 디버깅 모드
    • OLLAMA_DEBUG
# 추가 설정 서비스 내용에 작성하기
sudo nano /etc/systemd/system/ollama.service.d/override.conf

# 추가 설정내용 작성
[Service]
Environment="OLLAMA_KEEP_ALIVE=30m"
Environment="OLLAMA_ORIGINS=https://*.site.com"
Environment="OLLAMA_DEBUG=1"

# 변경사항 적용
sudo systemctl daemon-reload
sudo systemctl restart ollama
sudo systemctl status ollama

4.2 로그 확인

sudo journalctl -e -u ollama

기타. Ollama 대안

Ollama 외에도 여러 도구가 있는데, openai api를 지원하는 도구를 살펴보면

  • 발전 속도:
    • ollama: 빠른 발전 속도를 보이고 있으며, 활발한 커뮤니티 지원을 받고 있습니다.
    • vLLM: 학술적 배경을 바탕으로 빠르게 발전 중이며, 성능 최적화에 중점을 두고 있습니다.
    • LocalAI: 꾸준히 발전하고 있으며, 다양한 모델 지원에 초점을 맞추고 있습니다.
    • FastChat: 활발한 발전을 보이고 있으며, 다양한 오픈소스 모델 지원에 주력하고 있습니다.
  • 기능 제공 수준:
    • ollama:
      • 강점: 사용 편의성, 다양한 모델 지원, 효율적인 리소스 관리
      • 약점: 일부 고급 최적화 기능에서는 vLLM에 비해 제한적일 수 있음
    • vLLM:
      • 강점: 고성능 추론, 메모리 효율성, 대규모 배치 처리
      • 약점: 설정의 복잡성, ollama에 비해 사용자 친화적이지 않을 수 있음
    • LocalAI:
      • 강점: 다양한 모델 유형 지원 (텍스트, 음성, 이미지), Docker 기반 쉬운 배포
      • 약점: 일부 최신 최적화 기술에서 vLLM이나 ollama에 뒤질 수 있음
    • FastChat:
      • 강점: 다양한 오픈소스 모델 지원, 웹 UI 제공
      • 약점: ollama에 비해 리소스 관리 측면에서 덜 최적화될 수 있음
  • ollama의 특징적 장점:
    • 사용자 친화적인 인터페이스
    • 효율적인 모델 관리 및 버전 제어
    • 다양한 양자화 옵션 제공
    • 빠른 시작과 쉬운 설정
  • 개선이 필요한 영역:
    • 고급 성능 최적화 기능 (vLLM 수준)
    • 더 넓은 범위의 모델 유형 지원 (LocalAI 수준)

vLLM이 빠르다고 하는데 한번 사용해보고 싶네요.

이상으로 Ollama 설치와 운영에 대한 내용이었습니다.

반응형