Repository navigation
Conversation
|
Data point: RTX 2080 Ti 22GB (sm_75) + Skylake-X CPU — incl. comparison vs llama.cpp on the same box Hardware: i9-7980XE (18C/36T, quad-channel DDR4-3600, 125 GiB RAM), modded RTX 2080 Ti 22GB, Setup: Qwen3.8-Flash-Next GSQ-RCO IQ3_XXS, max-context 262144, KV int8 + --kv-resident 32768, Serve-log results:
Same-box comparison vs llama.cpp (FN tensor 3 cards: Q4_K_XL, 512K ctx, MTP n2, all three 2080 Tis): Build/install experience: smooth — zero source changes needed. Three notes that may help others:
CPU note for older Intel + Turing combos: Skylake-X has AVX-512F/BW but not VNNI/VBMI; Bonus: it also runs behind llama-swap on-demand — 48 s cold start, GPU fully released |
|
Thanks @hireymage. Part of this is in main now (the runtime floor from #81 in the 0.1.23 branch, and 0.1.22's sm_80 guard on the new prompt-attention kernel, which had broken sm_75 builds). Could you rebase onto main (0.1.22) so the rest of the Turing port is on top of that? |
e89bda3 to
f6a3328
Compare
|
Rebased onto main (0.1.22, a751715). Your 0.1.22 already covers the portable pre-sm_80 QSA scorer and the sm_80 guard on the prompt-attention kernel, so the rebased PR carries only the rest (+43/−20): the runtime floor ( Compiles clean for arch 75 (121/121, CUDA 12.6, Linux). Runtime verification from the 0.1.20 base (RTX 2070) stays valid for the parts the rebase kept: model loads, serving works, greedy output identical to the sm_120 build. Heads-up: #88 (pascal-sm61) is stacked on the old turing-sm75 and will need the same treatment once this settles. |
Follow-up to Niko1221#87 (Turing port, sm_75) - stacked on the rebased branch, so this sits on main 0.1.22 and carries only the Pascal delta. Runtime-guarded, so the sm_80+ path stays bit-identical. 1. Gemm::bf16 - cuBLAS has no BF16 GEMM below sm_80: convert bf16 operands to fp32 (lossless 16-bit shift) and run the same GEMM. Converted weights are cached per device pointer. On tight VRAM the cudaMalloc for a conversion used to exit(1); now it evicts the whole cache and retries (the 1080 Ti reached 5-13 MiB free with ~972 MiB of converted weights cached). 2. doorbell_wait_kernel / wait_flag_ge_kernel / wait_flag_ge_or_kernel - __nanosleep landed with Volta (sm_70); pre-sm_70 kernels spin with a bare __threadfence() instead. 3. GgufFile::open (Linux) - madvise(MADV_RANDOM) on the GGUF mapping; the ngram.hpp comment now documents the Linux/Windows split. 4. Floor 75 -> 61 in CMake, the runtime device check, and the setup.py GPU checks. Compiling for pre-sm_61 is still refused.
|
Follow-up on the rebase (f6a3328) from this box:
Porting note for other Linux users: since the rebase, the HTTP layer belongs to Happy to re-verify once this lands in main / 0.1.23. |
Rebased onto main (0.1.22): the portable pre-sm_80 QSA scorer and the sm_80 guard on the tensor-core prompt attention are already in main, so this is the rest of the port. - the runtime floor: device_info refuses anything older than compute capability 7 (main's runtime check still requires sm_120, so a binary built for sm_75 would never start), - fused_gr: the down kernel carries the tokens in slices that fit the card's shared-memory opt-in (Turing, 64 KB: 6-token slices; 4 tokens when the card reports no opt-in, under the 48 KB default), merged on top of main's per-device opt-in - full 8-token windows no longer fail on Turing with "invalid argument", - the setup/CMake floor is 7.5 (RTX 20 / 30 / 40 / 50) without an experimental flag: CMake's arch refusals, setup.py's gpu_problem and the GPU hints and error texts, - docs/MULTI_GPU.md says what a Turing card actually runs. Verified end-to-end on RTX 2070 (sm_75, 0.1.20 base): model loads, OpenAI/ Anthropic API serving works, greedy output identical to the sm_120 build.
f6a3328 to
f65eb9e
Compare
|
Rebased on v0.1.23 (cd97daf), so the branch now carries the batched verify window from #109 as well. Conflicts were small and both resolved on the rebased head:
Verified on Linux: configure + build for arch 75 (183/183, tests off), |
|
Thanks @hireymage, and @Adamyno for the 2080 Ti numbers. One fix: |
Rebased onto main (0.1.22): the portable pre-sm_80 QSA scorer and the sm_80 guard on the tensor-core prompt attention are already in main, so this is the rest of the port. - the runtime floor: device_info refuses anything older than compute capability 7 (main's runtime check still requires sm_120, so a binary built for sm_75 would never start), - fused_gr: the down kernel carries the tokens in slices that fit the card's shared-memory opt-in (Turing, 64 KB: 6-token slices; 4 tokens when the card reports no opt-in, under the 48 KB default), merged on top of main's per-device opt-in - full 8-token windows no longer fail on Turing with "invalid argument", - the setup/CMake floor is 7.5 (RTX 20 / 30 / 40 / 50) without an experimental flag: CMake's arch refusals, setup.py's gpu_problem and the GPU hints and error texts, - docs/MULTI_GPU.md says what a Turing card actually runs. Verified end-to-end on RTX 2070 (sm_75, 0.1.20 base): model loads, OpenAI/ Anthropic API serving works, greedy output identical to the sm_120 build. Merged (PR #87) with two changes: the runtime floor is 7.5 exactly (major*10+minor < 75; the PR let Volta 7.0/7.2 through), kept beside main's HIP check; and a card reporting no shared-memory opt-in slices the tokens to what fits the 48 KB default for its own tile (4 tokens on CUDA, all 8 with HIP's smaller tile, so gfx1100 keeps one launch). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0154bwiad8gY7wRehCXy27pN
|
Merged into 0.1.27 (released): your commit, under your name, rebased onto 0.1.26, with two changes. The runtime floor compares |
|
Verified on Tesla V100 (sm_70): current main No CUDA source changes were needed, and
This is consistent with my earlier V100 measurements (~47-52 tok/s), so I did not observe a performance regression. One caveat: I saw intermittent gcc/nvcc segfaults during highly parallel ( So for Volta, architecture-floor-only support passes: lowering the floor to sm_70 is sufficient on current main. The file exclusion from my #101 is no longer needed. |
|
Closing the loop: v0.1.27 (a790805) verified on this box (RTX 2080 Ti 22GB, CUDA 13.0, arch 75). Builds clean from main (STRATA_GGML_DIR route, zero source changes) and serves through our
The runtime-floor fix (major*10+minor >= 75) and the 48 KB tile slice both behave as |
Rebased onto main (0.1.22): the portable pre-sm_80 QSA scorer and the sm_80 guard on the tensor-core prompt attention are already in main, so this is the rest of the port. - the runtime floor: device_info refuses anything older than compute capability 7 (main's runtime check still requires sm_120, so a binary built for sm_75 would never start), - fused_gr: the down kernel carries the tokens in slices that fit the card's shared-memory opt-in (Turing, 64 KB: 6-token slices; 4 tokens when the card reports no opt-in, under the 48 KB default), merged on top of main's per-device opt-in - full 8-token windows no longer fail on Turing with "invalid argument", - the setup/CMake floor is 7.5 (RTX 20 / 30 / 40 / 50) without an experimental flag: CMake's arch refusals, setup.py's gpu_problem and the GPU hints and error texts, - docs/MULTI_GPU.md says what a Turing card actually runs. Verified end-to-end on RTX 2070 (sm_75, 0.1.20 base): model loads, OpenAI/ Anthropic API serving works, greedy output identical to the sm_120 build. Merged (PR Niko1221#87) with two changes: the runtime floor is 7.5 exactly (major*10+minor < 75; the PR let Volta 7.0/7.2 through), kept beside main's HIP check; and a card reporting no shared-memory opt-in slices the tokens to what fits the 48 KB default for its own tile (4 tokens on CUDA, all 8 with HIP's smaller tile, so gfx1100 keeps one launch).
Rebased onto main (0.1.22): the portable pre-sm_80 QSA scorer and the sm_80 guard on the tensor-core prompt attention are already in main, so this is the rest of the port. - the runtime floor: device_info refuses anything older than compute capability 7 (main's runtime check still requires sm_120, so a binary built for sm_75 would never start), - fused_gr: the down kernel carries the tokens in slices that fit the card's shared-memory opt-in (Turing, 64 KB: 6-token slices; 4 tokens when the card reports no opt-in, under the 48 KB default), merged on top of main's per-device opt-in - full 8-token windows no longer fail on Turing with "invalid argument", - the setup/CMake floor is 7.5 (RTX 20 / 30 / 40 / 50) without an experimental flag: CMake's arch refusals, setup.py's gpu_problem and the GPU hints and error texts, - docs/MULTI_GPU.md says what a Turing card actually runs. Verified end-to-end on RTX 2070 (sm_75, 0.1.20 base): model loads, OpenAI/ Anthropic API serving works, greedy output identical to the sm_120 build. Merged (PR Niko1221#87) with two changes: the runtime floor is 7.5 exactly (major*10+minor < 75; the PR let Volta 7.0/7.2 through), kept beside main's HIP check; and a card reporting no shared-memory opt-in slices the tokens to what fits the 48 KB default for its own tile (4 tokens on CUDA, all 8 with HIP's smaller tile, so gfx1100 keeps one launch). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0154bwiad8gY7wRehCXy27pN
… builds see STRATA_DP4A The int8 KV readers use STRATA_DP4A outside the GDN MMA block, but dp4a.hpp was only included inside it, and STRATA_POLY_GDN_MMA is defined only for the CUDA strata_poly_mmq target. A HIP build of kernels.cu (and the CUDA poly_attend_test target, which also lacks the define) failed with: identifier "STRATA_DP4A" is undefined. Reported by VecSzn in Niko1221#87. Checked on CUDA 12.8 (sm_60/61/75) by compiling poly_attend_test's kernels.cu.o: 2 errors before, clean after. Not built with hipcc (none available here). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The rest of the Turing port, rebased onto main (0.1.22).
What main already covers after the rebase (dropped from the PR):
What the PR adds on top (+43/−20, single commit):
device_inforefuses anything below compute capability 7 — main's runtime check still demands sm_120, so a binary built for sm_75 would never start,gpu_problemand the GPU hint/error texts, and docs/MULTI_GPU.md updated.Compiled clean for
CMAKE_CUDA_ARCHITECTURES=75(121/121, CUDA 12.6, Linux). Runtime verified end-to-end on an RTX 2070 (sm_75) at the 0.1.20 base: model loads, OpenAI/Anthropic serving works, greedy output identical to the sm_120 build.