Skip to main content

Ollama로 M1 Mac에서 Mistral-7B 실행하는 방법

MacBook에서 Mistral 7B를 실행해 보고 싶으셨나요? 이 튜토리얼에서 방법을 자세히 보여드립니다. 이 글은 AI 번역본입니다. 오역이 있을 수 있으니 댓글로 알려주세요.
Created on September 12|Last edited on September 12
더 작은 LLM이 빠르게 고도화되면서, 엣지 디바이스에서 이를 실행하는 활용 사례도 급격히 늘고 있습니다. 이 튜토리얼에서는 Mistral 7B 모델 배포 Mac 기기에서, M 시리즈 프로세서를 탑재한 Mac까지 로컬로 실행합니다! 또한 커스텀 Mistral 7B 어댑터를 로컬에서 사용하는 방법도 보여드리겠습니다! 이를 쉽고 효율적으로 진행하기 위해 Ollama와 llama.cpp 저장소를 활용하겠습니다!


이 튜토리얼에서 다룰 내용



Ollama

Ollama는 손쉽고 유연한 플랫폼으로, 설정하고 실행할 수 있게 해줍니다 대규모 언어 모델 로컬에서 쉽게 사용할 수 있습니다. macOS, Windows, Linux를 포함한 다양한 운영 체제를 지원하며, Docker 환경에서도 사용할 수 있습니다.
Ollama는 Neural Chat, Starling, Mistral, 그리고 다양한 버전의 Llama처럼 미리 빌드된 오픈 소스 모델을 폭넓게 제공하며, 각기 다른 파라미터와 크기를 갖춰 다양한 요구와 시스템 성능에 맞게 선택할 수 있습니다.
Ollama는 모델 생성, 가져오기, 삭제, 복사, 실행을 위한 간단한 커맨드라인 인터페이스도 제공합니다. 여러 줄 입력을 지원하며, 프롬프트를 인자로 전달할 수도 있습니다. 프로그래밍 방식이 편한 사용자라면 REST API를 통해 다양한 애플리케이션과 서비스에 통합할 수 있습니다. 이러한 점 덕분에 로컬에서 대규모 언어 모델을 실험하고 배포하려는 개발자와 취미 사용자에게 이상적인 도구입니다.
이 튜토리얼에서는 Mistral 7B를 사용할 것입니다. 이 모델은 거의 모든 M1 Mac에서 동작합니다. 다만 메모리가 8GB인 경우 속도가 다소 느릴 수 있지만, 좋은 소식은 문제없이 실행된다는 점입니다.

1단계: Mac 설치

macOS 시스템에 Ollama를 설치하는 과정은 간단합니다. 먼저 Ollama 웹사이트에 접속해 시작하세요. 웹사이트 그리고 다운로드 섹션으로 이동하세요. 여기에서 macOS용 Ollama 전용 링크를 찾을 수 있습니다. ‘Download’ 버튼을 클릭하면 설치 패키지가 사용자의 시스템으로 다운로드됩니다.
다운로드가 완료되면 다운로드한 파일을 열고 화면에 표시되는 안내에 따라 설치를 완료하세요. 일반적으로 Ollama 앱을 응용 프로그램 폴더로 드래그하는 단계가 포함됩니다. 설치가 끝나면 응용 프로그램 폴더에서 Ollama를 실행하거나 Spotlight 검색을 통해 실행할 수 있습니다.

기본 Mistral 모델 실행

Ollama로 기본 Mistral 모델을 실행하려면 먼저 컴퓨터에서 Ollama 앱을 열고, 터미널을 실행하세요. 그런 다음 다음 명령을 입력합니다. ollama run mistral 그리고 Enter 키를 누르세요. 이 명령은 Mistral 모델을 가져와 실행을 시작하며, 설정과 실행 과정은 Ollama가 알아서 처리합니다.
모델이 실행되면 터미널에서 바로 상호작용하며 기능을 실험하거나, 필요에 따라 특정 질의와 입력을 테스트할 수 있습니다.

대화를 종료하려면 /bye 명령

맞춤형 Mistral 모델 만들기

이 튜토리얼은 이미 LoRA 또는 QLoRA로 Mistral 모델을 파인 튜닝했다고 가정합니다. QLoRA, 어댑터의 가중치를 얻을 수 있습니다. 제 다른 작품도 자유롭게 확인해 보세요 튜토리얼 아직이라면 이에 대한 자세한 내용을 확인해 보세요!
이 어댑터를 Ollama에서 사용하려면, 어댑터를 다음으로 변환하세요 GGML 형식t. 튜토리얼 저장소에 포함된 llama.cpp 디렉터리로 이동하세요. 이 디렉터리에서 어댑터를 GGML 형식으로 변환하는 스크립트를 실행합니다. 다음 명령을 사용하세요 python convert-lora-to-ggml.py /path/to/your/lora/adapter 경로는 보통 다음처럼 이름 붙는 LoRA 어댑터가 들어 있는 디렉터리를 가리킵니다 adapter.bin 그리고 config.bin 파일.
python convert-lora-to-ggml.py /path_to_your_adapter

