최근 LLM 서비스들이 점점 더 널리 사용되고 있지만, 개인정보 보호와 비용 문제로 인해 고민하는 사용자들이 많습니다. 특히 폐쇄망 환경에서 오픈소스 기반 모델을 로컬 환경에서 실행할 수 있다면 이러한 고민들이 해소가 되겠죠.
Ollama는 클라우드에 의존하지 않고, 개인 컴퓨터에서 대형 언어 모델을 직접 실행할 수 있는 솔루션으로, 인터넷 연결이 불필요한 폐쇄망에서도 동작할 수 있어 괜찮은 대안이 될 수 있습니다.
지금부터 공개된 LLM 모델들을 로컬에서 직접 실행하고 관리할 수 있도록 해주는 Ollama에 대해 알아보겠습니다.
ollama 만을 활용해 llama 3.1 모델로 추론할 경우 아래와 같이 활용될 수 있습니다.
그런데 우리가 AI를 활용하여 서비스를 만들거나 ChatGPT같은 사이트를 생성하려면 추가적인 사용자 인터페이스나 도구들이 필요하게 됩니다. 이번 글에서는 다루지 않지만 활용할 수 있는 다양한 도구들이 있다는 것 정도만 언급하고 지나가도록 하겠습니다.
1. Ollama 란?
Ollama는 개인용 컴퓨터에서 대규모 언어 모델(LLM)을 쉽게 실행할 수 있게 해주는 오픈소스 프로젝트입니다. 이 도구는 복잡한 AI 모델을 로컬 환경에서 간단하게 설치하고 사용할 수 있도록 설계되었습니다. Ollama를 사용하면, 클라우드 서비스에 의존하지 않고도 강력한 AI 기능을 개인의 컴퓨터에서 직접 활용할 수 있습니다.
Ollama의 주요 목표는 AI 모델의 접근성을 높이는 것입니다. 개발자뿐만 아니라 AI에 관심 있는 모든 사용자들이 쉽게 AI 모델을 실험하고 활용할 수 있도록 돕습니다.
Ollama의 주요 기능
- 간편한 모델 관리: Ollama는 다양한 AI 모델을 쉽게 다운로드하고 관리할 수 있는 기능을 제공합니다. 사용자는 간단한 명령어를 통해 원하는 모델을 설치하고 실행할 수 있습니다.
- 로컬 실행: 모든 처리가 사용자의 로컬 머신에서 이루어지므로, 데이터 프라이버시와 보안이 보장됩니다. 인터넷 연결 없이도 모델을 사용할 수 있어 편리합니다.
- 다양한 모델 지원: Llama, CodeLlama, Mistral 등 다양한 오픈소스 AI 모델을 지원합니다. 사용자는 필요에 따라 적합한 모델을 선택하여 사용할 수 있습니다.
- 커스터마이징 기능: 사용자는 기존 모델을 fine-tuning 하거나 자신만의 모델을 만들어 사용할 수 있습니다. 이를 통해 특정 용도에 최적화된 AI 모델을 개발할 수 있습니다.
- API 지원: Ollama는 RESTful API를 제공하여 다양한 애플리케이션과 쉽게 통합할 수 있습니다. 이를 통해 개발자들은 자신의 프로젝트에 AI 기능을 손쉽게 추가할 수 있습니다.
- 경량화된 실행: Ollama는 최적화된 실행 환경을 제공하여, 비교적 적은 컴퓨팅 리소스로도 고성능 AI 모델을 실행할 수 있게 합니다.
2. Ollama 설치
지원되는 운영체제는
- macOS (Apple Silicon 및 Intel)
- Windows 11 이상 (WSL2 통해 실행)
- Linux (대부분의 배포판)
GPU 지원
- NVIDIA GPU: CUDA 11.7 이상
- Apple Silicon: Metal API 지원
- 공식 사이트
- OS 별 설치 방법
https://github.com/ollama/ollama?tab=readme-ov-file#ollama
mac, windows의 경우 클릭 몇 번이면 설치가 가능하고, 리눅스의 경우도 명령어 한 줄이면 설치가 가능합니다.
예) 우분투 설치 시
# 온라인 설치, 업데이트 동일
curl -fsSL https://ollama.com/install.sh | sh
ollama 사용자가 생성되고 /usr/local/bin 에 설치됩니다.
처음 설치할 때는 서비스 등록이 자동으로 안되고 수작업으로 했던 것 같은데.. 기억이 가물하네요.
서비스로 등록이 안 되는 경우는 아래 내용 참고하여 서비스로 등록할 수 있습니다.
- 리눅스 설치 시 서비스로 등록
https://github.com/ollama/ollama/blob/main/docs/linux.md
# 서비스 관련 파일 생성
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를 이용한 모델 관리
지원하는 모델 검색
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
아래 소스에서 설정되는 변수 이름을 참고할 수도 있습니다.
https://github.com/ollama/ollama/blob/main/envconfig/config.go
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:
- ollama의 특징적 장점:
- 사용자 친화적인 인터페이스
- 효율적인 모델 관리 및 버전 제어
- 다양한 양자화 옵션 제공
- 빠른 시작과 쉬운 설정
- 개선이 필요한 영역:
- 고급 성능 최적화 기능 (vLLM 수준)
- 더 넓은 범위의 모델 유형 지원 (LocalAI 수준)
vLLM이 빠르다고 하는데 한번 사용해보고 싶네요.
이상으로 Ollama 설치와 운영에 대한 내용이었습니다.