본문으로 건너뛰기 © 2026 AIwitness. All rights reserved.
핵심 요약 RTX 3090 Ti 1장으로 대규모 모델을 고속 구동하는 최적화 설정과 벤치마크 결과를 공유함.
하드웨어 최적화 — GPU 언락 및 커널 모듈 설정을 통해 FP16/BF16 처리량 극대화함.추론 엔진 — Xolotl 엔진을 활용해 MoE 모델의 메모리 관리 및 Speculative Decoding 구현함.성능 결과 — DeepSeek-V4.1-Flash 35 tok/s, Qwen3.8-Flash-Next 140 tok/s 수준의 속도 달성함.설정 공유 — 젠투 리눅스 기반의 상세한 빌드 과정과 런처 스크립트 제공함.중요: NVIDIA GPU 잠금 해제
일반 소비자용 암페어 카드(RTX 3000 시리즈: GA102, GA104)는 엔터프라이즈 워크스테이션용 카드랑 비교하면 FP16/BF16 행렬 연산 처리 속도에 펌웨어로 인위적인 제한을 걸어놨다. 오픈소스인 gpu-unlock 커널 모듈을 쓰면 드라이버 잡히기 전에 이 제한을 풀어버릴 수 있다.
부트로더 커널 파라미터에 gpu_unlock.targets=all을 추가해라 (예: /etc/default/grub의 GRUB_CMDLINE_LINUX_DEFAULT 항목이나, 직접 쓰는 EFISTUB / systemd-boot 엔트리에 추가).
부팅 설정 다시 생성하고 initramfs를 재빌드해서, NVIDIA 커널 모듈보다 먼저 로드되게 만들어야 한다:
# GRUB 쓰는 경우:
grub-mkconfig -o /boot/grub/grub.cfg
dracut 쓰는 경우: dracut -f --regenerate-all
3. NVIDIA 드라이버 옵션 및 지속성 설정
/etc/modprobe.d/nvidia-perf.conf에 NVIDIA 커널 드라이버 파라미터를 설정해라 (루트 권한):
cat << 'EOF' > /etc/modprobe.d/nvidia-perf.conf
options nvidia NVreg_PreserveVideoMemoryAllocations=1
options nvidia NVreg_EnableStreamMemOPs=1
options nvidia-uvm uvm_perf_enable_cpu_to_gpu_dma=1
EOF
재부팅하고 나서 언락이 제대로 됐는지 확인해라:
dmesg | grep -i gpu_unlock
지속성 모드(persistence mode)를 켜고 GPU 전력 제한을 최대치로 설정해라:
nvidia-smi -pm 1
nvidia-smi -pl $(nvidia-smi -q -d POWER | grep "Max Power Limit" | head -n1 | awk '{print $5}' | cut -d. -f1)
GCC 14가 선택 안 되어 있으면 이걸로 설정해라
그리고 <N> 자리에 gcc-config -l에서 나온 번호를 넣어라:
gcc-config <N> && source /etc/profile
GCC 14보다 높으면 컴파일 안 된다 emerge dev-util/nvidia-cuda-toolkit
혹시 모르니까 다 깔아두자 emerge --ask --verbose \
dev-build/cmake \
dev-build/ninja \
dev-vcs/git \
net-misc/curl \
app-misc/jq \
sys-libs/liburing \
app-arch/snappy \
dev-lang/python
mkdir -p "$HOME/.local/bin"
mkdir -p "$HOME/.local/llm-tools"
mkdir -p "$HOME/.quetza-data/conductor"
mkdir -p "$HOME/models/deepseek-v41"
mkdir -p "$HOME/models/qwen-flash"
툴 스크립트랑 허깅페이스 다운로드용 전용 파이썬 환경 python3 -m venv "$HOME/.local/llm-tools/venv_hf"
source "$HOME/.local/llm-tools/venv_hf/bin/activate"
pip install --upgrade pip
pip install "huggingface_hub[cli]" torch safetensors numpy
Xolotl은 다중 계층 메모리 관리, NVMe Engram 스트리밍, DSpark 추론 디코딩 로직을 합쳐서 단일 GPU에서 거대 MoE 모델을 돌릴 수 있게 해준다.
고정된 llama.cpp 의존성 가져오고 패치 적용 bash tools/xolotl/fetch-llama.sh
암페어(sm_86)용으로 설정 및 컴파일 cmake -S . -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DSTRATA_ENABLE_CUDA=ON \
-DSTRATA_GGML_CUDA=ON \
-DSTRATA_MMQ_KQUANTS=ON \
-DCMAKE_CUDA_ARCHITECTURES=86 \
-DSTRATA_GGML_DIR="$PWD/third_party/llama.cpp" \
-DSTRATA_DSV41_FQ_OP=ON \
-DSTRATA_DSV41_HC_MIX=ON
빌드 디렉토리를 링크해서 래퍼 스크립트가 ds41_generate를 찾을 수 있게 함 ln -sfn "$PWD/build" "$PWD/build-xolotl"
Step 4: 모델 다운로드 및 Engram 추출
1. DeepSeek-V4.1-Flash (552B MoE)
source "$HOME/.local/llm-tools/venv_hf/bin/activate"
cd "$HOME/models/deepseek-v41"
모델 가중치, draft sidecar, expert rank 인덱스 다운로드 hf download IndrasMirror/DeepSeek-V4.1-Flash-1017-XQ-Uncensored \
--include "v2/*" "tokenizer/*" "V41-MTP-Vision-1017*" \
--local-dir .
원본 FP8 Engram 테이블 샤드 다운로드 hf download deepseek-ai/DeepSeek-V4.1-Flash-1017 \
model-00047-of-00048.safetensors \
model-00048-of-00048.safetensors \
model.safetensors.index.json config.json \
--local-dir ./FP8-engram
Engram 런타임 바이너리 테이블을 NVMe로 추출 cd "$HOME/.local/llm-tools/Xolotl"
python3 tools/v41/extract_engram.py \
--input "$HOME/models/deepseek-v41/FP8-engram" \
--output "$HOME/models/deepseek-v41/engram_rt"
2. Qwen3.8-Flash-Next (125B MoE)
cd "$HOME/models/qwen-flash"
hf download Qwen/Qwen3.8-Flash-Next-GGUF \
--include "pack-qfn45/*" \
--local-dir .
Step 5: MTP 추론 가속(Speculative Decoding) 설정
DeepSeek-V4.1-Flash의 MTP(Multi-Token Prediction)는 DSpark sidecar 엔진으로 돌아감:
Draft Engine: V41-MTP-Vision-1017.Q2_K.gguf를 제안 헤드로 사용함.
Expert Pruning: 검증 스윕을 상위 64개 활성 draft expert(dspark_expert_counts.txt:64)로 제한해서 PCIe 버스 포화 막음.
실시간 재양자화 ( STRATA_DENSE_REQUANT=q6_K): 실행 시점에 dense attention이랑 output 헤드를 Q8_0에서 Q6_K로 재양자화함. 이렇게 하면 1.6 GiB VRAM 을 확보해서 활성 expert랑 같이 speculative draft 캐시를 올릴 수 있음.
PCIe 배치 처리 ( --tier-batch-pcie 0.25): 80 GiB 고정 호스트 RAM 영역이랑 GPU 사이의 DMA 전송을 배치로 처리함.
1. 엔진 래퍼에서 프로세스 메모리 경계 확장
systemd 사용자 스코프가 80 GiB 전체 영역이랑 런타임 버퍼를 다 잡을 수 있게 늘려줌:
sed -i 's/MemoryMax=84G/MemoryMax=110G/g' "$HOME/.local/llm-tools/Xolotl/tools/v41/serve/ds41-engine.sh"
2. 기본 설정 생성: $HOME/models/deepseek-v41/strata-v41.json
cat << EOF > "$HOME/models/deepseek-v41/strata-v41.json"
{
"exe": "$HOME/.local/llm-tools/Xolotl/tools/v41/serve/ds41-engine.sh",
"args": [
"-m",
"$HOME/models/deepseek-v41/v2/V41-XQ-1017.gguf",
"--backend",
"cuda",
"--experts",
"gpu",
"--engram",
"$HOME/models/deepseek-v41/engram_rt",
"--rank",
"$HOME/models/deepseek-v41/v2/rank-1017-085.bin",
"--ctx",
"131072",
"--stop",
"1",
"--arena-adapt",
"--kv-fp4",
"--route-bias",
"0.5",
"--route-bias-file",
"0.3",
"--arena-gib",
"80",
"--prompt-batch",
"12288",
"--tier-batch-pcie",
"0.25"
],
"cwd": "$HOME/.local/llm-tools/Xolotl",
"tokenizer": "$HOME/models/deepseek-v41/tokenizer",
"model_name": "deepseek-v4.1",
"aliases": "deepseek-v41,deepseek/deepseek-v4.1-flash",
"log": "$HOME/models/deepseek-v41/xolotl-v41.log",
"port": 8000,
"gpu": 0,
"sampling": {
"temperature": 0.1,
"top_p": 0.95,
"top_k": 64,
"presence_penalty": 0.0,
"frequency_penalty": 0.0
},
"api_monitor": true,
"fit_max_tokens": true,
"reasoning_budget_tokens": 4096,
"env": {
"STRATA_BUILD_DIR": "$HOME/.local/llm-tools/Xolotl/build",
"STRATA_SERVE_DSPARK": "$HOME/models/deepseek-v41/V41-MTP-Vision-1017.Q2_K.gguf",
"STRATA_ATTN_F16_GATHER": "1",
"STRATA_NO_SCOPE": "1",
"STRATA_SERVE_PASS_BIAS": "0",
"STRATA_DENSE_REQUANT": "q6_K",
"STRATA_SERVE_LOOKUP": "14",
"STRATA_PRESTAGE_GIB": "1.5"
}
}
EOF
1. DeepSeek-V4.1 런처: $HOME/.local/bin/start-deepseek-custom.sh
cat << 'EOF' > "$HOME/.local/bin/start-deepseek-custom.sh"
#!/usr/bin/env bash
set -euo pipefail
MODEL_DIR="$HOME/models/deepseek-v41"
XOLOTL_DIR="$HOME/.local/llm-tools/Xolotl"
BASE_CONFIG="$MODEL_DIR/strata-v41.json"
RUN_CONFIG="$MODEL_DIR/strata-v41-run.json"
CTX="131072"
PORT="8000"
TEMP="0.1"
THINK_BUDGET="4096"
ARENA_GIB="80"
PASS_BIAS="0"
PROMPT_BATCH="12288"
usage() {
cat << USAGE
Usage: $(basename "$0") [options]
Options:
-c, --ctx INT 컨텍스트 길이 (기본값: 131072; 최대 1048576)
-p, --port INT 바인딩할 포트 (기본값: 8000)
-t, --temp FLOAT 샘플링 온도 (기본값: 0.1)
-b, --thinking INT 추론 예산 토큰 (기본값: 4096)
-a, --arena INT 고정 RAM 전문가 아레나 (GiB 단위, 기본값: 80)
--bias 0|1 라우팅 바이어스: 0=정확, 1=빠른 바이어스 (기본값: 0)
--batch INT 프롬프트 배치 크기 (기본값: 12288; 512k 이상일 경우 8192로 자동 고정)
-h, --help 도움말 표시
USAGE
exit 0
}
while [[ $# -gt 0 ]]; do
case "$1" in
-c|--ctx) CTX="$2"; shift 2 ;;
-p|--port) PORT="$2"; shift 2 ;;
-t|--temp) TEMP="$2"; shift 2 ;;
-b|--thinking) THINK_BUDGET="$2"; shift 2 ;;
-a|--arena) ARENA_GIB="$2"; shift 2 ;;
--bias) PASS_BIAS="$2"; shift 2 ;;
--batch) PROMPT_BATCH="$2"; shift 2 ;;
-h|--help) usage ;;
*) echo "Unknown option: $1" >&2; exit 1 ;;
esac
done
if [ "$CTX" -ge 524288 ] && [ "$PROMPT_BATCH" -gt 8192 ]; then
echo "[-] 대용량 컨텍스트 지정됨 ($CTX 토큰). 그래프 OOM 방지를 위해 --prompt-batch를 8192로 고정함."
PROMPT_BATCH=8192
fi
python3 - << PY
import json
with open("$BASE_CONFIG", "r") as f:
cfg = json.load(f)
cfg["port"] = int("$PORT")
cfg["max_context"] = int("$CTX")
cfg["reasoning_budget_tokens"] = int("$THINK_BUDGET")
cfg["sampling"]["temperature"] = float("$TEMP")
args = cfg.get("args", [])
def set_arg(flag, val):
for i in range(len(args) - 1):
if args[i] == flag:
args[i+1] = str(val)
return
args.extend([flag, str(val)])
set_arg("--ctx", "$CTX")
set_arg("--arena-gib", "$ARENA_GIB")
set_arg("--prompt-batch", "$PROMPT_BATCH")
cfg["args"] = args
env = cfg.setdefault("env", {})
env["STRATA_SERVE_PASS_BIAS"] = "$PASS_BIAS"
env["STRATA_PRESTAGE_GIB"] = "1.0" if int("$CTX") >= 524288 else "1.5"
with open("$RUN_CONFIG", "w") as f:
json.dump(cfg, f, indent=2)
PY
source "$HOME/.local/llm-tools/venv_hf/bin/activate"
cd "$XOLOTL_DIR"
echo "==> DeepSeek-V4.1-Flash (552B MoE) 실행 중..."
echo " Context : $CTX 토큰"
echo " Port : $PORT"
echo " Arena RAM : $ARENA_GIB GiB"
echo " Prompt Batch : $PROMPT_BATCH"
exec python3 tools/v41/serve/serve_ds41.py \
--engine strata \
--config "$RUN_CONFIG" \
--port "$PORT" \
--host 0.0.0.0
EOF
chmod +x "$HOME/.local/bin/start-deepseek-custom.sh"
2. Qwen3.8-Flash-Next 실행기: $HOME/.local/bin/start-qwen.sh
cat << 'EOF' > "$HOME/.local/bin/start-qwen.sh"
#!/usr/bin/env bash
set -euo pipefail
XOLOTL_DIR="$HOME/.local/llm-tools/Xolotl"
MODEL_DIR="$HOME/models/qwen-flash/pack-qfn45"
PORT="8099"
source "$HOME/.local/llm-tools/venv_hf/bin/activate"
cd "$XOLOTL_DIR"
echo "==> Qwen3.8-Flash-Next (125B MoE) 실행 중..."
exec python3 -m serve.server \
--engine strata \
--config "$MODEL_DIR/strata-qwen.json" \
--port "$PORT" \
--host 0.0.0.0
EOF
chmod +x "$HOME/.local/bin/start-qwen.sh"
# DeepSeek-V4.1-Flash를 :8000에서 시작 (기본 128k 컨텍스트, 1M 컨텍스트도 잘 돌아감)
$HOME/.local/bin/start-deepseek-custom.sh
아니면 Qwen3.8-Flash-Next를 :8099에서 시작 $HOME/.local/bin/start-qwen.sh
주요 댓글 r/localllama 작성자의 최적화 설정에 대한 높은 관심과 함께, 속도 수치 이면의 실제 성능과 지능 유지 여부에 대한 기술적 토론이 이어지고 있습니다.
8 와 대박, VRAM 24GB에 느릿한 DDR4 128GB만으로도 이걸 돌릴 수 있다고? 나도 아마 가능할 듯-
"쿼드 채널"
....항상 뭔가 걸리는 게 있네 :-/
11 젠장, 나도 DeepSeek Flash 4.1 1017 체크포인트로 35 tok/s 나오는데, 난 24GB GPU 4장에 8채널 512GB RAM 쓰고 있거든.
exl3.5bpw 양자화로 돌리는 중이긴 해.
10 근데 이게 실제로 제대로 작동하긴 하는 거야? 토큰/초 속도만 올리는 이런 글들에서 절대 답이 안 나오는 질문이지.
빠른 수학 계산에 관한 그 밈 어디 갔더라?
1 음, 이 서브레딧에서 그걸 확인하기란 어렵지. tok/s로 벤치마크하기는 아주 쉽거든.
지능이라... 그건 어떻게 측정할 수 있을까?
3
4 이게 strata 같은 거랑 비교하면 어떤지 혹시 확인해 봤어? 나도 3090 2장 쓰는 비슷한 환경인데 뭘 돌릴지 고민 중이라서.
2 Xolotl은 ds4.1이랑 Qwen을 특별 지원하려고 strata를 포크(fork)한 거야.
3 DeepSeek v4.1 flash 돌릴 때 PC를 실제로 쓸 수 있는 수준이야? 아니면 리소스가 엄청 빡빡해?
2 실제로 쓸만해. 근데 난 맥에서 연결해서 쓰고 있어.
2 이 설정으로 내 PC에서 552B DeepSeek-V4.1-Flash를 돌릴 수 있다니 미쳤네, 내일 당장 테스트해 봐야지.
1 너 지금 내 5090 + RTX 4000 조합보다 디코드 속도가 빨라. 내 설정도 개선할 수 있는지 네 세팅으로 테스트해 볼게.
1 단일 컨텍스트 슬롯이야, 아니면 병렬 에이전트도 돌릴 수 있어?
과도한 생각이나 루핑 없이 성공적으로 작업 완료
유출된 모델 샤드를 통해 Fable 5의 거대한 규모와 아키텍처를 분석하며 모델 복원 가능성을 논의하는 커뮤니티 반응.
유출된 모델 샤드를 통해 Fable 5의 거대한 규모와 아키텍처를 분석하며 모델 복원 가능성을 논의하는 커뮤니티 반응.
Gemini가 영어 대화 도중 갑자기 중국어를 출력하는 현상에 대해 사용자들이 원인을 분석하고 경험을 공유함.
Gemini가 영어 대화 도중 갑자기 중국어를 출력하는 현상에 대해 사용자들이 원인을 분석하고 경험을 공유함.
데이터 센터의 자원 부족을 풍자하는 게시물에 대해 샘 올트먼을 비꼬는 댓글들이 달리고 있습니다.
데이터 센터의 자원 부족을 풍자하는 게시물에 대해 샘 올트먼을 비꼬는 댓글들이 달리고 있습니다.