mlx-lm에 관하여 (250717)

WonTerry·2025년 7월 17일

LLM

목록 보기
11/38

mlx-lm은 Apple의 MLX(Apple Silicon에서 최적화된 기계 학습 프레임워크)를 기반으로 한 경량화된 언어 모델 실행 도구입니다. mlx-lm을 사용하면 macOS(특히 M1, M2, M3 등 Apple Silicon) 환경에서 LLM을 효율적으로 로컬 실행할 수 있습니다.


✅ 1. mlx-lm 이란?

  • 목적: Apple Silicon(M1/M2/M3 칩셋)의 ML 가속기를 최대한 활용하여 LLM을 빠르고 저전력으로 실행.

  • 장점:

    • Metal 및 MLX 기반으로 Apple 칩셋에 최적화됨
    • Hugging Face Hub 모델을 손쉽게 다운로드 및 실행
    • GPU(VRAM)가 부족해도 4bit/8bit 압축 모델 지원
  • 지원 형식: GGUF, MLX 포맷, 양자화 (4bit, 8bit) 모델 지원

  • 명령어 기반 사용 / Python API 사용 가능


✅ 2. 설치 방법

pip install mlx-lm

또는 최신 버전 설치:

pip install git+https://github.com/ml-explore/mlx-lm.git

✅ 3. 모델 로딩 및 대화 예시 코드

💡 예시: mlx-community/Llama-3.2-3B-Instruct-4bit 모델 사용

from mlx_lm import load, chat

# 모델 로드
model, tokenizer = load("mlx-community/Llama-3.2-3B-Instruct-4bit")

# 단일 프롬프트에 대한 응답 생성
response = chat(model, tokenizer, prompt="Explain quantum computing like I'm five.", verbose=True)

print(response)

🔧 설명:

코드설명
load(...)모델과 토크나이저를 Hugging Face에서 다운로드하여 MLX 포맷으로 불러옵니다. 캐시됨.
chat(...)간단한 프롬프트 기반 대화를 수행합니다.
verbose=True토큰 생성 과정을 보여줍니다 (진행 상황 확인용).

✅ 4. CLI 명령어로 실행하기

터미널에서 직접 실행할 수도 있습니다:

mlx-lm chat mlx-community/Llama-3.2-3B-Instruct-4bit

이후 프롬프트가 뜨고, 채팅형 인터페이스로 사용할 수 있습니다.


✅ 5. 모델 저장 경로

기본적으로 Hugging Face 모델은 다음 위치에 저장됩니다:

~/.cache/mlx/models/

mlx-community/Llama-3.2-3B-Instruct-4bit 모델도 여기에 저장됩니다.


✅ 6. 주의사항

  • 인터넷 연결 필요: 처음 로드할 때 Hugging Face에서 모델 다운로드
  • 지원되지 않는 모델 타입 오류: gguf, pytorch_model.bin 형태의 일부 모델은 지원되지 않음 → 반드시 mlx 포맷 모델 혹은 공식 제공 모델 사용
  • 지원 모델 확인: mlx-lm 모델 허브 목록 참고

✅ 7. 예제

# run_llama_mlx.py
# 실행 : python3 run_llama_m.py          

from mlx_lm import load
from mlx_lm.generate import generate


def main():
    print("🔄 모델을 로딩 중입니다...")

    model_id = "mlx-community/Llama-3.2-3B-Instruct-4bit"
    model, tokenizer = load(model_id)

    print("✅ 모델 로딩 완료!")
    print("💬 프롬프트를 입력하세요. 종료하려면 'exit' 또는 'quit'을 입력하세요.\n")

    while True:
        prompt = input("🙋 사용자: ")
        if prompt.strip().lower() in ["exit", "quit"]:
            print("👋 종료합니다.")
            break

        # LLM 응답 생성
        response = generate(
            model=model,
            tokenizer=tokenizer,
            prompt=prompt,
            max_tokens=512,
            #temperature=0.7, # 오류 발생, 주석 처리 (250718)
            #top_p=0.9,       # 오류 발생, 주석 처리 (250718)
            verbose=False
        )

        print(f"🤖 LLM: {response}\n")


if __name__ == "__main__":
    main()
profile
Hello, I'm Terry! 👋 Enjoy every moment of your life! 🌱 My current interests are Signal processing, Machine learning, Python, Database, LLM & RAG, MCP & ADK, Multi-Agents, Physical AI, ROS2...

0개의 댓글