mirror of
https://github.com/Niko1221/Strata.git
synced 2026-11-08 08:12:16 -10:00
CUDA engine selector: sm_MN machine code also covers a card sm_MK of the same major version with K >= N (CUDA cubin compatibility), so an RTX 40 card (sm_89) takes an sm_86 package; tests for the Qwen and DeepSeek packages; DeepSeek card text says RTX 30, 40 and 50
This commit is contained in:
1 parent
7dd5cf18e6
commit
b750d757f6
11 files changed
+62
-13
No files matched your search
+1
-1
@@ -174,7 +174,7 @@ Auch mit weniger RAM, als eine Zeile nennt, kann es funktionieren, nur langsamer
|
||||
|
||||
Ein deutlich größeres Modell, das auf einer Grafikkarte mit 12 GB und 46 bis 64 GB RAM läuft. Strata hält die meistgenutzten
|
||||
Teile im Speicher und liest den Rest von deiner SSD. [ISTA-DASLab](https://huggingface.co/ISTA-DASLab/DeepSeek-V4.1-Flash-1017-GSQ-RCO-GGUF)
|
||||
hat die Sets gebaut. Es läuft auf NVIDIA-RTX-Karten der Serien 30 bis 50 und auf der Radeon AI PRO R9700. Wähle es in
|
||||
hat die Sets gebaut. Es läuft auf NVIDIA-RTX-Karten der Serien 30, 40 und 50 und auf der Radeon AI PRO R9700. Wähle es in
|
||||
`strata launch`. Die Desktop-App bietet es noch nicht an.
|
||||
|
||||
| Set | Download | Qualität | Schreibt Code mit |
|
||||
|
||||
+1
-1
@@ -174,7 +174,7 @@ Con menos RAM de la que indica una fila también puede funcionar, solo que más
|
||||
|
||||
Un modelo mucho más grande que funciona con una sola tarjeta gráfica de 12 GB y de 46 a 64 GB de RAM. Strata mantiene en
|
||||
memoria las partes más usadas y lee el resto de tu SSD. [ISTA-DASLab](https://huggingface.co/ISTA-DASLab/DeepSeek-V4.1-Flash-1017-GSQ-RCO-GGUF)
|
||||
hizo los conjuntos. Funciona en tarjetas NVIDIA RTX de las series 30 a 50 y en la Radeon AI PRO R9700. Elígelo en
|
||||
hizo los conjuntos. Funciona en tarjetas NVIDIA RTX de las series 30, 40 y 50 y en la Radeon AI PRO R9700. Elígelo en
|
||||
`strata launch`. La aplicación de escritorio todavía no lo ofrece.
|
||||
|
||||
| Conjunto | Descarga | Calidad | Escribe código a |
|
||||
|
||||
+1
-1
@@ -174,7 +174,7 @@ Avoir moins de RAM que ce qu'indique une ligne peut encore fonctionner, en plus
|
||||
|
||||
Un modèle bien plus gros, qui tourne sur une seule carte graphique de 12 Go avec 46 à 64 Go de RAM. Strata garde en mémoire
|
||||
les parties les plus utilisées et lit le reste sur votre SSD. [ISTA-DASLab](https://huggingface.co/ISTA-DASLab/DeepSeek-V4.1-Flash-1017-GSQ-RCO-GGUF)
|
||||
a produit les versions. Il fonctionne sur les cartes NVIDIA RTX des séries 30 à 50 et sur la Radeon AI PRO R9700. Choisissez-le
|
||||
a produit les versions. Il fonctionne sur les cartes NVIDIA RTX des séries 30, 40 et 50 et sur la Radeon AI PRO R9700. Choisissez-le
|
||||
dans `strata launch`. L'application de bureau ne le propose pas encore.
|
||||
|
||||
| Version | Téléchargement | Qualité | Écrit du code à |
|
||||
|
||||
+1
-1
@@ -169,7 +169,7 @@ NVIDIA、AMD、Intel Arc、Apple Silicon で動きます。
|
||||
|
||||
ずっと大きなモデルで、12 GB のグラフィックスカード 1 枚と 46 から 64 GB の RAM で動きます。Strata はよく使う部分をメモリに置き、
|
||||
残りは SSD から読みます。セットは [ISTA-DASLab](https://huggingface.co/ISTA-DASLab/DeepSeek-V4.1-Flash-1017-GSQ-RCO-GGUF) が作りました。
|
||||
NVIDIA RTX 30 から 50 シリーズのカードと Radeon AI PRO R9700 で動きます。`strata launch` で選んでください。デスクトップアプリはまだ対応していません。
|
||||
NVIDIA RTX 30、40、50 シリーズのカードと Radeon AI PRO R9700 で動きます。`strata launch` で選んでください。デスクトップアプリはまだ対応していません。
|
||||
|
||||
| セット | ダウンロード | 品質 | コードの出力速度 |
|
||||
| --- | ---: | --- | --- |
|
||||
|
||||
@@ -169,7 +169,7 @@ Less RAM than a row says can still work, only slower: Strata switches to its
|
||||
|
||||
A much bigger model that runs on one 12 GB graphics card with 46 to 64 GB of RAM. Strata keeps the busiest parts in memory and
|
||||
reads the rest from your SSD. [ISTA-DASLab](https://huggingface.co/ISTA-DASLab/DeepSeek-V4.1-Flash-1017-GSQ-RCO-GGUF)
|
||||
made the sets. It runs on NVIDIA RTX 30 to 50 cards and the Radeon AI PRO R9700. Pick it in `strata launch`; the desktop
|
||||
made the sets. It runs on NVIDIA RTX 30, 40 and 50 cards and the Radeon AI PRO R9700. Pick it in `strata launch`; the desktop
|
||||
app does not offer it yet.
|
||||
|
||||
| Set | Download | Quality | Writes code at |
|
||||
|
||||
+1
-1
@@ -172,7 +172,7 @@ Com menos RAM do que a linha indica, ainda pode funcionar, só que mais devagar:
|
||||
|
||||
Um modelo bem maior, que roda numa única placa de vídeo de 12 GB com 46 a 64 GB de RAM. O Strata mantém na memória as partes mais
|
||||
usadas e lê o resto do seu SSD. A [ISTA-DASLab](https://huggingface.co/ISTA-DASLab/DeepSeek-V4.1-Flash-1017-GSQ-RCO-GGUF)
|
||||
fez os conjuntos. Ele roda em placas NVIDIA RTX das séries 30 a 50 e na Radeon AI PRO R9700. Escolha no `strata launch`. O
|
||||
fez os conjuntos. Ele roda em placas NVIDIA RTX das séries 30, 40 e 50 e na Radeon AI PRO R9700. Escolha no `strata launch`. O
|
||||
app de desktop ainda não o oferece.
|
||||
|
||||
| Conjunto | Download | Qualidade | Escreve código a |
|
||||
|
||||
+1
-1
@@ -166,7 +166,7 @@ Set up Strata on this PC for me: https://github.com/Niko1221/Strata - follow doc
|
||||
|
||||
一个大得多的模型,用一块 12 GB 显卡加 46 到 64 GB 内存就能运行。Strata 把最常用的部分留在内存里,其余的从你的固态硬盘读取。
|
||||
这些版本由 [ISTA-DASLab](https://huggingface.co/ISTA-DASLab/DeepSeek-V4.1-Flash-1017-GSQ-RCO-GGUF) 制作。它可在
|
||||
NVIDIA RTX 30 到 50 系列显卡和 Radeon AI PRO R9700 上运行。请在 `strata launch` 里选择它。桌面应用暂时不提供。
|
||||
NVIDIA RTX 30、40、50 系列显卡和 Radeon AI PRO R9700 上运行。请在 `strata launch` 里选择它。桌面应用暂时不提供。
|
||||
|
||||
| 版本 | 下载大小 | 质量 | 写代码速度 |
|
||||
| --- | ---: | --- | --- |
|
||||
|
||||
@@ -8054,7 +8054,7 @@ def install_dsv41(a, family, gpu, hip, amd, cuda_tk, multi, port, ram, adopted,
|
||||
if os.environ.get("STRATA_VERBOSE") == "1" or "--verbose" in sys.argv:
|
||||
say(" Details for developers: build it with cmake -DSTRATA_BUILD_DSV41=ON and point STRATA_DSV41_EXE at it.")
|
||||
fail("DeepSeek's engine is not available for this computer yet",
|
||||
"Supported graphics cards: NVIDIA RTX 30 and RTX 50 series, and the Radeon AI PRO R9700. " + dsv41_manual_steps(eng)
|
||||
"Supported graphics cards: NVIDIA RTX 30, 40 and 50 series, and the Radeon AI PRO R9700. " + dsv41_manual_steps(eng)
|
||||
+ " Or update Strata later (a newer version may add your card), or pick another model. Nothing has been downloaded.")
|
||||
ok(f"engine: {exe}")
|
||||
|
||||
|
||||
@@ -758,19 +758,28 @@ def nvidia_driver_version() -> str | None:
|
||||
return min(versions, key=_version_key) if versions else None
|
||||
|
||||
|
||||
def _capability(number: str) -> tuple[int, int]:
|
||||
"""``86`` -> (8, 6), ``120`` -> (12, 0): the last digit is the minor version."""
|
||||
return int(number[:-1] or 0), int(number[-1])
|
||||
|
||||
|
||||
def arch_covers(archs, present: list[str]) -> bool:
|
||||
"""Whether a build with `archs` (``sm_86`` = machine code for that card, ``compute_89`` = PTX that any card of
|
||||
that generation or newer can JIT) can run on at least one of the `present` cards (``sm_XX``)."""
|
||||
cards = {int(item[3:]) for item in present if item.startswith("sm_") and item[3:].isdigit()}
|
||||
that generation or newer can JIT) can run on at least one of the `present` cards (``sm_XX``).
|
||||
Machine code also runs on a card of the same major version with an equal or newer minor version (CUDA's cubin
|
||||
compatibility rule): ``sm_86`` code runs on an ``sm_89`` card (RTX 40) but not on ``sm_80`` (older minor),
|
||||
``sm_90`` (other major) or ``sm_75``; ``sm_120`` code runs on ``sm_121``."""
|
||||
cards = {item[3:] for item in present if item.startswith("sm_") and item[3:].isdigit()}
|
||||
if not cards:
|
||||
return True # cannot tell: not a refusal
|
||||
for arch in archs:
|
||||
kind, _, number = arch.partition("_")
|
||||
if not number.isdigit():
|
||||
continue
|
||||
if kind == "sm" and int(number) in cards:
|
||||
if kind == "sm" and any(number == card or (len(number) > 1 and len(card) > 1 and _capability(card)[0] == _capability(number)[0]
|
||||
and _capability(card)[1] >= _capability(number)[1]) for card in cards):
|
||||
return True
|
||||
if kind == "compute" and any(card >= int(number) for card in cards):
|
||||
if kind == "compute" and any(int(card) >= int(number) for card in cards):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
@@ -204,6 +204,46 @@ class Arch(unittest.TestCase):
|
||||
self.assertFalse(ec.arch_covers(["sm_75", "compute_89"], ["sm_86"]), "PTX never runs on an older card")
|
||||
self.assertTrue(ec.arch_covers(["sm_86"], []), "cannot tell: not a refusal")
|
||||
|
||||
def test_machine_code_runs_on_a_newer_minor_of_the_same_major(self):
|
||||
"""CUDA's cubin rule: sm_MN code runs on sm_MK when K >= N (an RTX 40 card, sm_89, runs sm_86 code)."""
|
||||
self.assertTrue(ec.arch_covers(["sm_86"], ["sm_89"]))
|
||||
self.assertTrue(ec.arch_covers(["sm_120"], ["sm_121"]))
|
||||
self.assertTrue(ec.arch_covers(["sm_86"], ["sm_86"]))
|
||||
self.assertTrue(ec.arch_covers(["sm_80"], ["sm_86"]))
|
||||
self.assertFalse(ec.arch_covers(["sm_86"], ["sm_80"]), "an older minor version is not covered")
|
||||
self.assertFalse(ec.arch_covers(["sm_86"], ["sm_90"]), "another major version is not covered")
|
||||
self.assertFalse(ec.arch_covers(["sm_86"], ["sm_75"]), "an older major version is not covered")
|
||||
self.assertFalse(ec.arch_covers(["sm_86"], ["sm_120"]), "Blackwell is another major version")
|
||||
self.assertFalse(ec.arch_covers(["sm_120"], ["sm_89"]))
|
||||
self.assertFalse(ec.arch_covers(["sm_89"], ["sm_100"]), "sm_100 is major 10, not major 1 + minor 00")
|
||||
self.assertTrue(ec.arch_covers(["sm_86", "sm_120"], ["sm_75", "sm_89"]), "one covered card is enough")
|
||||
|
||||
def test_the_packages_of_each_engine(self):
|
||||
"""The Qwen engine (sm_86 + PTX 89) and the DeepSeek engine (sm_86 + sm_120 + PTX 120) on the RTX 20 to 50 families."""
|
||||
from strata_control import feed
|
||||
|
||||
def package(archs):
|
||||
return feed.EnginePackage(version="0.1.49.1", platform="linux-x86_64", backend="cuda", variant="cuda13", archs=tuple(archs),
|
||||
min_driver={}, min_runtime=None, build_id="b", url="u", format="tar.gz", size=1, sha256="a" * 64,
|
||||
manifest_sha256="b" * 64, installed_bytes=1)
|
||||
|
||||
def fits(pkg, card):
|
||||
hw = {"platform": "linux-x86_64", "backend": "cuda", "cuda_archs": [card], "nvidia_driver": None}
|
||||
return not feed.engine_fit_reasons(pkg, hw)
|
||||
|
||||
qwen = package(["sm_86", "compute_89"])
|
||||
deepseek = package(["sm_86", "sm_120", "compute_120"])
|
||||
deepseek_89 = package(["sm_86", "sm_89", "sm_120", "compute_120"])
|
||||
for card, qwen_ok, deepseek_ok in (("sm_75", False, False), ("sm_86", True, True), ("sm_89", True, True), ("sm_90", True, False),
|
||||
("sm_120", True, True), ("sm_121", True, True)):
|
||||
with self.subTest(card=card):
|
||||
self.assertEqual(fits(qwen, card), qwen_ok, f"Qwen engine on {card}")
|
||||
self.assertEqual(fits(deepseek, card), deepseek_ok, f"DeepSeek engine on {card}")
|
||||
for card in ("sm_86", "sm_89", "sm_120", "sm_121"):
|
||||
self.assertTrue(fits(deepseek_89, card), card)
|
||||
self.assertFalse(fits(deepseek_89, "sm_90"), "H100 (sm_90) needs its own code or PTX 90")
|
||||
self.assertFalse(fits(deepseek_89, "sm_75"))
|
||||
|
||||
|
||||
class Start(unittest.TestCase):
|
||||
"""What a start checks: every file's hash (not only the entrypoint), the driver, the signature policy."""
|
||||
|
||||
@@ -229,7 +229,7 @@ class Install(unittest.TestCase):
|
||||
rc, out = self.install(engine=False)
|
||||
self.assertEqual(rc, 1, out)
|
||||
self.assertIn("DeepSeek's engine is not available for this computer yet", out)
|
||||
self.assertIn("RTX 30", out)
|
||||
self.assertIn("RTX 30, 40 and 50", out)
|
||||
self.assertNotIn("cmake", out)
|
||||
self.assertNotIn("STRATA_DSV41_EXE", out)
|
||||
self.assertIn("Nothing has been downloaded", out)
|
||||
|
||||
Reference in new issue
Block a user