0xFF

젯슨 나노에서 Ollama 서버 구동 본문

LINUX

젯슨 나노에서 Ollama 서버 구동

캡스락 2026. 4. 28. 22:36
curl -fsSL <https://ollama.com/install.sh> | sh

위와 같이 Ollama 설치 이후

ollama run ed-neo4j/t2c-gemma3-4b-it-q8_0-35k --verbose

위와 같이 t2c-gemma3-4b-it-q8_0-35k 모델을 설치한다.

오피셜 gemma3:4b를 사용하지 않은 이유는 위 모델이 Q8_0 양자화 적용으로 오피셜 4b 모델의 Q4_K_M 양자화 대비 약간 더 성능이 높을 것이라 판단했기 때문이다.

개발 완료 후 성능보다 속도가 더 중요하다고 판단되면 더 가벼운 모델로도 바꿔봐야겠다.

[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/usr/local/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_KEEP_ALIVE=-1"
Environment="OLLAMA_NUM_PARALLEL=2"

[Install]
WantedBy=default.target

외부 호스트 접속이 가능하도록 하기 위해 /etc/systemd/system/ollama.service 파일을 열고 환경 변수를 추가한다.
Environment="OLLAMA_HOST=0.0.0.0:11434"

또한 모델 로드 후 자동으로 언로드되지 않고 유지되도록 아래와 같은 변수도 추가한다.
Environment="OLLAMA_KEEP_ALIVE=-1"

모델별 병렬 추론 스레드 수의 기본값은 1이므로 아래와 같이 설정하여 2로 늘린다.
Environment="OLLAMA_NUM_PARALLEL=2"

[Unit]
Description=Load default model Ollama
After=ollama.service
Requires=ollama.service

[Service]
Type=oneshot
ExecStartPre=/bin/bash -c 'until curl -s <http://localhost:11434> > /dev/null; do echo "Waiting.."; sleep 2; done'
ExecStart=/usr/bin/curl <http://localhost:11434/api/generate> -d '{"model": "ed-neo4j/t2c-gemma3-4b-it-q8_0-35k:latest", "prompt": "hi?", "stream": false}'
TimeoutStartSec=300
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Ollama는 최초 HTTP 요청시 지정한 모델을 메모리에 올리기 위해 시간이 다소 필요하다.

젯슨 오린 나노에서 약 5GB 모델 기준으로 약 1분 정도가 소요되는 것을 확인할 수 있었는데,

이러한 지연을 최소화하기 위해 부팅 직후 사용할 모델이 캐싱되어 있도록 위와 같이 별도의 서비스를 만들어 구성하였다.

서비스의 내용은 Ollama 서버가 실행될때까지 2초 간격으로 폴링을 실행하며 대기하다가 실행이 완료되면 ‘hi?’ 라는 간단한 프롬프트에 대한 completion을 요청하여 모델이 메모리에 상주되도록 하는 것이다.

돌아가는 방법이긴 하지만 직접적으로 특정 모델을 메모리에 상주시키는 방법을 찾지 못하여 이렇게 조치하였다.