ashhart/TensorFold
요약
TensorFold는 OpenAI와 호환되는 API를 통해 Apple Silicon 및 NVIDIA GPU에서 언어 모델을 서비스하는 프레임워크입니다. pip 또는 Homebrew로 설치할 수 있으며, 채팅 완료(chat completions) 등 표준 API 엔드포인트를 지원합니다. 또한, 비전 확장 기능을 통해 이미지와 텍스트 콘텐츠를 동일한 엔진으로 처리할 수 있도록 기능을 확장했습니다.
핵심 포인트
- OpenAI 호환 API를 제공하여 다양한 모델을 쉽게 배포 가능
- Apple Silicon (MLX) 및 NVIDIA GPU(CUDA) 모두 지원하며 최적화된 성능 제공
- 비전 확장 기능으로 이미지와 텍스트 입력을 통합 처리할 수 있음
- 최신 GPU 아키텍처(compute capability 8.9 이상)를 요구하여 고성능 컴퓨팅 환경 필요
TensorFold는 OpenAI와 호환되는 API를 통해 Apple Silicon 및 NVIDIA GPU에서 언어 모델을 서비스합니다. 각 모델 패밀리는 자체 커널과 초안 검증(draft verification) 기능을 제공합니다.
python -m pip install git+https://github.com/ashhart/TensorFold.git
tensorfold serve TensorFold/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-MLX-4bit
Mac에서는 Homebrew를 사용해 설치할 수도 있습니다: brew install ashhart/tensorfold/tensorfold
.
클라이언트의 기본 URL로는 http://127.0.0.1:8080/v1을, /v1/models에서 모델 ID를 사용하세요. 두 백엔드 모두 채팅 완료(chat completions), 완료(completions), OpenAI 응답(/v1/responses) 및 Anthropic 메시지(/v1/messages); API 레퍼런스를 참조하세요.
Python 3.11 이상이 필요하며, Mac에서는 MLX 0.32.2 이상이 필요합니다 (pip가 설치해줍니다). 설치 및 첫 요청에 대한 내용은 runbook을 참고하세요. NVIDIA GPU의 경우 CUDA 커널은 컴퓨팅 기능(compute capability) 8.9 이상이 필요합니다: Ada (RTX 40 시리즈), Hopper, Blackwell를 포함하며, DGX Spark의 GB10과 RTX 50 시리즈도 해당됩니다. NVFP4 및 FP8 체크포인트는 8.9부터 실행 가능하며, 이는 GPU가 각 mma(12.x에서는 FP4, 8.9부터는 FP8)를 갖춘 자체 수학적 구조에 기반합니다. 다른 곳에서는 W4A16을 사용합니다. RTX 40, Hopper 및 B200 빌드는 Blackwell에서 컴파일 및 비트 검사를 거치지만 아직 해당 카드에서 실행되지는 않습니다. RTX 30 카드(8.6)는 지원되지 않으며, 서버는 시작 시 8.9 미만의 GPU를 거부합니다.
비전 확장 기능(vision extra)을 설치하려면 python -m pip install 'tensorfold[vision] @ git+https://github.com/ashhart/TensorFold.git'을 사용하고, --vision 플래그와 함께 지원되는 GLM-5.3-Flash 또는 Qwen3.5/3.8 밀집(dense) 체크포인트를 시작하여 이미지 및 텍스트 콘텐츠 파트를 동일한 레인 엔진으로 처리할 수 있습니다. Flash Next CUDA는 또한 --vision --parallel 2 이상을 사용하여 이미지를 허용합니다.
GLM-5.3-Flash 이미지는 MLX에서 실행되며, 밀집 Qwen은 MLX와 CUDA에서 실행됩니다. API, 체크포인트 요구 사항, 캐시 동작 및 자격 상태에 대한 이미지 입력 내용은 참고하세요.
| 모델 (Model) | 체크포인트 (Checkpoint) | 백엔드 (Backend) | 드래프팅 (Drafting) |
|---|---|---|---|
| Nemotron 3.5 Lightning | TensorFold/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-MLX-4bit | MLX, CUDA | 포함된 MTP 헤드; 컨텍스트는 MLX에서 복사 |
| Qwen3.8-27B | TensorFold/Qwen3.8-27B-MLX-4bit | MLX, CUDA | z-lab/Qwen3.8-27B-DFlash2 및 컨텍스트 복사; DFlash2는 MLX에서 선택 사항 |
| Qwen3.8 Flash Next | TensorFold/Qwen3.8-Flash-Next-MLX-4bit-MTP | MLX, CUDA | 포함된 MTP 헤드 및 컨텍스트 복사 |
| GLM-5.3-Flash | TensorFold/GLM-5.3-Flash-MLX-4bit-MTP | MLX (256 GB Mac), CUDA (두 개의 랭크) | |
| Gemma 4 26B-A4B | mlx-community/gemma-4-26b-a4b-it-4bit | MLX | 컨텍스트 복사; z-lab/gemma-4-26B-A4B-it-DFlash는 선택 사항 |
| DeepSeek-V4-Flash | mlx-community/DeepSeek-V4-Flash-4bit | MLX (256 GB Mac) | TensorFold/DeepSeek-V4-Flash-DSpark-MLX 또는 TensorFold/DeepSeek-V4-Flash-MTP-MLX |
| Qwen3.8-27B (NVFP4) | nvidia/Qwen3.8-27B-NVFP4 (ModelOpt: NVFP4 MLP, FP8 attention) | CUDA, 단일 GPU | z-lab/Qwen3.8-27B-DFlash2 및 컨텍스트 복사 |
| Qwen3.8-27B (EXL3, 실험적) | turboderp/Qwen3.8-27B-exl3 (브랜치 3.00bpw, 4.00bpw; 임의 코드북, 가중치당 1~8 비트) | CUDA | z-lab/Qwen3.8-27B-DFlash2 및 컨텍스트 복사 |
| Qwen3.8 Flash Next (EXL3, 실험적) | turboderp/Qwen3.8-Flash-Next-exl3 (브랜치 3.05bpw_h5_ng5; 임의 코드북, 텐서당 너비) | CUDA | 포함된 MTP 헤드 및 컨텍스트 복사 |
| Ternary Bonsai 2 27B | prism-ml/Ternary-Bonsai-2-27B-mlx-2bit | MLX | z-lab/Qwen3.8-27B-DFlash2 및 컨텍스트 복사 |
| Qwen3.8 Flash Next (NVFP4) | local-inference-lab/Qwen3.8-Flash-Next-NVFP4 (ModelOpt: NVFP4 experts, MXFP8 attention 및 DeltaNet); RadixArk/Qwen3.8-Flash-Next-NVFP4 (experts 외 bf16) | CUDA, 단일 GPU | 포함된 MTP 헤드 및 컨텍스트 복사 |
tensorfold models
패밀리와 체크포인트를 나열합니다. tensorfold info MODEL
가중치를 가져오지 않고 구성을 확인합니다. serve
누락된 체크포인트를 다운로드합니다. pull}<tool_call|>jsonelixirature_system_response}{
미리 다운로드합니다.
이 TensorFold/...
ID는 2026년 10월 2일 Hugging Face의 Vontra org에서 이동했으며, 이전 이름은 리디렉션됩니다.
tensorfold pull TensorFold/Qwen3.8-27B-MLX-4bit z-lab/Qwen3.8-27B-DFlash2
tensorfold serve TensorFold/Qwen3.8-27B-MLX-4bit
Qwen3.8-27B는 혼합 레이어 포맷을 포함하여 MLX 2-, 3-, 4-, 5-, 6- 및 8-비트 체크포인트를 읽습니다.
Apple Silicon과 CUDA에서 32개, 64개, 128개 그룹으로 패킹된 행(row)을 읽으며, 새로운 경로에 대한 하드웨어 적격성은 아직 보류 중입니다. M5는 호환 가능한 포맷에 대해 네이티브 텐서 유닛 커널을 유지하며, 다른 포맷은 행 디코더를 사용합니다. 정확한 범위는 양자화된 체크포인트를 참조하십시오.
CUDA에서는 서비스하기 전에 DFlash2를 pull해야 합니다. 그렇지 않으면 순차적인 참조(serial reference)를 위해 명시적으로 --no-drafts를 지정해야 합니다.
Nemotron은 TensorFold 프로젝션과 라우팅 전문가 커널을 사용합니다. 로드 시간 행 확인(load-time row check)이 드래프팅을 제어하므로, 설치된 MLX 버전을 패키지 요구 사항 내로 유지하십시오. 명명된 체크포인트에는 mtp-4bit.safetensors가 포함되어 있으며, 이는 pull 및 serve에서 확인합니다.
Flash Next는 4비트/그룹-32 가중치를 필요로 합니다. MTP 헤드가 없으면 MLX에서 MTP 드래프팅 없이 실행할 수 있습니다. CUDA에서는 명시적으로 --no-drafts를 전달하십시오. 또한 하나의 CUDA GPU에서 표에 있는 두 개의 NVFP4 내보내기(export)와 이러한 내보내기에서 전송되는 블록 스케일 FP8 (ModelOpt FP8_PB_WO) 선형을 읽습니다. 형식, 통과한 확인 사항 및 지원되지 않는 항목은 레시피를 참조하십시오. Nemotron CUDA는 --no-drafts가 설정되지 않은 경우 4비트/그룹-64 가중치와 MTP 헤드를 필요로 합니다. GLM은 MLX에서 4비트/그룹-64 가중치와 mlx-lm의 혼합 비트 변환을 읽으며, 이 중 5-, 6-, 8-비트 텐서는 자체 행 커널을 사용합니다. MLX 0.32.2 이상이 필요합니다. GLM CUDA는 MLX 4비트/그룹-64 가중치와 Brandon M. Music의 실험적인 EXL3/TR3 체크포인트(brandonmusic/GLM-5.3-Flash-tr3-4bpw, 또한 Mia-AiLab/GLM-5.3-Flash-EXL3-TR3-4bpw로 재호스팅됨)를 읽습니다. GLM의 선택적 incoai/GLM-5.3-Flash-DFlash2
체크포인트는 타사 공지(third-party notices)에 설명된 비상업적 라이선스 약관을 따릅니다.
Gemma 4는 draft head가 없습니다. 컨텍스트의 복사본을 작성하며, z-lab/gemma-4-26B-A4B-it-DFlash와 함께 서비스될 때 z-lab의 DFlash 모델에서 체인을 가져옵니다.
(한 번 풀림). 이 커널들은 mlx-community 변환 스토리지에 저장된 8비트 라우터와 함께 32개 또는 64개 그룹으로 4비트 가중치를 읽습니다. serve는 다운로드 전에 다른 Gemma 4 레이아웃을 거부합니다.
DeepSeek-V4-Flash는 mlx-community 변환(affine 4-bit/group-64 가중치, mxfp4 라우팅된 전문가)을 읽으며 MLX 0.32.2 이상이 필요합니다. 이 모델의 draft head는 DeepSeek의 DSpark 블록과 MTP 레이어(MIT)이며, 다음과 같이 변환됩니다:
tensorfold pull TensorFold/DeepSeek-V4-Flash-DSpark-MLX
한 번 풀고 serve에서 이를 사용하여 작성합니다. 자세한 내용은 해당 레시피를 참조하십시오.
지원되는 형식 및 백엔드 제한에 대한 레시피를 확인하십시오.
draft는 동일 엔진이 순차적으로 생성할 토큰과 같을 때만 허용됩니다. 샘플링은 프롬프트 또는 명시적 시드, 절대 위치 및 토큰 ID에 따라 달라집니다. 커널들이 호출 내에서 각 행의 산술 연산이 다른 행과 독립적인지 확인하십시오. `
| 옵션 (Option) | 의미 (Meaning) | 백엔드 (Backend) |
|---|---|---|
--host, --port | 리스닝 주소, 기본값 127.0.0.1:8080 | 모두 (Both) |
--name | 클라이언트에게 광고되는 모델 ID | 모두 (Both) |
--vision | 옵트인 GLM-5.3-Flash, Qwen3.5/3.8 dense 및 Flash Next 이미지 입력 지원 | MLX; dense Qwen은 CUDA도 가능; Flash Next는 --parallel >=2와 함께 CUDA 사용 가능 |
--vision-max-images N | --vision과 함께 사용할 수 있는 전체 요청 기록의 이미지 개수 (기본값 4); 다른 이미지 제한은 여전히 적용됨 | 모두 (Both) |
--vision-image-tokens N | --vision과 함께 사용되는 요청 이미지의 시각 토큰 공유량 (기본값 4,096, 최대 65,536); 각 이미지는 최대 4,096을 유지함 | 모두 (Both) |
CUDA Qwen | ||
--alias | 추가 모델 ID | 모두 (Both) |
--context N | 프롬프트와 응답의 용량 (토큰 수) | 모두 (Both) |
--max-tokens N | 기본 응답 제한, 4096 | 모두 (Both) |
--temperature, --top-p, --top-k, --min-p | 샘플링 기본값; temperature가 0이면 greedy 방식 사용 | 모두 (Both) |
--thinking, --no-thinking | 템플릿 사고(thinking) 토글 | 모두 (Both) |
--reasoning-effort | 요청이 아무것도 설정하지 않은 경우의 템플릿 노력도; 기본값: 템플릿 자체의 값 | 모두 (Both) |
--thinking-budget N | 추론 과정 내의 토큰 수 제한 | 모두 (Both) |
--backend auto, mlx, cuda | 백엔드 선택; auto는 macOS에서 MLX 사용 | 모두 (Both) |
--parallel N | MLX auto는 예산 내에서 최대 8개까지 허용; CUDA auto는 1이며, 명시적 N은 지원되는 공유 라운드를 활성화함 | 모두 (Both) |
--no-drafts | 순차적으로 디코딩 (Decode serially) | 모두 (Both) |
--drafter auto, none, 또는 모델 ID | 해당 계열이 지원하는 선택적 초안(draft) 모델 선택 | 모두 (Both) |
--mtp-drafts N | MTP 초안에 대한 계열별 제한 | 모두 (Both) |
--kv-dtype bf16, int8, int4 | Flash Next: int8 또는 int4는 32개 값당 하나의 fp16 스케일로 키(keys)와 값(values)을 저장함 |
다른 계열 및 MLX 경로는 이를 거부합니다 |
CUDA |
--mtp-confidence P |
Flash Next: 이 확률(0~1, 기본값 0.70)보다 낮은 드래프트 체인을 나중에 드래프트할 때 중지합니다 | CUDA |
--prefill-fp8 |
프롬프트 행렬 곱셈은 FP8 (e4m3) 활성화를 사용하며, 체크포인트는 FP8 프롬프트 커널을 가집니다 (Qwen3.8 27B 및 Qwen3.6 MLX 4-bit의 경우, NVFP4 체크포인트에서 FP8 및 MXFP8 레이어): 낮은 정밀도에서 더 빠른 프롬프트(측정됨). 기본값: 디코딩 시 bf16 활성화 | CUDA |
--precision checkpoint , full |
NVFP4 체크포인트: checkpoint(기본값)는 자체 수학을 실행하며, SM 12.x에서 FP4 x FP4, 8.9부터는 FP8 x FP8를 사용하고, 그 외에서는 W4A16을 사용합니다; full은 저장된 가중치에 대해 bf16 활성화를 실행합니다 (측정됨) |
CUDA |
--tp 2 --rank R --master HOST |
두 개의 랭크 CUDA 실행; --master-port P는 랭크 0의 만남 포트(기본값 29551)를 설정합니다 |
CUDA |
--decode-share F |
Mac: 프롬프트가 프리필되는 동안, 응답을 생성하는 것은 이 공유 시간만큼 계속 진행됩니다. 새로운 프롬프트는 다음 청크에서 시작하며, 가장 적은 토큰이 먼저 남습니다 (기본값 0.25; 0은 전체 프롬프트를 순서대로 프리필합니다, 0.3.6.2). CUDA의 Flash Next와 --parallel N을 사용하면: 응답 디코딩이 각 프롬프트 패스 내에서 이루어지며, 공유 크기는 라운드의 디코딩이 이를 차지하도록 조정됩니다 (기본값 0: 전체 패스) |
Both |
--prompt-cache-gib N |
유지되는 대화 접두사 예산; 0은 저장을 비활성화합니다. 기본값: 가중치, 전체 창 요청 및 공유 라운드가 사용하지 않는 메모리 중 최소 8분의 1 RAM을 필요에 따라 반환합니다 (최대 16 GiB) | MLX |
--prefill-pass N |
프롬프트가 단독으로 채워지는 동안 계획된 청크 전진 시간(기본값 8; 0.5.0의 경우 1)을 사용합니다 | MLX |
--pass-cache-gib N |
이러한 패스 동안 메모리 예산에 여유 공간이 있을 때 해제되는 버퍼 캐시, 기본값 16 GiB | MLX |
--checkpoint-slots N |
유지되는 대화 접두사 (기본값 8개 중 레인당 3개); 긴 대화는 바이트 예산보다 먼저 이것에 도달합니다.
CUDA에서는 프롬프트가 Qwen3.8-27B를 --parallel 2개 이상(기본값 3)으로 유지한다고 명시합니다.|
둘 다 |
--spill-gib N |
제거된 대화 접두사를 디스크에 쓰기(최대 N GiB)하고 다시 채우는 대신 읽어옵니다. zero는 비활성화합니다 | MLX |
--mlx-cache-gib N |
재사용 가능한 해제 버퍼 캐시, 기본값 8 GiB | MLX |
--snapshot-dir DIR |
지속적인 접두사 스냅샷; none은 이를 비활성화합니다 | MLX |
--max-snapshots N |
시작 시 로드되는 시스템 블록 스냅샷, 기본값 3 | MLX |
--no-update-check |
시작 릴리스 검사를 비활성화합니다 | 둘 다 |
기본 샘플링 설정은 generation_config.json에서 가져옵니다.
요청 시 샘플링 및 응답 길이를 재정의할 수 있습니다. CUDA는 위에 언급된 MLX 전용 옵션을 구현하지 않습니다. 요청 범위에 대한 내용은 API 필드를 참조하십시오.
터미널에서 tensorfold serve를 실행하면 로그에 하나의 실시간 처리량 라인이 유지됩니다. 출력 리디렉션 시에는 이 기능이 꺼지며, TENSORFOLD_NO_LIVE=1로 설정하면 비활성화됩니다.
MLX에서는 --context가 생략되었습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Trending Python (weekly)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기