최근 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 지원
- 공식 사이트
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를 이용한 모델 관리
지원하는 모델 검색
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:
- ollama의 특징적 장점:
- 사용자 친화적인 인터페이스
- 효율적인 모델 관리 및 버전 제어
- 다양한 양자화 옵션 제공
- 빠른 시작과 쉬운 설정
- 개선이 필요한 영역:
- 고급 성능 최적화 기능 (vLLM 수준)
- 더 넓은 범위의 모델 유형 지원 (LocalAI 수준)
vLLM이 빠르다고 하는데 한번 사용해보고 싶네요.
이상으로 Ollama 설치와 운영에 대한 내용이었습니다.