모델 파일 만들기

다음으로 Ollama 모델 파일을 만듭니다(LLM용 Dockerfile과 유사한 파일). 먼저 `FROM` 키워드를 사용해 기본 모델을 지정합니다. 예를 들어 `FROM mistral:latest`처럼 작성하면 최신 Mistral 모델을 사용하겠다는 의미입니다. 그다음 `ADAPTER` 키워드로 어댑터를 지정하고, GGML 어댑터 모델 바이너리 파일의 경로를 제공하세요. 아래는 제 Modelfile 예시입니다:
FROM mistral:latest
ADAPTER /Users/brettyoung/Desktop/IMPORTANT/mistral-7b-alpacapython10kCheckpoints/checkpoint-150/ggml-adapter-model.bin

모델 생성

Modelfile 설정을 마친 뒤, `ollama create` 명령에 원하는 모델 이름과 Modelfile 경로를 이어서 입력해 커스텀 모델을 만드세요. 예: `ollama create custom_mistral -f ./Modelfile`
ollama create custom_mistral -f ./Modelfile
마지막으로 `ollama run custom_mistral`을 실행해 커스텀 모델을 구동하세요. 이제 설정이 완료되어, 맞춤형 Mistral 모델과 상호 작용할 수 있습니다.
ollama run custom_mistral

Python에서 Mistral 모델 사용하기

Python에서 Ollama를 사용하려면, 애플리케이션을 시스템에서 실행할 때 자동으로 구동되는 Ollama 로컬 API를 호출하는 간단한 함수를 만들면 됩니다. 일반적으로 이 API는 curl로 호출하지만, 여기서는 Python에서 프로그래밍 방식으로 호출하는 커스텀 함수를 작성하겠습니다. 아래는 스크립트입니다:
import subprocess
import json

def generate_response(prompt):
curl_command = f"""curl -s http://localhost:11434/api/generate -d '{{"model": "custom_mistral", "prompt":"{prompt}"}}'"""
process = subprocess.Popen(curl_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
full_response = ""

while True:
output_line = process.stdout.readline()
if not output_line and process.poll() is not None:
break
if output_line:
try:
response_data = json.loads(output_line.strip())
full_response += response_data.get("response", "")
except json.JSONDecodeError:
return "Invalid response format", 500

return full_response

def get_user_input_and_generate():
prompt = input("Enter a prompt: ")
response = generate_response(prompt)
print("Response:", response)

if __name__ == '__main__':
get_user_input_and_generate()
이 스크립트는 Python의 subprocess 모듈의 Popen을 사용해 curl 명령을 실행합니다. 이 방식은 curl 명령을 별도 프로세스에서 실행하고 그 출력을 캡처할 수 있게 해줍니다. 스크립트는 출력 내용을 한 줄씩 읽어 JSON으로 파싱한 뒤, 응답을 이어 붙입니다.
Ollama 로컬 API가 하나의 응답을 한 번에 반환하지 않고 여러 청크로 스트리밍하기 때문에, generate 함수가 다소 복잡하다는 점에 유의하세요. 아래는 Python 스크립트가 실행하는 명령으로, 사용할 모델과 프롬프트 입력을 함께 지정합니다!
curl_command = f"""curl -s http://localhost:11434/api/generate -d '{{"model": "custom_mistral", "prompt":"{prompt}"}}'"""
while 루프는 프로세스가 더 이상 데이터를 출력하지 않을 때까지(즉, 프로세스가 완료될 때까지) 표준 출력을 계속 읽습니다. JSON 디코딩에 실패하면(예상치 못한 응답 형식임을 의미) 함수는 오류 메시지를 반환합니다.
이 스크립트를 사용하면 커스텀 Mistral 모델에 프롬프트를 보내고 생성된 응답을 받을 수 있습니다. 원하는 프롬프트로 generate_response를 호출하기만 하면 됩니다. 스크립트의 메인 블록(if __name__ == '__main__': 아래)은 이 기능을 테스트하도록 구성되어 있습니다. 사용자에게 프롬프트 입력을 요청하고, 해당 프롬프트로 generate_response 함수를 호출한 뒤, 모델의 응답을 출력합니다. 아래는 위 스크립트의 예시입니다!


결론

이 튜토리얼이 데스크톱에서도 손쉽게 활용할 수 있는 AI의 세계로 들어가는 관문이 되기를 바랍니다. 최첨단 AI 기능을 애플리케이션에 접목하려는 개발자이든, 언어 모델의 최전선을 탐구하고 싶은 취미가 사람이든, 로컬 LLM에는 무궁무진한 활용처가 있습니다!
언제든지 궁금한 점이 있으면 댓글로 남겨 주세요. 또한 GitHub 레포지토리도 확인해 보세요. 여기.

이 글은 AI로 번역되었습니다. 오역이 의심되는 부분이 있으면 댓글로 알려 주세요. 원문 보고서는 아래 링크에서 확인할 수 있습니다: 원문 보고서 보기