├── LICENSE.md ├── README.md ├── custom.css ├── data.json ├── fonts └── LibreFranklin-VF.woff2 ├── index.html ├── logo.svg ├── preview.png └── qa.js /LICENSE.md: -------------------------------------------------------------------------------- 1 | # MIT License 2 | 3 | Copyright (c) 2023 Nan Xiao 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Deep Learning GPU Selector 2 | 3 | Tool: 4 | 5 | Blog post: 6 | -------------------------------------------------------------------------------- /custom.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-display: swap; 3 | font-family: "Libre Franklin"; 4 | src: url("fonts/LibreFranklin-VF.woff2") format("woff2"); 5 | font-weight: 100 900; 6 | } 7 | 8 | :root { 9 | --tw-prose-font-heading: "Libre Franklin", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; 10 | --tw-prose-font-body: "Libre Franklin", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; 11 | } 12 | 13 | body { 14 | font-family: var(--tw-prose-font-body); 15 | background-color: #fefaef; 16 | } 17 | 18 | .h3 { 19 | font-family: var(--tw-prose-font-heading); 20 | font-weight: 700; 21 | } 22 | 23 | .lead, 24 | .btn, 25 | .footer { 26 | font-family: var(--tw-prose-font-body); 27 | font-weight: 400; 28 | } 29 | 30 | .lead { 31 | font-size: 1.5rem; 32 | color: #343a40; 33 | } 34 | 35 | .footer { 36 | font-size: 0.85rem; 37 | } 38 | 39 | .qa { 40 | min-height: 7rem; 41 | display: flex; 42 | justify-content: center; 43 | align-items: center; 44 | } 45 | 46 | a { 47 | color: #868e96; 48 | text-decoration: underline; 49 | text-decoration-color: #adb5bd; 50 | text-underline-offset: 0.35rem; 51 | background-color: transparent; 52 | transition: all .2s ease-in-out; 53 | } 54 | 55 | a:active, 56 | a:hover { 57 | outline-width: 0; 58 | } 59 | 60 | a:hover, 61 | a:focus { 62 | color: #343a40; 63 | text-decoration: underline; 64 | text-decoration-color: #343a40; 65 | } -------------------------------------------------------------------------------- /data.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "question": "Are you an organization?", 4 | "yes": { 5 | "question": "Do you train large language models (LLMs) with >= 13 billion parameters?", 6 | "yes": { 7 | "question": "Are you rich?", 8 | "yes": "Your best choice is Azure A100 or H100.", 9 | "no": { 10 | "question": "Are you not rich but also not poor?", 11 | "yes": "Your best choice is AWS A100 or H100.", 12 | "no": "Sorry, do something else." 13 | } 14 | }, 15 | "no": { 16 | "question": "Are you rich?", 17 | "yes": "Your best choice is H100 SXM.", 18 | "no": "Your best choice is 80% RTX 6000 Ada / L40, 20% H100 SXM / PCIe." 19 | } 20 | }, 21 | "no": { 22 | "question": "Do you plan to train models?", 23 | "yes": { 24 | "question": "Do you plan to train transformer models?", 25 | "yes": { 26 | "question": "Your best choice is RTX 4090. Is it within your budget?", 27 | "yes": "Your best choice is RTX 4090.", 28 | "no": { 29 | "question": "Your next best choice is used RTX 3090 or used RTX 3090 Ti. Are they within your budget?", 30 | "yes": "Your best choice is used RTX 3090 or used RTX 3090 Ti.", 31 | "no": "Sorry, do something else." 32 | } 33 | }, 34 | "no": { 35 | "question": "Your best choice is RTX 4080. Is it within your budget?", 36 | "yes": "Your best choice is RTX 4080.", 37 | "no": { 38 | "question": "Your next best choice is RTX 4070 Ti. Is it within your budget?", 39 | "yes": "Your best choice is RTX 4070 Ti.", 40 | "no": { 41 | "question": "Your next best choice is used RTX 2080 Ti. Is it within your budget?", 42 | "yes": "Your best choice is used RTX 2080 Ti.", 43 | "no": { 44 | "question": "Your next best choice is used RTX 3060. Is it within your budget?", 45 | "yes": "Your best choice is used RTX 3060.", 46 | "no": { 47 | "question": "Do you only work on small or streaming datasets?", 48 | "yes": "Your best choice is vast.ai or Lambda Cloud.", 49 | "no": "Complicated. Please read the entire blog post and decide based on that information." 50 | } 51 | } 52 | } 53 | } 54 | } 55 | }, 56 | "no": { 57 | "question": "Do you use large language models (LLMs)?", 58 | "yes": { 59 | "question": "Your best choice is RTX 4090. Is it within your budget?", 60 | "yes": "Your best choice is RTX 4090.", 61 | "no": { 62 | "question": "Your next best choice is used RTX 3090 or used RTX 3090 Ti. Are they within your budget?", 63 | "yes": "Your best choice is used RTX 3090 or used RTX 3090 Ti.", 64 | "no": { 65 | "question": "Do you only work on small or streaming datasets?", 66 | "yes": "Your best choice is vast.ai or Lambda Cloud.", 67 | "no": "Complicated. Please read the entire blog post and decide based on that information." 68 | } 69 | } 70 | }, 71 | "no": { 72 | "question": "Your best choice is RTX 4070 Ti or RTX 4080. Are they within your budget?", 73 | "yes": "Your best choice is RTX 4070 Ti or RTX 4080.", 74 | "no": { 75 | "question": "Your next best choice is used RTX 2080 Ti. Is it within your budget?", 76 | "yes": "Your best choice is used RTX 2080 Ti.", 77 | "no": { 78 | "question": "Your next best choice is used RTX 3060. Is it within your budget?", 79 | "yes": "Your best choice is used RTX 3060.", 80 | "no": { 81 | "question": "Do you only work on small or streaming datasets?", 82 | "yes": "Your best choice is vast.ai or Lambda Cloud.", 83 | "no": "Complicated. Please read the entire blog post and decide based on that information." 84 | } 85 | } 86 | } 87 | } 88 | } 89 | } 90 | } 91 | ] -------------------------------------------------------------------------------- /fonts/LibreFranklin-VF.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanxstats/gpu/d9a0fb3ebcf29058c65002f2c2a3547ffbcdb93e/fonts/LibreFranklin-VF.woff2 -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Deep Learning GPU Selector 8 | 9 | 10 | 11 | 12 | 14 | 15 | 16 | 17 | 18 | 19 | 21 | 22 | 23 | 24 | 25 | 26 | 29 | 33 | 34 | 35 | 36 | 37 | 38 |
39 |
40 | 41 | 42 |

