pmetal: Rust로 작성된 Apple Silicon용 ML SDK, 프레임워크 및 애플리케이션 제품군
요약
pmetal은 Rust로 작성된 Apple Silicon 전용 머신러닝 플랫폼으로, Metal GPU와 Apple Neural Engine(ANE)을 활용합니다. GUI와 TUI를 모두 지원하며 모델 학습, 추론, 양자화, 지식 증류 등 통합적인 ML 워크플로우를 제공합니다.
핵심 포인트
- Rust 기반의 고성능 Apple Silicon 최적화 ML SDK 및 프레임워크
- Tauri와 Svelte를 활용한 시각적인 데스크톱 GUI 제공
- LoRA, QLoRA, GRPO 등 최신 학습 기법 및 지식 증류 지원
- 터미널 환경을 위한 강력한 TUI 제어 센터 포함
Powdered Metal — Rust로 작성된 Apple Silicon용 ML SDK, 프레임워크 및 애플리케이션 제품군입니다.
PMetal은 저수준 Metal GPU 커널 및 Apple Neural Engine (ANE) 통합부터 고수준 학습 API, 터미널 TUI, 그리고 완전한 데스크톱 GUI에 이르기까지 Apple Silicon을 위한 완전한 머신러닝 (ML) 플랫폼입니다. Apple 생태계를 벗어나지 않고도 미세 조정 (Fine-tuned)된 모델을 배포할 수 있습니다.
시각적인 모델 관리, 학습 및 추론을 위한 완전한 Tauri + Svelte 데스크톱 애플리케이션입니다.
cd crates/pmetal-gui
bun install && bun tauri dev
Dashboard, Models, Datasets, Training, Distillation, GRPO, Inference, Merging, Quantize, Settings 등 10개의 페이지로 구성됩니다. GUI에서 HuggingFace로부터 모델을 다운로드하고, 실시간 손실 (Loss) 지표와 함께 LoRA 학습을 구성하며, 모델과 채팅하고, 가중치를 병합 (Merge)하고, 양자화 (Quantize)할 수 있습니다. 학습은 프로세스 내에서 실행되며 실시간 진행 상황 업데이트를 제공합니다.
9개의 탭을 갖춘 기능이 풍부한 터미널 제어 센터입니다.
pmetal tui
| 탭 | 설명 |
|---|---|
| Dashboard | 실시간 손실 곡선 (점자), 학습률 (LR) 스케줄, 처리량 (Throughput) 스파크라인, 타이밍 분석 게이지 |
| Device | GPU/ANE 정보, Metal 기능 탐지, 메모리 게이지, 커널 튜닝, UltraFusion 토폴로지 |
| Models | 캐시된 모델 탐색, HuggingFace Hub 검색 (S ), 메모리 적합성 추정, 다운로드 |
| Datasets | 로컬 데이터셋 (JSONL, Parquet, CSV) 스캔 및 라인 수와 함께 미리보기 |
| Training | 섹션별 파라미터 양식을 사용하여 SFT/LoRA/QLoRA 학습 실행 구성 및 시작 |
| Distillation | 지식 증류 (Knowledge Distillation) 구성 (온라인, 오프라인, 점진적 방식) |
| GRPO | 보상 함수 (Reward functions) 및 샘플링 파라미터를 사용한 GRPO/DAPO 추론 학습 구성 |
| Inference | 마크다운 렌더링 및 생성 설정 사이드바를 갖춘 대화형 채팅 인터페이스 |
| Jobs | 로그 뷰어, 상태 추적 및 메타데이터를 포함한 학습 실행 이력 |
단축키: Tab / Shift+Tab은 탭 전환, Alt+1-9는 직접 접근, L은 실행 중 학습률 조정, q는 종료입니다.
시퀀스 패킹 (sequence packing)을 사용한 LoRA 미세 조정 (fine-tuning) (기본값)
pmetal train --model Qwen/Qwen3-0.6B --...
| 명령어 | 설명 |
|---|---|
train | LoRA/QLoRA/DoRA를 이용한 미세 조정 (SFT) |
infer | 채팅, 도구 사용 (tool use), 사고 모드 (thinking mode)를 포함한 대화형 추론 |
distill | 지식 증류 (Knowledge distillation) (온라인, 오프라인, 점진적 방식) |
grpo | GRPO/DAPO 추론 학습 (VLM, 투기적 (speculative), 비동기 보상 (async rewards)) |
rlkd | 지식 증류를 결합한 강화 학습 (Reinforcement Learning with Knowledge Distillation) |
embed-train | Sentence-transformer 미세 조정 (InfoNCE, Triplet, CoSENT) |
search | 메모리 적합도 추정 (memory fit estimation)을 포함한 HuggingFace Hub 검색 |
download | HuggingFace Hub에서 모델 다운로드 |
merge | 두 개 이상의 모델 병합 (12가지 전략) |
quantize | GGUF 양자화 (13가지 포맷 옵션) |
fuse | LoRA 어댑터 가중치를 베이스 모델에 병합 (fuse) |
eval | 데이터셋에 대한 모델 퍼플렉시티 (perplexity) 평가 |
serve | OpenAI 호환 추론 서버 (기능 제한적 (feature-gated)) |
tui | 전체 TUI 제어 센터 (9개 탭) |
dashboard | 실시간 학습 지표 시각화 |
dataset | 데이터셋 유틸리티: analyze, download, convert |
ollama | Ollama 통합: modelfile, create, templates |
info | 장치 정보 표시 (GPU, ANE, 대역폭 (bandwidth), NAX) |
memory | 메모리 사용량 및 사용 가능한 용량 표시 |
init | 샘플 설정 파일 생성 |
bench | 학습 성능 벤치마크 |
bench-gen | 생성 루프 타이밍 벤치마크 |
bench-ffi | FFI 오버헤드 벤치마크 |
bench-workload | 실제 캐시된 추론/학습 워크로드 벤치마크 |
bench-corpus | JSON 보고를 포함한 구조화된 커널 벤치마킹 |
mcp | MCP 서버 시작 (Claude Desktop / MCP 클라이언트를 위한 45개 도구) |
cluster | 멀티 Mac 클러스터: 피어(peer) 검색, 기기 간 학습, all-reduce / 파이프라인 벤치마크 실행 |
두 대 이상의 Apple Silicon Mac을 "홈 클러스터(home cluster)"로 연결하여 분산 학습 (distributed training) 및 추론 (inference)을 수행할 수 있습니다. PMetal은 장치 내의 모든 NIC (Thunderbolt-Bridge, Ethernet, Wi-Fi)를 자동으로 감지하고, mDNS를 통해 이를 알리며, 가장 빠른 패브릭 (fabric)에 편향된 링 (ring)을 형성합니다. 별도의 설정 없이도 Ethernet보다 Thunderbolt 케이블을, Wi-Fi보다 Ethernet을 우선적으로 선택합니다.
# 1. Mac들을 연결합니다 (Thunderbolt-4/5 케이블 권장; Ethernet도 가능).
# 2. 모든 Mac에서 다음을 실행합니다:
pmetal cluster status # 로컬 NIC 및 이미 알림을 보내고 있는 피어(peer) 표시
...
pmetal cluster status
출력 예시:
Local peer: 12D3KooW…XyZ (rank 0/2)
Thunderbolt ring: yes
Local interfaces:
...
현재 구현된 기능: 그래디언트 올리듀스 (gradient all-reduce, 실제 멀티 머신 학습 가능), Thunderbolt > Ethernet > Wi-Fi 우선순위를 가진 패브릭 인식 링 형성 (fabric-aware ring formation), 작업 도중 케이블이 뽑혔을 때의 자동 패브릭 폴백 (automatic fabric fallback), 그래디언트 압축 (gradient compression; TopK, FP16/BF16/INT8 양자화 (quantization), 에러 피드백 (error feedback)), 그리고 멀티 프로세스 통합 테스트가 완료된 전송 테스트 기반 파이프라인 하네스 (transport-tested pipeline harness)입니다. 아키텍처별 부분 레이어 실행 (per-architecture partial-layer execution, 단일 Mac에 들어가지 않는 모델을 서빙하기 위한 전제 조건)이 다음 단계입니다. 하네스는 준비되었으며, 현재 병목 지점은 모델 API입니다.
PMetal은 임베디드 가능한 SDK입니다. 학습, 추론 및 모델 연산을 귀하의 Rust 애플리케이션에 통합할 수 있습니다. easy 모듈은 고수준 빌더 (high-level builders)를 제공하며, 하위 크레이트 (pmetal-trainer, pmetal-models, pmetal-lora 등)는 모든 파이프라인 단계에 대한 완전한 제어권을 제공합니다.
use pmetal::easy;
// LoRA를 이용한 미세 조정 (Fine-tune)
let result = easy::finetune("Qwen/Qwen3-0.6B", "train.jsonl")
...
사용 가능한 빌더: easy::finetune(), easy::dpo(), easy::simpo(), easy::orpo(), easy::kto(), easy::infer().
더 낮은 수준의 제어가 필요한 경우 크레이트를 직접 사용하십시오 — pmetal-trainer::TrainingLoop, pmetal-models::DynamicModel, pmetal-lora::DynamicLoraModel, pmetal-distill::Distiller 등. examples/를 참조하십시오.
수동 학습 루프 오케스트레이션 (orchestration) 및 ANE 전용 워크플로우를 포함한 완전한 작동 예제를 확인할 수 있는 디렉토리입니다.
PMetal은 PyO3를 통해 Python 확장 모듈을 노출합니다. crates/pmetal-py에서 maturin develop 명령어로 설치하십시오.
import pmetal
# 적절한 기본값으로 미세 조정 (Fine-tune)
result = pmetal.finetune(
...
import pmetal
# 학습 구성 요소 설정
lora_config = pmetal.LoraConfig(r=16, alpha=32.0)
...
사전 빌드된 서명된 바이너리 (signed binaries)는 Releases 페이지에서 사용할 수 있습니다.
Crates는 crates.io에서 사용할 수 있습니다.
소스에서 빌드하기:
git clone https://github.com/epistates/pmetal.git && cd pmetal
cargo build --release # CLI + TUI
cd crates/pmetal-gui && bun install && bun tauri build # GUI (선택 사항)
PMetal은 시작 시 Apple Silicon의 성능을 자동으로 감지하고 그에 따라 커널 파라미터 (kernel parameters)를 조정합니다.
| 칩 제품군 (Chip Family) | GPU 제품군 (GPU Family) | NAX | ANE | UltraFusion | 상태 (Status) |
|---|---|---|---|---|---|
| M1 / Pro / Max / Ultra | Apple7 | - | 16 cores | Ultra: 2-die | 완벽 지원 |
| ... | M5 / Pro / Max / Ultra | Apple10 | Yes | 16 cores | Ultra: 2-die |
자동 감지된 기능 (Auto-detected features): GPU 제품군, 디바이스 티어 (device tier), 코어 수, 메모리 대역폭 (memory bandwidth), 동적 캐싱 (dynamic caching), 메시 셰이더 (mesh shaders), NAX (M5+), UltraFusion 토폴로지 (via sysctl hw.packages), ANE 가용성.
티어 기반 커널 튜닝 (Tier-based kernel tuning): 행렬 타일 크기 (Matrix tile sizes), FlashAttention 블록 크기, 융합 커널 스레드 그룹 크기 (fused kernel threadgroup sizes), 배치 승수 (batch multipliers)는 디바이스 티어 (Base/Pro/Max/Ultra) 및 GPU 제품군을 기반으로 자동 선택됩니다. 전체 튜닝 매트릭스 (tuning matrix)에 대해서는 docs/hardware-support.md를 참조하십시오.
PMetal은 20개의 특화된 크레이트 (crates)로 구성된 Rust 워크스페이스 (workspace)로 조직되어 있습니다:
pmetal/
├── pmetal-bridge # 제로 할당 (Zero-allocation) MLX C++ 브리지 (inline array FFI)
├── pmetal-core # 기반 (Foundation): 설정 (configs), 트레이트 (traits), 타입 (types), 에러 처리 (error handling)
...
pmetal 파사드 (facade) 크레이트는 기능 플래그 (feature flags)와 함께 모든 모듈을 재내보내기 (re-exports) 하며, 빠른 시작 사용을 위한 easy API를 제공합니다.
아래의 모든 인과적 언어 모델 (causal language models)은 HuggingFace Hub 또는 로컬 safetensors에서 로드할 수 있으며, CLI, TUI, GUI 또는 SDK를 통해 생성 (generation) 용도로 사용할 수 있습니다.
| 제품군 (Family) | 아키텍처 (Architecture) | 변형 (Variants) | model_type 값 |
|---|---|---|---|
| Llama | Llama | 2, 3, 3.1, 3.2, 3.3 | llama , llama3 |
| Llama 4 | Llama4 | Scout, Maverick | llama4 |
| Qwen 2 | Qwen2 | 2, 2.5 | qwen2 , qwen2_5 |
| Qwen 3 | Qwen3 | 3 | qwen3 |
| Qwen 3 MoE | Qwen3MoE | 3-MoE | qwen3_moe |
| Qwen 3.5 | Qwen3Next | 3.5 (Next) | qwen3_next , qwen3_5 |
| DeepSeek | DeepSeek | V3, V3.2, V3.2-Speciale | deepseek , deepseek_v3 |
| Mistral | Mistral | 7B, Mixtral 8x7B | mistral , mixtral |
| Gemma | Gemma | 2, 3 | gemma , gemma2 , gemma3 |
| Phi 3 | Phi | 3, 3.5 | phi , phi3 |
| Phi 4 | Phi4 | 4 | phi4 |
| Cohere | Cohere | Command R | cohere , command_r |
| Granite | Granite | 3.0, 3.1, Hybrid MoE | granite , granitehybrid |
| NemotronH | NemotronH | Hybrid (Mamba+Attention) | nemotron_h |
| GPT-OSS | GptOss | 20B, 120B | gpt_oss , gpt-oss |
| Gemma 4 | Gemma4 | 4 | gemma4 , gemma4_text |
| 제품군 (Family) | 아키텍처 (Architecture) | 변형 (Variants) | model_type 값 |
|---|---|---|---|
| BERT | Bert | BERT, RoBERTa, DistilBERT, XLM-RoBERTa | bert , roberta , distilbert , xlm-roberta , xlm_roberta |
DynamicLoraModel에 구현이 되어 있는 모델에 대해서는 LoRA 학습 (LoRA training)이 지원됩니다.
아키텍처 감지는 자동으로 이루어집니다. pmetal train을 모델 디렉토리나 HuggingFace ID로 지정하기만 하면 됩니다.
| 아키텍처 (Architecture) | LoRA | QLoRA | 비고 (Notes) |
|---|---|---|---|
| Llama | 예 | 예 | Llama 2, 3, 3.1, 3.2, 3.3을 포함합니다. 그래디언트 체크포인팅 (Gradient checkpointing)이 지원됩니다. |
| ... |
다음 아키텍처들은 pmetal-models에 구현되어 있으나, DynamicModel 디스패처 (dispatcher)에 연결되어 있지 않아 CLI 또는 DynamicModel::load()를 통해 로드할 수 없습니다:
| 제품군 (Family) | 모듈 (Module) | 비고 (Notes) |
|---|---|---|
| Pixtral | pixtral | 12B 시각-언어 모델 (vision-language model) |
| Qwen2-VL | qwen2_vl | 2B, 7B 시각-언어 모델 (vision-language model) |
| MLlama | mllama | Llama 3.2-Vision |
| CLIP | clip | ViT-L/14 시각 인코더 (vision encoder) |
| Whisper | whisper | Base, Small, Medium, Large 음성 모델 (speech models) |
| T5 | t5 | 인코더-디코더 아키텍처 (Encoder-decoder architecture) |
이 모듈들은 Rust 타입(예: pmetal_models::architectures::pixtral::Pixtral)을 통해 직접 사용할 수 있지만, 수동으로 가중치(weight)를 로드해야 합니다.
| 제품군 (Family) | 변체 (Variants) | 상태 (Status) |
|---|---|---|
| Flux | 1-dev, 1-schnell | 디스패처 (Dispatcher) + 파이프라인 (pipeline) 구현됨 |
모든 학습 방법은 콜백 기반 취소 (should_stop()), 메트릭 (metrics) JSONL 로깅, 그리고 적응형 학습률 (adaptive learning rate) 제어를 지원합니다.
| 방법 (Method) | CLI | GUI | TUI | 라이브러리 (Library) |
|---|---|---|---|---|
| SFT (지도 미세 조정, Supervised Fine-Tuning) | train | 예 | 예 | easy::finetune() |
| LoRA | train | 예 | 예 | easy::finetune() |
| QLoRA (4-bit) | train --quantization nf4 | 예 | 예 | easy::finetune() |
| DoRA | train --dora | 예 | 예 | easy::finetune() |
| DPO (직접 선호도, Direct Preference) | — | — | — | easy::dpo() |
| SimPO (단순 선호도, Simple Preference) | — | — | — | easy::simpo() |
| ... | 예 | 예 | GrpoTrainer | |
| DAPO (분리된 GRPO, Decoupled GRPO) | grpo --dapo | 예 | 예 | GrpoTrainer DAPO 모드 |
| 지식 증류 (Knowledge Distillation) | distill | 예 | 예 | Distiller |
| TAID (시간 적응형, Temporally Adaptive) | — | — | — | TaidDistiller |
| ANE 학습 (ANE Training) | train (자동) | — | 예 | AneTrainingLoop |
| RLKD (RL + 증류, RL + Distillation) | rlkd | — | — | RlkdTrainer |
| 임베딩 학습 (Embedding Training) | embed-train | — | — | EmbeddingTrainer |
라이브러리를 통해서만 사용할 수 있는 추가 방법: GSPO (GspoTrainer), PPO (PpoTrainer), Online DPO (OnlineDpoTrainer), 확산 학습 (Diffusion Training, DiffusionTrainer).
커스텀 Metal 셰이더 (shaders)는 상당한 속도 향상을 제공합니다:
FlashAttention: 융합된 softmax (fused softmax)를 사용하는 O(n) 메모리 어텐션 (attention), 티어 인지형 블록 크기 (tier-aware block sizes)
Fused GDN: Gated Delta Network 재귀 커널 (FLA Triton에서 포팅됨) — SIMD 리덕션 (reductions)을 이용한 단일 패스 상태 업데이트 (single-pass state update)
Fused LoRA: 어댑터 레이어 (adapter layers)를 위한 결합된 순전파 (combined forward pass) (lora-metal-fused 기능 사용 시 약 2배 속도 향상)
Fused Cross-Entropy: 청크 단위 어휘 손실 (chunked vocabulary loss) 계산
Fused Linear Cross-Entropy: 로짓 (logits) 실체화 (materialization)를 완전히 생략
Fused RoPE: 커널 내 회전 위치 임베딩 (Rotary position embeddings)
Fused SwiGLU: 티어 최적화된 스레드 그룹 (tier-tuned threadgroups)을 사용하는 융합된 게이트 + 활성화 함수 (fused gate + activation)
Fused RMSNorm + LoRA: 결합된 정규화 (normalization) 및 어댑터 투영 (adapter projection)
Fused Sampler: JIT 컴파일된 토큰 샘플링 (token sampling)
Fused MLP: 결합된 gate/up/down 투영 (projections)
Async Scheduler: 더블/트리플 버퍼링된 GPU 명령 스케줄링 (GPU command scheduling)
전력 효율적인 학습 및 추론을 위한 네이티브 ANE 통합:
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub ML Hardware의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기