Deep Learning GPU Selector

43 | 44 |
45 | 46 |
47 |
48 |
49 |
50 | 51 |
52 | 54 | 56 | 58 |
59 | 60 |
61 | 65 | 69 |
70 | 71 |
72 | 73 |
74 |
75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nanxstats/gpu/d9a0fb3ebcf29058c65002f2c2a3547ffbcdb93e/preview.png -------------------------------------------------------------------------------- /qa.js: -------------------------------------------------------------------------------- 1 | const init = () => { 2 | currentQuestion = questions[0]; 3 | document.getElementById("question").innerHTML = currentQuestion.question; 4 | document.getElementById("answer").innerHTML = ""; 5 | document.getElementById("answer").style.display = "none"; 6 | document.getElementById("yes").style.display = "inline-block"; 7 | document.getElementById("no").style.display = "inline-block"; 8 | document.getElementById("yes").onclick = () => next(true); 9 | document.getElementById("no").onclick = () => next(false); 10 | }; 11 | 12 | const next = (answer) => { 13 | if (typeof currentQuestion === "object") { 14 | currentQuestion = answer ? currentQuestion.yes : currentQuestion.no; 15 | } 16 | if (typeof currentQuestion === "string") { 17 | document.getElementById("question").innerHTML = ""; 18 | document.getElementById("answer").innerHTML = currentQuestion; 19 | document.getElementById("answer").style.display = "block"; 20 | document.getElementById("yes").style.display = "none"; 21 | document.getElementById("no").style.display = "none"; 22 | } else { 23 | document.getElementById("question").innerHTML = currentQuestion.question; 24 | } 25 | }; 26 | 27 | let questions; 28 | fetch("data.json") 29 | .then((response) => response.json()) 30 | .then((data) => { 31 | questions = data; 32 | init(); 33 | }); 34 | --------------------------------------------------------------------------------