From 56f39d26d038a45c80357dbec799dbc9f53d1c16 Mon Sep 17 00:00:00 2001 From: Hannes Zietsman Date: Thu, 4 Jun 2026 11:46:36 +0200 Subject: [PATCH 01/20] Mock up Host docs lifecycle IA --- docs.json | 134 +++++++++++++++++--------- host/account-hosting-agreement.mdx | 30 ++++++ host/common-errors-diagnostics.mdx | 24 +++++ host/common-host-questions.mdx | 53 ++++++++++ host/community.mdx | 23 +++++ host/datacenter-status.mdx | 5 +- host/docs-ia-proposal.mdx | 106 ++++++++++++++++++++ host/earning.mdx | 7 +- host/first-24-hours.mdx | 30 ++++++ host/fleet-operations.mdx | 29 ++++++ host/glossary.mdx | 28 ++++++ host/guide-to-taxes.mdx | 6 +- host/hardware-prep.mdx | 24 +++++ host/headless-install.mdx | 29 ++++++ host/hosting-agreement.mdx | 23 +++++ host/hosting-overview.mdx | 7 +- host/how-to-self-test.mdx | 4 + host/installing-host-software.mdx | 31 ++++++ host/maintenance-windows.mdx | 30 ++++++ host/market-metrics.mdx | 4 + host/network-ports.mdx | 31 ++++++ host/not-in-search.mdx | 30 ++++++ host/payment.mdx | 5 + host/persona-decision-guide.mdx | 30 ++++++ host/pricing-your-listing.mdx | 30 ++++++ host/quickstart.mdx | 28 ++++++ host/reliability-uptime.mdx | 30 ++++++ host/removing-recreating-machines.mdx | 30 ++++++ host/self-test-failure-reference.mdx | 32 ++++++ host/storage-setup.mdx | 30 ++++++ host/supported-hardware.mdx | 29 ++++++ host/understanding-verification.mdx | 7 +- host/verification-stages.mdx | 7 +- host/vms.mdx | 7 +- host/workload-policy.mdx | 23 +++++ 35 files changed, 922 insertions(+), 54 deletions(-) create mode 100644 host/account-hosting-agreement.mdx create mode 100644 host/common-errors-diagnostics.mdx create mode 100644 host/common-host-questions.mdx create mode 100644 host/community.mdx create mode 100644 host/docs-ia-proposal.mdx create mode 100644 host/first-24-hours.mdx create mode 100644 host/fleet-operations.mdx create mode 100644 host/glossary.mdx create mode 100644 host/hardware-prep.mdx create mode 100644 host/headless-install.mdx create mode 100644 host/hosting-agreement.mdx create mode 100644 host/installing-host-software.mdx create mode 100644 host/maintenance-windows.mdx create mode 100644 host/network-ports.mdx create mode 100644 host/not-in-search.mdx create mode 100644 host/persona-decision-guide.mdx create mode 100644 host/pricing-your-listing.mdx create mode 100644 host/quickstart.mdx create mode 100644 host/reliability-uptime.mdx create mode 100644 host/removing-recreating-machines.mdx create mode 100644 host/self-test-failure-reference.mdx create mode 100644 host/storage-setup.mdx create mode 100644 host/supported-hardware.mdx create mode 100644 host/workload-policy.mdx diff --git a/docs.json b/docs.json index 1956f758..6ad09e47 100644 --- a/docs.json +++ b/docs.json @@ -587,70 +587,110 @@ "tab": "Host", "groups": [ { - "group": "Concepts", - "icon": "lightbulb", + "group": "Decide", + "icon": "compass", "pages": [ + "host/docs-ia-proposal", "host/hosting-overview", - "host/understanding-verification", - "host/earning" + "host/supported-hardware", + "host/persona-decision-guide", + "host/earning", + "host/guide-to-taxes" + ] + }, + { + "group": "Set Up", + "icon": "wrench", + "pages": [ + "host/quickstart", + "host/account-hosting-agreement", + "host/hardware-prep", + "host/storage-setup", + "host/network-ports", + "host/installing-host-software", + "host/headless-install", + "host/vms" ] }, { - "group": "Guides", - "icon": "warehouse", + "group": "Verify & List", + "icon": "badge-check", "pages": [ "host/verification-stages", + "host/understanding-verification", "host/how-to-self-test", "host/market-metrics", - "host/datacenter-status", - "host/payment", - "host/guide-to-taxes", - "host/vms" + "host/self-test-failure-reference", + "host/pricing-your-listing", + "host/not-in-search" ] }, { - "group": "CLI", - "icon": "terminal", + "group": "Operate", + "icon": "activity", "pages": [ - "host/cli/cleanup-machine", - "host/cli/delete-machine", - "host/cli/list-machine", - "host/cli/list-machines", - "host/cli/show-machine", - "host/cli/show-machines", - "host/cli/set-defjob", - "host/cli/remove-defjob", - "host/cli/set-min-bid", - "host/cli/schedule-maint", - "host/cli/cancel-maint", - "host/cli/show-maints", - "host/cli/unlist-machine", - "host/cli/defrag-machines", - "host/cli/self-test-machine", - "host/cli/metrics-gpu", - "host/cli/metrics-gpu-trends", - "host/cli/metrics-gpu-locations" + "host/first-24-hours", + "host/reliability-uptime", + "host/maintenance-windows", + "host/removing-recreating-machines", + "host/fleet-operations", + "host/common-errors-diagnostics", + "host/datacenter-status", + "host/payment", + "host/workload-policy" ] }, { - "group": "SDK", - "icon": "python", + "group": "Reference", + "icon": "book-open", "pages": [ - "host/sdk/cleanup-machine", - "host/sdk/delete-machine", - "host/sdk/list-machine", - "host/sdk/list-machines", - "host/sdk/show-machine", - "host/sdk/show-machines", - "host/sdk/set-defjob", - "host/sdk/remove-defjob", - "host/sdk/set-min-bid", - "host/sdk/schedule-maint", - "host/sdk/cancel-maint", - "host/sdk/show-maints", - "host/sdk/unlist-machine", - "host/sdk/defrag-machines", - "host/sdk/self-test-machine" + "host/common-host-questions", + "host/glossary", + "host/hosting-agreement", + "host/community", + { + "group": "CLI Reference", + "pages": [ + "host/cli/cleanup-machine", + "host/cli/delete-machine", + "host/cli/list-machine", + "host/cli/list-machines", + "host/cli/show-machine", + "host/cli/show-machines", + "host/cli/set-defjob", + "host/cli/remove-defjob", + "host/cli/set-min-bid", + "host/cli/schedule-maint", + "host/cli/cancel-maint", + "host/cli/show-maints", + "host/cli/unlist-machine", + "host/cli/defrag-machines", + "host/cli/self-test-machine", + "host/cli/metrics-gpu", + "host/cli/metrics-gpu-trends", + "host/cli/metrics-gpu-locations" + ] + }, + { + "group": "SDK Reference", + "pages": [ + "host/sdk/cleanup-machine", + "host/sdk/delete-machine", + "host/sdk/list-machine", + "host/sdk/list-machines", + "host/sdk/show-machine", + "host/sdk/show-machines", + "host/sdk/set-defjob", + "host/sdk/remove-defjob", + "host/sdk/set-min-bid", + "host/sdk/schedule-maint", + "host/sdk/cancel-maint", + "host/sdk/show-maints", + "host/sdk/unlist-machine", + "host/sdk/defrag-machines", + "host/sdk/self-test-machine" + ] + } ] } ] diff --git a/host/account-hosting-agreement.mdx b/host/account-hosting-agreement.mdx new file mode 100644 index 00000000..c99fba17 --- /dev/null +++ b/host/account-hosting-agreement.mdx @@ -0,0 +1,30 @@ +--- +title: "Account & Hosting Agreement" +sidebarTitle: "Account & Agreement" +description: "Host account conversion and agreement flow." +"canonical": "/host/account-hosting-agreement" +--- + +Status: mockup placeholder. + +Personas: General Pro Operator, Headless Operator, Business Owner, Hobbyist. + +Stage: Set Up. + +## Purpose + +Separate account setup from machine setup so support can link directly to host conversion issues. + +## Addresses + +- Machines tab not visible. +- Client account used as a host account. +- Agreement loops or conversion confusion. +- Deprecated or stale setup links. + +## Proposed Content + +- When to create a new host account. +- How to accept the hosting agreement. +- How to confirm the account is host-enabled. +- Symptoms and fixes for common account-state problems. diff --git a/host/common-errors-diagnostics.mdx b/host/common-errors-diagnostics.mdx new file mode 100644 index 00000000..7f3e321e --- /dev/null +++ b/host/common-errors-diagnostics.mdx @@ -0,0 +1,24 @@ +--- +title: "Common Errors & Diagnostics" +sidebarTitle: "Errors & Diagnostics" +description: "Common host errors and diagnostic collection paths." +"canonical": "/host/common-errors-diagnostics" +--- + +Status: mockup placeholder. + +Personas: General Pro Operator, Headless Operator. + +Stage: Operate. + +## Purpose + +Create a steady-state troubleshooting home for errors that are not install, network, or self-test specific. + +## Proposed Content + +- Diagnostic bundle handoff. +- `kaalia` logs. +- Docker and NVIDIA runtime checks. +- Common machine error references. +- Links to focused pages when a symptom has a better home. diff --git a/host/common-host-questions.mdx b/host/common-host-questions.mdx new file mode 100644 index 00000000..bf78f79e --- /dev/null +++ b/host/common-host-questions.mdx @@ -0,0 +1,53 @@ +--- +title: "Common Host Questions" +sidebarTitle: "Common Questions" +description: "Index of common host questions and the lifecycle pages that should answer them." +"canonical": "/host/common-host-questions" +--- + +Status: mockup placeholder. + +Personas: General Pro Operator, Headless Operator, Business Owner, Hobbyist. + +Stage: Reference. + +## Purpose + +Give CON-1517 a lightweight index for common host questions while the real answers live on focused lifecycle pages. + +This page should be written from the CON-1517 Crisp buckets, then filled using vetted wiki material where it matches current Vast behavior. + +## Question Map + +| Common question | Primary page | Supporting pages | +| --- | --- | --- | +| I am new and want to host. What is the ordered path? | [Hosting Quickstart](/host/quickstart) | [Account & Hosting Agreement](/host/account-hosting-agreement), [Installing the Vast Host Software](/host/installing-host-software) | +| Will my GPU, OS, or machine work on Vast? | [Supported Hardware](/host/supported-hardware) | [Hardware Prep](/host/hardware-prep), [VMs & IOMMU](/host/vms) | +| Why did the host install script fail, hang, or produce a bad daemon binary? | [Installing the Vast Host Software](/host/installing-host-software) | [Hardware Prep](/host/hardware-prep), [Storage Setup](/host/storage-setup) | +| What ports do I need, and what if I am behind CGNAT, Starlink, or IPv6-only networking? | [Network & Ports](/host/network-ports) | [Self-Test Failure Reference](/host/self-test-failure-reference), [Understanding Verification](/host/understanding-verification) | +| What does this self-test or verification error mean? | [Self-Test Failure Reference](/host/self-test-failure-reference) | [How to Self-Test](/host/how-to-self-test), [Verification Stages](/host/verification-stages) | +| Why does Docker or NVIDIA runtime say no GPU is available? | [Common Errors & Diagnostics](/host/common-errors-diagnostics) | [Hardware Prep](/host/hardware-prep), [Self-Test Failure Reference](/host/self-test-failure-reference) | +| How should I set up NVMe, XFS, RAID, or Docker storage? | [Storage Setup](/host/storage-setup) | [Installing the Vast Host Software](/host/installing-host-software) | +| Why did reliability drop, or what should I monitor after listing? | [Reliability & Uptime](/host/reliability-uptime) | [First 24 Hours After Install](/host/first-24-hours), [Maintenance Windows](/host/maintenance-windows) | +| Why is my machine not in search after setup? | [Why Isn't My Machine in Search?](/host/not-in-search) | [Understanding Verification](/host/understanding-verification), [Pricing Your Listing](/host/pricing-your-listing) | +| How do I get paid or understand earnings? | [Host Payouts](/host/payment) | [Earnings & Pricing Model](/host/earning), [Pricing Your Listing](/host/pricing-your-listing) | +| How do I remove, recreate, or replace a host machine? | [Removing or Recreating Machines](/host/removing-recreating-machines) | [Common Errors & Diagnostics](/host/common-errors-diagnostics) | + +## Wiki Seed Inputs + +| Source file | Best use in the docs layout | +| --- | --- | +| `host-setup-guide.md` | Quickstart, Hardware Prep, Install Host Software, Network & Ports, Storage Setup, Reliability & Uptime | +| `vast-networking-ports.md` | Network & Ports, Self-Test Failure Reference, Why Isn't My Machine in Search? | +| `vast-self-test-guide.md` | How to Self-Test, Self-Test Failure Reference, Understanding Verification | +| `troubleshooting-guide.md` | Common Errors & Diagnostics, Reliability & Uptime, Hardware Prep, Network & Ports | +| `common-errors.md` | Self-Test Failure Reference, Common Errors & Diagnostics, Machine Error Reference follow-up | +| `nvme-setup-for-vast.md` | Storage Setup, Installing the Vast Host Software | +| `nvidia-driver-guide.md` | Hardware Prep, Common Errors & Diagnostics, Self-Test Failure Reference | + +## Production Notes + +- Keep this page as an index, not the only answer. +- Use it to route support, operators, and agents to the right focused page. +- Verify wiki-derived commands and thresholds before moving content into production docs. +- Keep raw Crisp chat text internal; publish cleaned, paraphrased questions and current guidance. diff --git a/host/community.mdx b/host/community.mdx new file mode 100644 index 00000000..55358a97 --- /dev/null +++ b/host/community.mdx @@ -0,0 +1,23 @@ +--- +title: "Discord & Community" +sidebarTitle: "Discord & Community" +description: "Where hosts can get community help and what to expect." +"canonical": "/host/community" +--- + +Status: mockup placeholder. + +Personas: General Pro Operator, Headless Operator, Business Owner, Hobbyist. + +Stage: Reference. + +## Purpose + +Set expectations for community help and reduce support requests for machine-specific setup. + +## Proposed Content + +- How to join host-only Discord channels. +- What details to include when asking for help. +- Response-time expectations. +- Reminder that Vast does not provide hands-on machine setup support. diff --git a/host/datacenter-status.mdx b/host/datacenter-status.mdx index 9b93c4df..759bf4f6 100644 --- a/host/datacenter-status.mdx +++ b/host/datacenter-status.mdx @@ -6,6 +6,10 @@ updatedAt: Tue Jul 08 2025 20:21:58 GMT+0000 (Coordinated Universal Time) --- +Personas: Headless Operator, Business Owner. + +Stage: Operate. + Equipment that is in a certified datacenter on Vast.ai is eligible to be included in the "Secure Cloud" offering and receive other benefits, such as the blue datacenter label. Individual certifications will eventually be highlighted so users can understand if a given host is compliant with HIPAA, GDPR, TIER 2/3 or ISO 27001. Users typically are willing to pay more for the security and reliability that comes with equipment that is in a proper facility. Read through this documentation to understand the minimum requirements for becoming a datacenter partner and the specific verification steps that we will take to ensure compliance. @@ -40,4 +44,3 @@ In order to apply, you will need to first gather the required documentation: - Other due dilligence documentation as required Once you have the requiremed documentation, To apply please visit: [https://vast.ai/data-center-application](https://vast.ai/data-center-application) - diff --git a/host/docs-ia-proposal.mdx b/host/docs-ia-proposal.mdx new file mode 100644 index 00000000..781105cb --- /dev/null +++ b/host/docs-ia-proposal.mdx @@ -0,0 +1,106 @@ +--- +title: "Host Docs IA Proposal" +sidebarTitle: "IA Proposal" +description: "Mockup of the proposed Host docs lifecycle layout and rollout plan." +"canonical": "/host/docs-ia-proposal" +--- + +Personas: General Pro Operator, Headless Operator, Business Owner, Hobbyist. + +Stage: Decide. + +This mockup reorganizes Host docs by the host lifecycle: + +```text +Decide -> Set Up -> Verify & List -> Operate -> Reference +``` + +The goal is to make the sidebar answer "where am I in the hosting journey?" instead of "what type of document is this?" + +## Persona Convention + +Each page should name its primary reader lanes near the top of the page: + +| Tag | Reader | +| --- | --- | +| General Pro Operator | Linux-comfortable host operator | +| Headless Operator | Datacenter or fleet operator using SSH/BMC workflows | +| Business Owner | Listing, pricing, purchasing, and payout decision maker | +| Hobbyist | First-time or low-infra host | + +This mockup uses text tags in the page body. Visual sidebar chips would require product/Mintlify customization and should not block the docs IA work. + +## Observations Addressed + +| Observation | IA response | +| --- | --- | +| Hosts do not know what to read next | Add a numbered quickstart and lifecycle stages | +| `hosting-overview.mdx` is an omnibus | Split it into journey pages with stable URLs | +| Support repeats the same answers | Create one topic per common support bucket | +| Self-test and verification errors are hard to decode | Give each failure class its own reference anchor | +| Personas have different needs | Keep one IA, but tag pages by persona | +| Agent retrieval needs stable targets | Use short pages, clear headings, and one topic per page | + +## What This Branch Can Address + +| Proposal item | Can be addressed in `vast-ai/docs`? | Mockup approach | +| --- | --- | --- | +| Reorganize Host sidebar by lifecycle | Yes | `docs.json` now uses Decide, Set Up, Verify & List, Operate, and Reference | +| Tag every page by persona | Yes | Pages use a text convention near the top: Personas and Stage | +| Split `hosting-overview.mdx` | Yes | New per-step pages are represented; actual content migration should happen in follow-up PRs | +| Prioritize P0/P1/P2 backlog | Yes | New placeholder pages are grouped by lifecycle and can be filled in priority order | +| Make Supported Hardware a top prevention doc | Yes | Supported Hardware is in Decide before broader expectation-setting pages | +| Make support answers linkable | Yes | Each common support bucket gets a stable page path and headings | +| Make docs agent-friendly | Yes | One topic per page, stable URLs, and explicit observation/purpose sections | +| Move CLI and SDK out of the main host journey | Yes | CLI and SDK live under Reference so lifecycle pages come first | +| Add a CON-1517 common-question entry point | Yes | Reference now includes Common Host Questions, which routes recurring questions to focused lifecycle pages | + +## What Needs Product, Backend, Or Data Work + +| Need | Why docs alone cannot finish it | +| --- | --- | +| Visual persona chips in the sidebar | Mintlify sidebar entries are configured in `docs.json`; custom chips/filters would require Mintlify customization or frontend/product work | +| Dynamic persona paths such as "show me the Hobbyist track" | Requires navigation/filter UI beyond static docs configuration | +| Live verification queue position or GPU-tier wait times | Requires backend/product data exposure before docs can show exact status | +| CLI deep-links from runtime error output to anchors | Requires CLI changes after the docs anchors are approved | +| Exact vericode glossary values and machine error catalog | Requires authoritative backend/ops source of truth | +| Full install-guide validation | Requires access to real target hardware with BMC/IPMI or equivalent remote install access | +| Crisp-derived reporting links inside public docs | Support-data artifacts are internal; public docs should cite conclusions, not expose raw support sessions | + +## Child Ticket Mapping + +| Ticket/workstream | Sidebar destination | Review note | +| --- | --- | --- | +| CON-1518 IA restructure | This mockup | Approve or adjust stage names before production content PRs | +| CON-1516 Supported Hardware | Decide -> Supported Hardware | Treat as prevention-first P0, even if volume is lower than installer/self-test | +| CON-1256 Listing Optimization | Decide -> Earnings & Pricing Model; Verify & List -> Pricing Your Listing | Should be elevated because pricing, payouts, and listing optimization are currently scattered | +| CON-1515 Verification / Self-test Reference | Verify & List -> Understanding Verification; Self-Test Failure Reference | Keep verification concepts separate from error-string/failure lookup | +| CON-1077 Headless Hosting Guide | Set Up -> Headless Install Path; Operate -> Fleet Operations | Absorb into lifecycle pages instead of creating a parallel persona-only sidebar | +| CON-1517 Common Questions | Reference -> Common Host Questions; Set Up, Verify & List, and Operate topic pages | Use the Crisp buckets to pick P0/P1/P2 pages; use the common-question index only as a router | +| CON-1397 Host Installer investigation | Set Up -> Installing the Vast Host Software | Turn installer findings into the main install troubleshooting page | +| CON-1531 Machine Error Reference | Operate -> Common Errors & Diagnostics; Reference -> Glossary | Needs authoritative error-code/source-of-truth input before it can be complete | + +## CON-1517 Wiki Seed Coverage + +The CON-1517 Crisp analysis is already enough to prioritize topics. The existing wiki can seed first-pass content, but the production docs should still verify commands, thresholds, and current product behavior before publishing. + +| Wiki seed file | Target docs pages | +| --- | --- | +| `host-setup-guide.md` | Hosting Quickstart, Hardware Prep, Installing the Vast Host Software, Network & Ports, Storage Setup, Reliability & Uptime | +| `vast-networking-ports.md` | Network & Ports, Self-Test Failure Reference, Why Isn't My Machine in Search? | +| `vast-self-test-guide.md` | How to Self-Test, Self-Test Failure Reference, Understanding Verification | +| `troubleshooting-guide.md` | Common Errors & Diagnostics, Reliability & Uptime, Hardware Prep, Network & Ports | +| `common-errors.md` | Self-Test Failure Reference, Common Errors & Diagnostics, Machine Error Reference follow-up | +| `nvme-setup-for-vast.md` | Storage Setup, Installing the Vast Host Software | +| `nvidia-driver-guide.md` | Hardware Prep, Common Errors & Diagnostics, Self-Test Failure Reference | + +## Rollout Recommendation + +1. Approve or modify the lifecycle group names. +2. Keep this branch as an IA mockup, not a production content PR. +3. Use Common Host Questions as the CON-1517 routing/index page, then write P0 pages in separate PRs: Supported Hardware, Install Host Software, Network & Ports, Self-Test Failures, Account & Agreement, Quickstart, Verification expansion, and Host Payouts. +4. Add CLI/backend follow-up tickets only after the target anchors are accepted. + +## Review Decision + +Approve the lifecycle sidebar as the default Host IA, or modify the stage names before the P0 pages are written. diff --git a/host/earning.mdx b/host/earning.mdx index 188802c4..649c5b04 100644 --- a/host/earning.mdx +++ b/host/earning.mdx @@ -1,5 +1,6 @@ --- -title: Earning +title: "Earnings & Pricing Model" +sidebarTitle: "Earnings Model" slug: 9Ci2RCeCAEPKRT8fcy_2S createdAt: Tue Jan 14 2025 00:55:36 GMT+0000 (Coordinated Universal Time) updatedAt: Tue Aug 05 2025 19:10:27 GMT+0000 (Coordinated Universal Time) @@ -7,6 +8,10 @@ updatedAt: Tue Aug 05 2025 19:10:27 GMT+0000 (Coordinated Universal Time) --- +Personas: Business Owner. + +Stage: Decide. + ## Overview This page in the console allows you to manage your earnings from referrals. You can find more information about Vast's referral program [here](/guides/reference/referral-program). diff --git a/host/first-24-hours.mdx b/host/first-24-hours.mdx new file mode 100644 index 00000000..36c492be --- /dev/null +++ b/host/first-24-hours.mdx @@ -0,0 +1,30 @@ +--- +title: "First 24 Hours After Install" +sidebarTitle: "First 24 Hours" +description: "Expectations after a host first installs and lists a machine." +"canonical": "/host/first-24-hours" +--- + +Status: mockup placeholder. + +Personas: Hobbyist, General Pro Operator. + +Stage: Operate. + +## Purpose + +Set expectations for the period after install, before a host understands normal platform behavior. + +## Addresses + +- "What now?" after listing. +- First rental confusion. +- Early reliability movement. +- Watching logs without overreacting. + +## Proposed Content + +- What should happen immediately. +- What can take time. +- What is normal versus suspicious. +- Where to watch machine status and logs. diff --git a/host/fleet-operations.mdx b/host/fleet-operations.mdx new file mode 100644 index 00000000..bdc048bc --- /dev/null +++ b/host/fleet-operations.mdx @@ -0,0 +1,29 @@ +--- +title: "Fleet Operations" +sidebarTitle: "Fleet Operations" +description: "Multi-machine host operations and monitoring concepts." +"canonical": "/host/fleet-operations" +--- + +Status: mockup placeholder. + +Personas: Headless Operator, Business Owner. + +Stage: Operate. + +## Purpose + +Reserve a home for larger datacenter and multi-machine workflows. + +## Addresses + +- Thin but high-value headless/fleet operator needs. +- Bulk maintenance and monitoring. +- Consistent setup across many hosts. + +## Proposed Content + +- Fleet assumptions. +- Bulk operation links. +- Monitoring checklist. +- When to automate versus use console workflows. diff --git a/host/glossary.mdx b/host/glossary.mdx new file mode 100644 index 00000000..36c6b682 --- /dev/null +++ b/host/glossary.mdx @@ -0,0 +1,28 @@ +--- +title: "Host Glossary" +sidebarTitle: "Glossary" +description: "Definitions for host-facing Vast terms." +"canonical": "/host/glossary" +--- + +Status: mockup placeholder. + +Personas: General Pro Operator, Headless Operator, Business Owner, Hobbyist. + +Stage: Reference. + +## Purpose + +Give support, docs, and agents one place to resolve host terminology. + +## Proposed Terms + +- `vericode` +- `dlperf` +- `direct_port_count` +- reliability +- verification +- rental contract +- offer +- machine ID +- deverified diff --git a/host/guide-to-taxes.mdx b/host/guide-to-taxes.mdx index 81b388e1..d87d4968 100644 --- a/host/guide-to-taxes.mdx +++ b/host/guide-to-taxes.mdx @@ -5,6 +5,10 @@ updatedAt: "Wed Jan 15 2025 00:36:52 GMT+0000 (Coordinated Universal Time)" canonical: "/host/guide-to-taxes" --- +Personas: Business Owner. + +Stage: Decide. + **Disclaimer:** As an independent contractor, you are solely responsible for tracking your earnings and accurately reporting them in your tax filings. Vast.ai cannot provide tax advice, and we cannot verify the accuracy of any publicly available tax guidance. If you have questions about your tax obligations, please consult a tax professional. **Important:** Vast.ai does not automatically withhold taxes. @@ -41,4 +45,4 @@ Vast.ai is based in California and does not currently collect or remit VAT. ### Is VAT shown on invoices? -VAT is not currently specified on Vast.ai invoices. \ No newline at end of file +VAT is not currently specified on Vast.ai invoices. diff --git a/host/hardware-prep.mdx b/host/hardware-prep.mdx new file mode 100644 index 00000000..90e4bb8d --- /dev/null +++ b/host/hardware-prep.mdx @@ -0,0 +1,24 @@ +--- +title: "Hardware Prep" +sidebarTitle: "Hardware Prep" +description: "Ubuntu, BIOS, NVIDIA driver, and host preparation checklist." +"canonical": "/host/hardware-prep" +--- + +Status: mockup placeholder. + +Personas: General Pro Operator, Headless Operator. + +Stage: Set Up. + +## Purpose + +Collect pre-install hardware and OS prep that is currently scattered across setup and troubleshooting guidance. + +## Proposed Content + +- Ubuntu version expectations. +- BIOS and virtualization settings. +- NVIDIA driver and CUDA driver-stack expectations. +- Auto-update warnings. +- Thermal, power, and stability checks. diff --git a/host/headless-install.mdx b/host/headless-install.mdx new file mode 100644 index 00000000..4e2f1d2b --- /dev/null +++ b/host/headless-install.mdx @@ -0,0 +1,29 @@ +--- +title: "Headless Install Path" +sidebarTitle: "Headless Install" +description: "SSH-only and datacenter-friendly host setup path." +"canonical": "/host/headless-install" +--- + +Status: mockup placeholder. + +Personas: Headless Operator. + +Stage: Set Up. + +## Purpose + +Make the SSH/BMC path explicit for operators who do not use local displays or keyboards. + +## Addresses + +- CON-1077 headless guide scope. +- Fleet or datacenter installs. +- "Docker works with GPUs, now what?" operator confusion. + +## Proposed Content + +- Assumptions for SSH-only setup. +- BMC/IPMI/PXE notes. +- Non-interactive install considerations. +- Post-install checks that do not require a GUI. diff --git a/host/hosting-agreement.mdx b/host/hosting-agreement.mdx new file mode 100644 index 00000000..2dc2fbdb --- /dev/null +++ b/host/hosting-agreement.mdx @@ -0,0 +1,23 @@ +--- +title: "Hosting Agreement" +sidebarTitle: "Hosting Agreement" +description: "Reference page for the host agreement and related expectations." +"canonical": "/host/hosting-agreement" +--- + +Status: mockup placeholder. + +Personas: General Pro Operator, Headless Operator, Business Owner, Hobbyist. + +Stage: Reference. + +## Purpose + +Give the Host sidebar a stable page for agreement-related links and explanations. + +## Proposed Content + +- Link to the canonical agreement in the console. +- Plain-language explanation of host commitments. +- Data isolation and contract expectations. +- Related account setup page. diff --git a/host/hosting-overview.mdx b/host/hosting-overview.mdx index 5589bdf8..87702d5b 100644 --- a/host/hosting-overview.mdx +++ b/host/hosting-overview.mdx @@ -1,5 +1,6 @@ --- title: "Hosting Overview" +sidebarTitle: "Hosting Overview" slug: "xP4AEPJl2F6woPGcD7EWl" createdAt: "Tue Jan 14 2025 01:09:17 GMT+0000 (Coordinated Universal Time)" updatedAt: "Fri Jul 11 2025 22:44:42 GMT+0000 (Coordinated Universal Time)" @@ -7,6 +8,10 @@ updatedAt: "Fri Jul 11 2025 22:44:42 GMT+0000 (Coordinated Universal Time)" --- +Personas: General Pro Operator, Headless Operator, Business Owner, Hobbyist. + +Stage: Decide. + Vast is a GPU marketplace. Hosts sell GPU resources on the marketplace. Hosts are responsible for: - Setup: installing Ubuntu, creating disk partitions, installing NVIDIA drivers, opening network ports on the router and installing the Vast hosting software. @@ -312,4 +317,4 @@ If your machine seems unlisted, try this command `vastai search offers 'machine ### Why can't I see my machine on the Search page in the console? -There are over 10,000+ listings on Vast, and search only displays a small subset. You will usually not be able to find any one specific machine through most normal searches. This is expected and intentional behavior of our system. You can use `vastai search offers 'machine_id=MACHINE_ID verified=any'`, to see your machine's listing. If you want to get an understanding of the machines ranking above yours you can use very narrow filters to see what similar machines are ranking above you. For example, something like: `vastai search offers 'gpu_name=RTX_4090 cpu_ram>257 cpu_ram<258'` is a decently constrained search that will most likely include a given machine you are looking for (that fits these filters) amongst others that are similar. Keep in mind our Auto Sort that `search offers` defaults to is comprised of both ranking various factors as well as an element of randomness. \ No newline at end of file +There are over 10,000+ listings on Vast, and search only displays a small subset. You will usually not be able to find any one specific machine through most normal searches. This is expected and intentional behavior of our system. You can use `vastai search offers 'machine_id=MACHINE_ID verified=any'`, to see your machine's listing. If you want to get an understanding of the machines ranking above yours you can use very narrow filters to see what similar machines are ranking above you. For example, something like: `vastai search offers 'gpu_name=RTX_4090 cpu_ram>257 cpu_ram<258'` is a decently constrained search that will most likely include a given machine you are looking for (that fits these filters) amongst others that are similar. Keep in mind our Auto Sort that `search offers` defaults to is comprised of both ranking various factors as well as an element of randomness. diff --git a/host/how-to-self-test.mdx b/host/how-to-self-test.mdx index 8eed828b..81d50a48 100644 --- a/host/how-to-self-test.mdx +++ b/host/how-to-self-test.mdx @@ -6,6 +6,10 @@ updatedAt: "Mon Nov 25 2025 00:00:00 GMT+0000 (Coordinated Universal Time)" --- +Personas: General Pro Operator, Headless Operator. + +Stage: Verify & List. + ## Minimal Requirements for Verification Before your machine can be verified on Vast.ai, it must meet all minimum quality and reliability benchmarks. diff --git a/host/installing-host-software.mdx b/host/installing-host-software.mdx new file mode 100644 index 00000000..62bafcc1 --- /dev/null +++ b/host/installing-host-software.mdx @@ -0,0 +1,31 @@ +--- +title: "Installing the Vast Host Software" +sidebarTitle: "Install Host Software" +description: "Canonical install guide for the Vast host daemon and setup script." +"canonical": "/host/installing-host-software" +--- + +Status: mockup placeholder. + +Personas: General Pro Operator, Headless Operator, Hobbyist. + +Stage: Set Up. + +## Purpose + +Create the missing high-volume install guide and absorb findings from the installer investigation. + +## Addresses + +- Installer failures. +- Host identify/API key errors. +- `--no-docker` versus interactive installs. +- `vast_host_install.log`. +- `kaalia` systemd service checks. + +## Proposed Content + +- Pre-install checklist. +- Official install path. +- Common root causes and exact fixes. +- How to collect logs before asking for help. diff --git a/host/maintenance-windows.mdx b/host/maintenance-windows.mdx new file mode 100644 index 00000000..efacdb4a --- /dev/null +++ b/host/maintenance-windows.mdx @@ -0,0 +1,30 @@ +--- +title: "Maintenance Windows" +sidebarTitle: "Maintenance Windows" +description: "How hosts plan maintenance without disrupting active contracts." +"canonical": "/host/maintenance-windows" +--- + +Status: mockup placeholder. + +Personas: General Pro Operator, Headless Operator. + +Stage: Operate. + +## Purpose + +Make scheduled maintenance visible as an operating workflow. + +## Addresses + +- Maintenance window tickets. +- Time-zone confusion. +- Reboot timing and contract draining. +- CLI schedule/cancel maintenance usage. + +## Proposed Content + +- When to use a maintenance window. +- How to schedule and cancel. +- What clients see. +- What not to do during active rentals. diff --git a/host/market-metrics.mdx b/host/market-metrics.mdx index 12db6a15..ff1277b6 100644 --- a/host/market-metrics.mdx +++ b/host/market-metrics.mdx @@ -4,6 +4,10 @@ sidebarTitle: "Market Metrics" description: "Track GPU supply, demand, pricing, and locations across the Vast marketplace" --- +Personas: Business Owner, General Pro Operator. + +Stage: Verify & List. + Vast provides real-time and historical data on GPU supply, demand, pricing, and geographic distribution across the marketplace. You can use this data to make informed decisions about pricing your machines and understanding demand for specific GPU types. ## Accessing the data diff --git a/host/network-ports.mdx b/host/network-ports.mdx new file mode 100644 index 00000000..abb07e65 --- /dev/null +++ b/host/network-ports.mdx @@ -0,0 +1,31 @@ +--- +title: "Network & Ports" +sidebarTitle: "Network & Ports" +description: "Port forwarding, CGNAT, public IP, IPv6, and host connectivity guidance." +"canonical": "/host/network-ports" +--- + +Status: mockup placeholder. + +Personas: General Pro Operator, Headless Operator. + +Stage: Set Up. + +## Purpose + +Give network and port issues their own canonical page. + +## Addresses + +- CGNAT and no-public-IP failures. +- NAT hairpinning during self-test. +- `vericode=8` style connectivity failures. +- Direct port count and port range confusion. + +## Proposed Content + +- Required direct ports per GPU. +- Why TCP and UDP forwarding must be symmetric. +- How to test from outside the host LAN. +- Public IP, CGNAT, Starlink, and IPv6 caveats. +- Link from self-test timeout failures. diff --git a/host/not-in-search.mdx b/host/not-in-search.mdx new file mode 100644 index 00000000..8c1054a5 --- /dev/null +++ b/host/not-in-search.mdx @@ -0,0 +1,30 @@ +--- +title: "Why Isn't My Machine in Search?" +sidebarTitle: "Not in Search" +description: "Troubleshooting machine visibility in marketplace search." +"canonical": "/host/not-in-search" +--- + +Status: mockup placeholder. + +Personas: General Pro Operator, Business Owner, Hobbyist. + +Stage: Verify & List. + +## Purpose + +Separate search visibility from verification and self-test so hosts can self-diagnose. + +## Addresses + +- Machine not visible in search. +- Bundling and disabled bundling confusion. +- Deverified or low-demand machines. +- Supply/demand queue expectations. + +## Proposed Content + +- How to search by machine ID. +- Reasons a listed machine may not appear. +- Difference between listing, verification, and ranking. +- Links to verification and pricing pages. diff --git a/host/payment.mdx b/host/payment.mdx index 0b6d1688..93f21f5a 100644 --- a/host/payment.mdx +++ b/host/payment.mdx @@ -1,11 +1,16 @@ --- title: Host Payouts +sidebarTitle: "Host Payouts" createdAt: Mon Jan 13 2025 21:20:40 GMT+0000 (Coordinated Universal Time) updatedAt: Mon Jan 13 2025 21:31:15 GMT+0000 (Coordinated Universal Time) "canonical": "/host/payment" --- +Personas: Business Owner. + +Stage: Operate. + ## Common Questions ### When will I get paid? diff --git a/host/persona-decision-guide.mdx b/host/persona-decision-guide.mdx new file mode 100644 index 00000000..490d8181 --- /dev/null +++ b/host/persona-decision-guide.mdx @@ -0,0 +1,30 @@ +--- +title: "Is Vast for Me?" +sidebarTitle: "Is Vast for Me?" +description: "Persona decision guide for prospective hosts." +"canonical": "/host/persona-decision-guide" +--- + +Status: mockup placeholder. + +Personas: Hobbyist, Business Owner. + +Stage: Decide. + +## Purpose + +Set expectations before someone buys hardware or starts an install. + +## Addresses + +- New host "what do I do next?" tickets. +- Hosts expecting white-glove setup support. +- Hobbyist confusion around Windows, gaming rigs, consumer networking, and earnings. + +## Proposed Content + +- Who should host on Vast. +- Who should not host yet. +- What Vast does and does not support. +- What each persona should read next. +- Clear pointer to Discord/community channels. diff --git a/host/pricing-your-listing.mdx b/host/pricing-your-listing.mdx new file mode 100644 index 00000000..326b59cd --- /dev/null +++ b/host/pricing-your-listing.mdx @@ -0,0 +1,30 @@ +--- +title: "Pricing Your Listing" +sidebarTitle: "Pricing Your Listing" +description: "Listing optimization, DPH, slicing, bids, and pricing examples." +"canonical": "/host/pricing-your-listing" +--- + +Status: mockup placeholder. + +Personas: Business Owner, General Pro Operator. + +Stage: Verify & List. + +## Purpose + +Give listing optimization a home outside the setup overview. + +## Addresses + +- Pricing help tickets. +- Discount schedules and bid pricing. +- GPU slicing and `min_gpu`. +- Business owner listing strategy. + +## Proposed Content + +- DPH and market metric explanation. +- Worked pricing example. +- On-demand, interruptible, and reserved tradeoffs. +- How to use market metrics. diff --git a/host/quickstart.mdx b/host/quickstart.mdx new file mode 100644 index 00000000..72a4dcc5 --- /dev/null +++ b/host/quickstart.mdx @@ -0,0 +1,28 @@ +--- +title: "Hosting Quickstart" +sidebarTitle: "Hosting Quickstart" +description: "Numbered journey for first-time hosts." +"canonical": "/host/quickstart" +--- + +Status: mockup placeholder. + +Personas: Hobbyist. + +Stage: Set Up. + +## Purpose + +Give a first-time host one ordered path instead of a long omnibus page. + +## Proposed Journey + +1. Decide whether Vast fits your hardware and expectations. +2. Create or convert a host account. +3. Prepare Ubuntu, drivers, BIOS, storage, and networking. +4. Install the Vast host software. +5. List the machine. +6. Run self-test. +7. Understand verification and first-rental expectations. + +Each step should link to a deeper page. diff --git a/host/reliability-uptime.mdx b/host/reliability-uptime.mdx new file mode 100644 index 00000000..a94ff477 --- /dev/null +++ b/host/reliability-uptime.mdx @@ -0,0 +1,30 @@ +--- +title: "Reliability & Uptime" +sidebarTitle: "Reliability & Uptime" +description: "Reliability score, uptime expectations, and common score drops." +"canonical": "/host/reliability-uptime" +--- + +Status: mockup placeholder. + +Personas: General Pro Operator, Headless Operator. + +Stage: Operate. + +## Purpose + +Explain reliability in operational terms. + +## Addresses + +- Reliability score questions. +- Disconnect and recovery expectations. +- NVIDIA auto-update and reboot traps. +- Displayed score versus underlying machine health. + +## Proposed Content + +- What reliability measures. +- What causes score drops. +- Recovery expectations. +- Preventive maintenance checklist. diff --git a/host/removing-recreating-machines.mdx b/host/removing-recreating-machines.mdx new file mode 100644 index 00000000..b9fc9f2e --- /dev/null +++ b/host/removing-recreating-machines.mdx @@ -0,0 +1,30 @@ +--- +title: "Removing or Recreating Machines" +sidebarTitle: "Remove or Recreate" +description: "Unlisting, deleting, and recreating host machines." +"canonical": "/host/removing-recreating-machines" +--- + +Status: mockup placeholder. + +Personas: General Pro Operator, Business Owner, Hobbyist. + +Stage: Operate. + +## Purpose + +Give machine removal and recreation a single support-linkable page. + +## Addresses + +- Delete versus unlist confusion. +- Hardware swap re-registration. +- Old machine IDs. +- Cleanup after failed setup. + +## Proposed Content + +- What unlist does. +- What delete does. +- When to recreate. +- What happens to offers, volumes, and old IDs. diff --git a/host/self-test-failure-reference.mdx b/host/self-test-failure-reference.mdx new file mode 100644 index 00000000..7440a429 --- /dev/null +++ b/host/self-test-failure-reference.mdx @@ -0,0 +1,32 @@ +--- +title: "Self-Test Failure Reference" +sidebarTitle: "Self-Test Failures" +description: "Lookup reference for self-test failures, meanings, and next actions." +"canonical": "/host/self-test-failure-reference" +--- + +Status: mockup placeholder. + +Personas: General Pro Operator, Headless Operator. + +Stage: Verify & List. + +## Purpose + +Turn self-test output into linkable guidance. + +## Addresses + +- Self-test failures. +- "Not found or not rentable" ambiguity. +- No-response and timeout troubleshooting. +- CLI support bundle handoff. + +## Proposed Content + +- One failure code or error string per anchor. +- Meaning in host language. +- Measured value versus threshold when available. +- One or two actions before contacting support. + +This page should eventually align with the generated CON-1515 self-test reference. diff --git a/host/storage-setup.mdx b/host/storage-setup.mdx new file mode 100644 index 00000000..ec9ccbe1 --- /dev/null +++ b/host/storage-setup.mdx @@ -0,0 +1,30 @@ +--- +title: "Storage Setup" +sidebarTitle: "Storage Setup" +description: "Disk, filesystem, Docker storage, XFS, RAID, and NVMe guidance for hosts." +"canonical": "/host/storage-setup" +--- + +Status: mockup placeholder. + +Personas: General Pro Operator, Headless Operator. + +Stage: Set Up. + +## Purpose + +Make storage setup linkable instead of burying it in install troubleshooting. + +## Addresses + +- XFS project quota confusion. +- Docker data-root and mount issues. +- RAID/NVMe layout questions. +- Volume-offer space allocation questions. + +## Proposed Content + +- Recommended filesystem and mount layout. +- XFS `prjquota` notes. +- Docker storage location. +- How rented volumes affect available host disk. diff --git a/host/supported-hardware.mdx b/host/supported-hardware.mdx new file mode 100644 index 00000000..c1b397cd --- /dev/null +++ b/host/supported-hardware.mdx @@ -0,0 +1,29 @@ +--- +title: "Supported Hardware" +sidebarTitle: "Supported Hardware" +description: "Hardware compatibility guidance before buying or listing a host machine." +"canonical": "/host/supported-hardware" +--- + +Status: mockup placeholder. + +Personas: Hobbyist, Business Owner, General Pro Operator. + +Stage: Decide. + +## Purpose + +Prevent irreversible host spend on hardware that cannot pass installation, self-test, or marketplace demand checks. + +## Addresses + +- Hardware compatibility tickets. +- GB10, ARM, Windows, old GPU, and low-VRAM confusion. +- Business-owner purchase decisions before support contact. + +## Proposed Content + +- Minimum GPU, VRAM, CPU, RAM, storage, and network expectations. +- Hardware that is technically installable but unlikely to earn well. +- Unsupported or discouraged configurations. +- Links to verification and self-test requirements. diff --git a/host/understanding-verification.mdx b/host/understanding-verification.mdx index 044e025b..c1f1548a 100644 --- a/host/understanding-verification.mdx +++ b/host/understanding-verification.mdx @@ -1,11 +1,16 @@ --- -title: Understanding Verification +title: "Understanding Verification" +sidebarTitle: "Understanding Verification" createdAt: Mon Nov 03 2025 17:30:00 GMT+0000 (Coordinated Universal Time) updatedAt: Mon Nov 03 2025 17:30:00 GMT+0000 (Coordinated Universal Time) "canonical": "/host/understanding-verification" --- +Personas: General Pro Operator, Headless Operator, Business Owner, Hobbyist. + +Stage: Verify & List. + ## How Verification Works Verification is **fully automated and powered by proprietary algorithms** that continuously evaluate each machine’s operational health and performance, dynamically adjusting assessments based on real-time **supply and demand**. diff --git a/host/verification-stages.mdx b/host/verification-stages.mdx index 7976ce03..f221fc3b 100644 --- a/host/verification-stages.mdx +++ b/host/verification-stages.mdx @@ -1,11 +1,16 @@ --- -title: Verification Stages +title: "Verification Stages" +sidebarTitle: "Verification Stages" createdAt: Mon Jan 13 2025 21:20:40 GMT+0000 (Coordinated Universal Time) updatedAt: Mon Nov 03 2025 12:50:03 GMT+0000 (Coordinated Universal Time) "canonical": "/host/verification-stages" --- +Personas: General Pro Operator, Headless Operator, Business Owner, Hobbyist. + +Stage: Verify & List. + ## States & Lifecycle **States:** Unverified → Verified → (potentially) Deverified → Unverified → ... diff --git a/host/vms.mdx b/host/vms.mdx index 82abdf2f..578706c3 100644 --- a/host/vms.mdx +++ b/host/vms.mdx @@ -1,10 +1,15 @@ --- -title: VMs +title: "VMs & IOMMU" +sidebarTitle: "VMs & IOMMU" createdAt: Mon Jan 13 2025 21:20:40 GMT+0000 (Coordinated Universal Time) updatedAt: Wed Jan 15 2025 00:37:08 GMT+0000 (Coordinated Universal Time) --- +Personas: General Pro Operator, Headless Operator. + +Stage: Set Up. + **WARNING:** VMs interface much more directly with hardware than Docker containers. diff --git a/host/workload-policy.mdx b/host/workload-policy.mdx new file mode 100644 index 00000000..c5b66ce5 --- /dev/null +++ b/host/workload-policy.mdx @@ -0,0 +1,23 @@ +--- +title: "Workload Policy" +sidebarTitle: "Workload Policy" +description: "Host-facing expectations for workload types and platform policy." +"canonical": "/host/workload-policy" +--- + +Status: mockup placeholder. + +Personas: General Pro Operator, Headless Operator, Business Owner, Hobbyist. + +Stage: Operate. + +## Purpose + +Set expectations around workloads before hosts make assumptions from Discord or prior platforms. + +## Proposed Content + +- Mining and proof-of-work expectations. +- Idle workloads. +- Bittensor and similar workloads. +- Abuse, security, and acceptable use links. From f2c0a9021af8671eded58fdf6fc4c2689e0569d0 Mon Sep 17 00:00:00 2001 From: Hannes Zietsman Date: Mon, 15 Jun 2026 14:36:51 +0200 Subject: [PATCH 02/20] Iterate CON-1518 host docs IA mockup Expand the host docs IA mockup with populated setup, verification, pricing, operations, and common-question pages. Add local-only review helpers for change review and old-content lineage highlighting. These review helpers are for the fork/demo branch and should be removed before a production docs PR. --- docs.json | 99 +- host/account-hosting-agreement.mdx | 48 +- host/common-errors-diagnostics.mdx | 100 +- host/common-host-questions.mdx | 135 +- host/community.mdx | 45 +- host/datacenter-status.mdx | 12 +- host/docs-change-review.mdx | 115 + host/docs-ia-proposal.mdx | 106 - host/earning.mdx | 151 +- host/first-24-hours.mdx | 70 +- host/fleet-operations.mdx | 120 +- host/glossary.mdx | 127 +- host/guide-to-taxes.mdx | 9 +- host/hardware-prep.mdx | 46 +- host/headless-install.mdx | 267 +- host/hosting-agreement.mdx | 49 +- host/hosting-overview.mdx | 145 +- host/how-to-self-test.mdx | 26 +- host/installing-host-software.mdx | 39 +- host/maintenance-windows.mdx | 37 +- host/market-metrics.mdx | 7 +- host/network-ports.mdx | 50 +- host/not-in-search.mdx | 49 +- host/payment.mdx | 85 +- host/persona-decision-guide.mdx | 95 +- host/pricing-your-listing.mdx | 113 +- host/quickstart.mdx | 30 +- host/reliability-uptime.mdx | 54 +- host/removing-recreating-machines.mdx | 45 +- host/self-test-failure-reference.mdx | 32 - host/self-test-reference.mdx | 60 + host/storage-setup.mdx | 63 +- host/supported-hardware.mdx | 129 +- host/understanding-verification.mdx | 38 +- host/verification-stages.mdx | 35 +- host/vms.mdx | 33 +- host/workload-policy.mdx | 97 +- old-docs-highlight-demo.js | 3628 +++++++++++++++++++++++++ persona-chips.css | 23 + 39 files changed, 5654 insertions(+), 758 deletions(-) create mode 100644 host/docs-change-review.mdx delete mode 100644 host/docs-ia-proposal.mdx delete mode 100644 host/self-test-failure-reference.mdx create mode 100644 host/self-test-reference.mdx create mode 100644 old-docs-highlight-demo.js create mode 100644 persona-chips.css diff --git a/docs.json b/docs.json index 6ad09e47..408b3e9f 100644 --- a/docs.json +++ b/docs.json @@ -587,10 +587,9 @@ "tab": "Host", "groups": [ { - "group": "Decide", + "group": "Before You Host", "icon": "compass", "pages": [ - "host/docs-ia-proposal", "host/hosting-overview", "host/supported-hardware", "host/persona-decision-guide", @@ -620,14 +619,14 @@ "host/understanding-verification", "host/how-to-self-test", "host/market-metrics", - "host/self-test-failure-reference", + "host/self-test-reference", "host/pricing-your-listing", "host/not-in-search" ] }, { "group": "Operate", - "icon": "activity", + "icon": "gauge", "pages": [ "host/first-24-hours", "host/reliability-uptime", @@ -647,50 +646,52 @@ "host/common-host-questions", "host/glossary", "host/hosting-agreement", - "host/community", - { - "group": "CLI Reference", - "pages": [ - "host/cli/cleanup-machine", - "host/cli/delete-machine", - "host/cli/list-machine", - "host/cli/list-machines", - "host/cli/show-machine", - "host/cli/show-machines", - "host/cli/set-defjob", - "host/cli/remove-defjob", - "host/cli/set-min-bid", - "host/cli/schedule-maint", - "host/cli/cancel-maint", - "host/cli/show-maints", - "host/cli/unlist-machine", - "host/cli/defrag-machines", - "host/cli/self-test-machine", - "host/cli/metrics-gpu", - "host/cli/metrics-gpu-trends", - "host/cli/metrics-gpu-locations" - ] - }, - { - "group": "SDK Reference", - "pages": [ - "host/sdk/cleanup-machine", - "host/sdk/delete-machine", - "host/sdk/list-machine", - "host/sdk/list-machines", - "host/sdk/show-machine", - "host/sdk/show-machines", - "host/sdk/set-defjob", - "host/sdk/remove-defjob", - "host/sdk/set-min-bid", - "host/sdk/schedule-maint", - "host/sdk/cancel-maint", - "host/sdk/show-maints", - "host/sdk/unlist-machine", - "host/sdk/defrag-machines", - "host/sdk/self-test-machine" - ] - } + "host/community" + ] + }, + { + "group": "CLI", + "icon": "terminal", + "pages": [ + "host/cli/cleanup-machine", + "host/cli/delete-machine", + "host/cli/list-machine", + "host/cli/list-machines", + "host/cli/show-machine", + "host/cli/show-machines", + "host/cli/set-defjob", + "host/cli/remove-defjob", + "host/cli/set-min-bid", + "host/cli/schedule-maint", + "host/cli/cancel-maint", + "host/cli/show-maints", + "host/cli/unlist-machine", + "host/cli/defrag-machines", + "host/cli/self-test-machine", + "host/cli/metrics-gpu", + "host/cli/metrics-gpu-trends", + "host/cli/metrics-gpu-locations" + ] + }, + { + "group": "SDK", + "icon": "python", + "pages": [ + "host/sdk/cleanup-machine", + "host/sdk/delete-machine", + "host/sdk/list-machine", + "host/sdk/list-machines", + "host/sdk/show-machine", + "host/sdk/show-machines", + "host/sdk/set-defjob", + "host/sdk/remove-defjob", + "host/sdk/set-min-bid", + "host/sdk/schedule-maint", + "host/sdk/cancel-maint", + "host/sdk/show-maints", + "host/sdk/unlist-machine", + "host/sdk/defrag-machines", + "host/sdk/self-test-machine" ] } ] @@ -846,7 +847,7 @@ "links": [ { "label": "FAQ", - "href": "/guides/reference/faq" + "href": "https://docs.vast.ai/guides/reference/faq" }, { "label": "Discord", diff --git a/host/account-hosting-agreement.mdx b/host/account-hosting-agreement.mdx index c99fba17..1715dfa1 100644 --- a/host/account-hosting-agreement.mdx +++ b/host/account-hosting-agreement.mdx @@ -3,28 +3,46 @@ title: "Account & Hosting Agreement" sidebarTitle: "Account & Agreement" description: "Host account conversion and agreement flow." "canonical": "/host/account-hosting-agreement" +personas: + - pro-operator + - headless-operator + - business-owner + - hobbyist --- -Status: mockup placeholder. +
All host personas
-Personas: General Pro Operator, Headless Operator, Business Owner, Hobbyist. +Use this page when a host account, hosting agreement, or Machines tab is not behaving as expected. -Stage: Set Up. + +## Do I need a separate host account? -## Purpose +Yes. Use a dedicated account for hosting. Do not use the same account for both client rentals and host operations, because that setup is unsupported and can cause account and machine-management issues. -Separate account setup from machine setup so support can link directly to host conversion issues. +## How to accept the hosting agreement -## Addresses +Once your host account is created, open the [host setup guide](https://cloud.vast.ai/host/setup/). There is a link in the first paragraph to the hosting agreement. Read through the agreement. Once you accept, your account is converted to a hosting account, and a Machines link appears in the navigation. Your account can now list machines that are running the daemon software. -- Machines tab not visible. -- Client account used as a host account. -- Agreement loops or conversion confusion. -- Deprecated or stale setup links. + +## What must happen before I can see host features or the Machines tab? -## Proposed Content +Your account must be enabled for hosting and the hosting agreement must be accepted. After the account is converted to a host account, the Machines navigation and other host features should become available. -- When to create a new host account. -- How to accept the hosting agreement. -- How to confirm the account is host-enabled. -- Symptoms and fixes for common account-state problems. +If the account still behaves like a client account, confirm that you are signed into the intended host account and that the agreement flow completed. + + +## What if I accepted the agreement but still see a client account? + +Confirm that you are signed into the correct dedicated host account, then refresh or sign out and back in. If the Machines tab is still missing, treat it as an account-state issue rather than a Linux install issue. Contact Vast support with the host account email and screenshots or error messages from the setup flow. + +## Stale or deprecated setup links + +Copy the install command only from the official setup page while signed into the host account. Commands from old notes, screenshots, third-party guides, or another account can contain expired or account-specific material. See [Installing Host Software](/host/installing-host-software#install-command). + +## Related pages + +| Topic | Read next | +| --- | --- | +| First-time setup path | [Hosting Quickstart](/host/quickstart) | +| Installing the host software | [Installing Host Software](/host/installing-host-software) | +| Agreement reference | [Hosting Agreement](/host/hosting-agreement) | diff --git a/host/common-errors-diagnostics.mdx b/host/common-errors-diagnostics.mdx index 7f3e321e..49cab4a5 100644 --- a/host/common-errors-diagnostics.mdx +++ b/host/common-errors-diagnostics.mdx @@ -3,22 +3,100 @@ title: "Common Errors & Diagnostics" sidebarTitle: "Errors & Diagnostics" description: "Common host errors and diagnostic collection paths." "canonical": "/host/common-errors-diagnostics" +personas: + - pro-operator + - headless-operator --- -Status: mockup placeholder. +
Pro OperatorHeadless / DC
-Personas: General Pro Operator, Headless Operator. +Use this page for host errors that are not specific to install, networking, or self-test, and for collecting diagnostics before asking for help. -Stage: Operate. +
+## Where are installer, daemon, and self-test logs? -## Purpose +For self-test failures, the CLI can create a diagnostic bundle. Default self-test bundles include: -Create a steady-state troubleshooting home for errors that are not install, network, or self-test specific. +- `self-test-output.log` +- `self-test-result.json` +- `manifest.json` +- `collection-errors.json` -## Proposed Content +Runtime failures can also include: -- Diagnostic bundle handoff. -- `kaalia` logs. -- Docker and NVIDIA runtime checks. -- Common machine error references. -- Links to focused pages when a symptom has a better home. +- `instance/show-instance.json` +- `instance/container.log` +- `instance/daemon.log` + +You can also create a manual bundle with: + +```bash +vastai dump-logs +``` + +If you run the helper on the actual host, this can include host-local artifacts such as kaalia logs, `dmesg`, `journalctl`, Docker daemon config, and mount information: + +```bash +vastai dump-logs --include-local-host-artifacts +``` + + +## What is this red error message on my machine? + +If the hosting software detects an error, that error message is listed on your machine in the machines page. Once the cause of the error has been resolved, most error messages are automatically cleared after 1-2 hours. The quickest way to learn more about resolving specific error messages is the hosting channels in [our Discord](https://discord.gg/hSuEbSQ4X8). + + +## My storage for clients is full of old stopped jobs — can I free up space? + +Try cleaning up the Docker build cache, as it sometimes frees up far more space than it claims. You can also clean up old unused images. For expired or deleted rental contracts that did not release their storage, run [vastai cleanup machine](/host/cli/cleanup-machine). + + +## What should I do when nvidia-smi fails? + +Treat `nvidia-smi` failure as a host GPU or driver health problem. Check whether the NVIDIA driver is loaded, whether the GPU is visible on the PCIe bus, whether a reboot is needed after a driver or kernel update, whether there is an NVML driver/library mismatch, and whether system logs show NVRM, Xid, or PCIe errors. Do not keep a machine listed if it cannot reliably report GPU state. + + +## What should I do for NVML driver/library mismatch? + +This usually means the NVIDIA userspace library and loaded kernel module are from different driver versions, often after an update. Plan downtime and reboot first. If the mismatch persists, clean up or reinstall the NVIDIA driver stack, then verify `nvidia-smi` before listing again. + + +## What should I do when a GPU falls off the PCIe bus? + +Treat this as a hardware, power, thermal, PCIe, or driver stability issue. Check logs for NVRM, Xid, and PCIe/AER errors. Power-cycle the machine, then inspect PSU capacity, power cables, risers, slots, PCIe lane settings, thermals, and any overclock or undervolt. Repeated bus drops should be fixed before the machine is listed again. + + +## What should I do for bad bandwidthtest2? + +`bad bandwidthtest2` is best treated as a machine health or verification error. It usually points at a GPU, PCIe, driver/runtime, or data-transfer problem. Check PCIe bandwidth and lane configuration, GPU seating, thermals, power, driver and NVML health, Xid errors, Docker GPU runtime behavior, and self-test diagnostic output. Rerun self-test after fixing the hardware or driver issue. + + +## What should I do for failed to inject CDI devices? + +If logs or machine status mention failed CDI device injection, treat it as a container GPU device injection or runtime problem. Current self-test output may surface the same underlying issue as a startup or runtime failure instead of using the literal CDI text. Gather a diagnostic bundle, check Docker and NVIDIA container runtime/CDI configuration, confirm GPUs are visible on the host, inspect daemon and container logs, and check for related machine errors. If the configuration looks correct but containers still cannot receive GPU devices, escalate with the machine ID and logs. + + +## What logs should I collect before asking for help? + +Include the machine ID, account context, exact command, timestamps, screenshots or CLI output, tested external IP:port for network failures, and the self-test support bundle when available. If running on the host, include local host artifacts with: + +```bash +vastai dump-logs --include-local-host-artifacts +``` + +Review bundles before sharing them. + + +## What should I escalate to Vast support? + +Escalate account conversion or hosting agreement issues, payment/tax/payout provider issues that the docs cannot resolve, backend machine records or ghost machines that normal UI/CLI actions cannot remove, API permission or account-visibility problems, suspected backend bugs, and cases where self-test or diagnostics show a platform state mismatch after following documented steps. + +Local Ubuntu, Docker, GPU driver, hardware, power, thermals, and consumer network setup are primarily host responsibilities. Bring logs and diagnostics when asking for help. + +## Related pages + +| Topic | Read next | +| --- | --- | +| Install-time failures | [Installing Host Software](/host/installing-host-software#install-failures) | +| Self-test error strings | [Self-Test Reference](/host/self-test-reference) | +| Connectivity problems | [Network & Ports](/host/network-ports) | diff --git a/host/common-host-questions.mdx b/host/common-host-questions.mdx index bf78f79e..94fc834d 100644 --- a/host/common-host-questions.mdx +++ b/host/common-host-questions.mdx @@ -1,53 +1,114 @@ --- title: "Common Host Questions" sidebarTitle: "Common Questions" -description: "Index of common host questions and the lifecycle pages that should answer them." +description: "Index of common questions for Vast.ai hosts, linking to the canonical answer on each topic page." "canonical": "/host/common-host-questions" +personas: + - pro-operator + - headless-operator + - business-owner + - hobbyist --- -Status: mockup placeholder. +
All host personas
-Personas: General Pro Operator, Headless Operator, Business Owner, Hobbyist. +This page is a question index. Each answer lives on exactly one topic page, so support replies, CLI errors, and search results can link to a single canonical home per topic. -Stage: Reference. + +Requirements and platform behavior can change as host software, verification, and marketplace policy evolve. For the current machine-specific result, run the host self-test and review the measured checks it reports. + -## Purpose +## Getting started and account setup -Give CON-1517 a lightweight index for common host questions while the real answers live on focused lifecycle pages. +| Question | Answer | +| --- | --- | +| What hardware is supported for hosting? | [Supported Hardware](/host/supported-hardware) | +| What hardware or OS combinations should I avoid? | [Supported Hardware: unsupported setups](/host/supported-hardware#unsupported-or-discouraged-setups) | +| What is the recommended first-time setup path? | [Hosting Quickstart](/host/quickstart) | +| How do I host my machine or rent my PC? | [Hosting Quickstart](/host/quickstart) | +| What must happen before I can see host features? | [Account & Hosting Agreement](/host/account-hosting-agreement#host-features-tab) | +| Do I need a separate host account? | [Account & Hosting Agreement](/host/account-hosting-agreement#separate-host-account) | +| What if I accepted the agreement but still see a client account? | [Account & Hosting Agreement](/host/account-hosting-agreement#agreement-stuck) | + +## Install, storage, drivers, and daemon health -This page should be written from the CON-1517 Crisp buckets, then filled using vetted wiki material where it matches current Vast behavior. +| Question | Answer | +| --- | --- | +| What should be ready before I run the host installer? | [Hardware Prep](/host/hardware-prep#install-prerequisites) | +| Where should I copy the install command from? | [Installing Host Software](/host/installing-host-software#install-command) | +| Why did the install script fail? | [Installing Host Software](/host/installing-host-software#install-failures) | +| Where are installer, daemon, and self-test logs? | [Common Errors & Diagnostics](/host/common-errors-diagnostics#logs) | +| What does a healthy host daemon look like? | [First 24 Hours](/host/first-24-hours#healthy-daemon) | +| How should I set up Docker storage? | [Storage Setup](/host/storage-setup#docker-storage-layout) | +| What should a normal NVMe or SSD fstab line look like? | [Storage Setup: fstab example](/host/storage-setup#fstab-example) | +| Is XFS with project quotas required? | [Storage Setup](/host/storage-setup#xfs-prjquota) | +| How should I choose single NVMe vs RAID/NVMe? | [Storage Setup](/host/storage-setup#nvme-raid) | +| What causes the Docker pquota storage error? | [Storage Setup](/host/storage-setup#pquota-error) | +| What Ubuntu versions should hosts use? | [Hardware Prep](/host/hardware-prep#ubuntu-versions) | +| What NVIDIA driver version should I use? | [Hardware Prep](/host/hardware-prep#nvidia-driver-version) | +| Should I disable automatic updates? | [Maintenance Windows](/host/maintenance-windows#automatic-updates) | +| What should I do when nvidia-smi fails? | [Common Errors & Diagnostics](/host/common-errors-diagnostics#nvidia-smi-fails) | +| What should I do for NVML driver/library mismatch? | [Common Errors & Diagnostics](/host/common-errors-diagnostics#nvml-mismatch) | +| What should I do when a GPU falls off the PCIe bus? | [Common Errors & Diagnostics](/host/common-errors-diagnostics#gpu-falls-off-bus) | +| What is this red error message on my machine? | [Common Errors & Diagnostics](/host/common-errors-diagnostics#red-error) | +| Can I remove old jobs or Docker data to free client storage? | [Common Errors & Diagnostics](/host/common-errors-diagnostics#docker-cache) | -## Question Map +## Network, self-test, and verification -| Common question | Primary page | Supporting pages | -| --- | --- | --- | -| I am new and want to host. What is the ordered path? | [Hosting Quickstart](/host/quickstart) | [Account & Hosting Agreement](/host/account-hosting-agreement), [Installing the Vast Host Software](/host/installing-host-software) | -| Will my GPU, OS, or machine work on Vast? | [Supported Hardware](/host/supported-hardware) | [Hardware Prep](/host/hardware-prep), [VMs & IOMMU](/host/vms) | -| Why did the host install script fail, hang, or produce a bad daemon binary? | [Installing the Vast Host Software](/host/installing-host-software) | [Hardware Prep](/host/hardware-prep), [Storage Setup](/host/storage-setup) | -| What ports do I need, and what if I am behind CGNAT, Starlink, or IPv6-only networking? | [Network & Ports](/host/network-ports) | [Self-Test Failure Reference](/host/self-test-failure-reference), [Understanding Verification](/host/understanding-verification) | -| What does this self-test or verification error mean? | [Self-Test Failure Reference](/host/self-test-failure-reference) | [How to Self-Test](/host/how-to-self-test), [Verification Stages](/host/verification-stages) | -| Why does Docker or NVIDIA runtime say no GPU is available? | [Common Errors & Diagnostics](/host/common-errors-diagnostics) | [Hardware Prep](/host/hardware-prep), [Self-Test Failure Reference](/host/self-test-failure-reference) | -| How should I set up NVMe, XFS, RAID, or Docker storage? | [Storage Setup](/host/storage-setup) | [Installing the Vast Host Software](/host/installing-host-software) | -| Why did reliability drop, or what should I monitor after listing? | [Reliability & Uptime](/host/reliability-uptime) | [First 24 Hours After Install](/host/first-24-hours), [Maintenance Windows](/host/maintenance-windows) | -| Why is my machine not in search after setup? | [Why Isn't My Machine in Search?](/host/not-in-search) | [Understanding Verification](/host/understanding-verification), [Pricing Your Listing](/host/pricing-your-listing) | -| How do I get paid or understand earnings? | [Host Payouts](/host/payment) | [Earnings & Pricing Model](/host/earning), [Pricing Your Listing](/host/pricing-your-listing) | -| How do I remove, recreate, or replace a host machine? | [Removing or Recreating Machines](/host/removing-recreating-machines) | [Common Errors & Diagnostics](/host/common-errors-diagnostics) | +| Question | Answer | +| --- | --- | +| How many direct ports are required per GPU? | [Network & Ports](/host/network-ports#ports-per-gpu) | +| Do I need TCP and UDP forwarding? | [Network & Ports](/host/network-ports#tcp-udp) | +| What if I am behind CGNAT, Starlink, IPv6-only, or no public IP? | [Network & Ports](/host/network-ports#cgnat-starlink-ipv6) | +| How should I test ports from outside my LAN? | [Network & Ports](/host/network-ports#test-ports-outside-lan) | +| What does [vericode=8](/host/glossary#vericode) or Port Networking Issues mean? | [Self-Test Failures](/host/self-test-reference#vericode-8) | +| What does the self-test check? | [How to Self-Test](/host/how-to-self-test#what-the-self-test-checks) | +| What should I do for No response for 120s? | [Self-Test Failures](/host/self-test-reference#no-response-120s) | +| What should I do for bad bandwidthtest2? | [Common Errors & Diagnostics](/host/common-errors-diagnostics#bad-bandwidthtest2) | +| What should I do for failed to inject CDI devices? | [Common Errors & Diagnostics](/host/common-errors-diagnostics#failed-cdi) | +| What should I do for Machine ID not found or not rentable? | [Self-Test Failures](/host/self-test-reference#machine-not-rentable) | +| What should I do when reliability is at or below 0.90? | [Reliability & Uptime](/host/reliability-uptime#reliability-threshold) | +| How long can verification take? | [Understanding Verification](/host/understanding-verification#verification-time) | +| Can you verify my machine? | [Understanding Verification](/host/understanding-verification#can-support-verify-my-machine) | +| How does verification work? | [Understanding Verification](/host/understanding-verification#how-verification-works) | +| What factors affect verification? | [Understanding Verification](/host/understanding-verification) | +| How do I check if my machine is listed? | [Why Isn't My Machine in Search?: check directly](/host/not-in-search#check-machine-listed) | +| Why is my machine listed but not visible in search? | [Why Isn't My Machine in Search?](/host/not-in-search) | +| I can't find my machine. What should I check? | [Why Isn't My Machine in Search?](/host/not-in-search) | -## Wiki Seed Inputs +## Pricing, payouts, and operations -| Source file | Best use in the docs layout | +| Question | Answer | | --- | --- | -| `host-setup-guide.md` | Quickstart, Hardware Prep, Install Host Software, Network & Ports, Storage Setup, Reliability & Uptime | -| `vast-networking-ports.md` | Network & Ports, Self-Test Failure Reference, Why Isn't My Machine in Search? | -| `vast-self-test-guide.md` | How to Self-Test, Self-Test Failure Reference, Understanding Verification | -| `troubleshooting-guide.md` | Common Errors & Diagnostics, Reliability & Uptime, Hardware Prep, Network & Ports | -| `common-errors.md` | Self-Test Failure Reference, Common Errors & Diagnostics, Machine Error Reference follow-up | -| `nvme-setup-for-vast.md` | Storage Setup, Installing the Vast Host Software | -| `nvidia-driver-guide.md` | Hardware Prep, Common Errors & Diagnostics, Self-Test Failure Reference | - -## Production Notes - -- Keep this page as an index, not the only answer. -- Use it to route support, operators, and agents to the right focused page. -- Verify wiki-derived commands and thresholds before moving content into production docs. -- Keep raw Crisp chat text internal; publish cleaned, paraphrased questions and current guidance. +| How should I price my listings? | [Pricing Your Listing](/host/pricing-your-listing) | +| What simple pricing model should I understand? | [Earnings & Pricing Model](/host/earning) | +| How much can I make hosting on Vast? | [Earnings & Pricing Model](/host/earning#hosting-earnings) | +| What should I know about min GPU, bids, and discounts? | [Pricing Your Listing: listing controls](/host/pricing-your-listing#listing-controls) | +| How do hosts get paid? | [Host Payouts](/host/payment) | +| When will I get paid? | [Host Payouts: timing](/host/payment#when-paid) | +| How do I get an invoice? | [Host Payouts: invoices](/host/payment#get-an-invoice) | +| Why does my invoice show Paid if funds have not arrived? | [Host Payouts: paid invoice](/host/payment#paid-invoice) | +| What does a Pending invoice mean? | [Host Payouts: pending invoice](/host/payment#pending-invoice) | +| Can Vast.ai send my payout by direct bank transfer? | [Host Payouts: payout methods](/host/payment#direct-bank-transfer) | +| Why is my account not generating invoices? | [Host Payouts: invoice generation](/host/payment#invoice-not-generating) | +| Can I generate an invoice manually? | [Host Payouts: manual invoice](/host/payment#manual-invoice) | +| How can I have earnings as a Vast user? | [Host Payouts: referral and template earnings](/host/payment#vast-user-earnings) | +| What are the Stripe, tax, and withdrawal rules? | [Tax Guide](/host/guide-to-taxes) | +| Does Vast.ai handle VAT? | [Tax Guide: VAT](/host/guide-to-taxes#does-vastai-handle-vat) | +| Is VAT shown on invoices? | [Tax Guide: invoices](/host/guide-to-taxes#is-vat-shown-on-invoices) | +| How do I gain datacenter status? | [Datacenter Status](/host/datacenter-status) | +| Why does reliability drop after rentals, reboots, or disconnects? | [Reliability & Uptime](/host/reliability-uptime#why-reliability-drops) | +| How quickly does reliability recover? | [Reliability & Uptime](/host/reliability-uptime#reliability-recovery) | +| Will restarting lower reliability or remove verification? | [Reliability & Uptime](/host/reliability-uptime#reliability-and-verification) | +| How do I minimize reliability dropping? | [Reliability & Uptime](/host/reliability-uptime#preventing-score-drops) | +| What should I monitor in the first 24 hours? | [First 24 Hours](/host/first-24-hours) | +| How should I handle maintenance windows? | [Maintenance Windows](/host/maintenance-windows) | +| How do I unlist, delete, or recreate a machine? | [Removing or Recreating Machines](/host/removing-recreating-machines) | +| How do I uninstall the Vast host software? | [Removing or Recreating Machines: uninstall](/host/removing-recreating-machines#uninstall) | +| What should I do with a ghost machine? | [Removing or Recreating Machines](/host/removing-recreating-machines#ghost-machine) | +| What changes when I swap GPUs? | [Removing or Recreating Machines](/host/removing-recreating-machines#gpu-swap) | +| Can I send a message to a client using my machine? | [Workload Policy: client messaging](/host/workload-policy#client-messaging) | +| Does Vast redownload images that were already used on my machine? | [Storage Setup: cached images](/host/storage-setup#cached-images) | +| What logs should I collect before asking for help? | [Common Errors & Diagnostics](/host/common-errors-diagnostics#collect-logs) | +| What warnings can be ignored? | [Self-Test Failures](/host/self-test-reference#warnings-ignore) | +| What should I escalate to Vast support? | [Common Errors & Diagnostics](/host/common-errors-diagnostics#escalate-support) | diff --git a/host/community.mdx b/host/community.mdx index 55358a97..6785cc4e 100644 --- a/host/community.mdx +++ b/host/community.mdx @@ -3,21 +3,46 @@ title: "Discord & Community" sidebarTitle: "Discord & Community" description: "Where hosts can get community help and what to expect." "canonical": "/host/community" +personas: + - pro-operator + - headless-operator + - business-owner + - hobbyist --- -Status: mockup placeholder. +
All host personas
-Personas: General Pro Operator, Headless Operator, Business Owner, Hobbyist. +Use community channels for host discussion, peer help, and machine-specific setup questions that Vast support does not handle directly. -Stage: Reference. + +Vast does not provide hands-on machine setup support. Your OS, drivers, BIOS, storage, power, thermals, and router are your responsibility — the community is where hosts help each other with exactly those problems. See [Is Vast for Me?](/host/persona-decision-guide#what-vast-does-and-does-not-do). + -## Purpose +## Joining the host Discord channels -Set expectations for community help and reduce support requests for machine-specific setup. +Join the Vast Discord with this invite: [discord.gg/hSuEbSQ4X8](https://discord.gg/hSuEbSQ4X8). Connect your Vast host account to Discord to unlock the **host-only channels**, where you can chat with and get help from other hosts on the platform. -## Proposed Content +The hosting channels are the quickest way to learn more about a specific red machine error message or an unfamiliar self-test failure. -- How to join host-only Discord channels. -- What details to include when asking for help. -- Response-time expectations. -- Reminder that Vast does not provide hands-on machine setup support. +## What to include when asking for help + +You will get faster, better answers if your first message includes: + +- The machine ID and the exact error string or symptom. +- What you have already checked or tried. +- Relevant log excerpts or the self-test diagnostic bundle — see [what logs to collect](/host/common-errors-diagnostics#collect-logs). +- For network problems, the tested external IP:port the CLI reported. + +Review logs and bundles before posting, and never share API keys or install commands — they can contain account-specific token material. + +## What to expect + +Community help is peer support from other hosts, with Vast staff reading along but not on a schedule. There is no response-time guarantee — useful answers often come within hours, but complex or niche questions can take longer or go unanswered. For issues only Vast can fix (account state, payouts, backend machine records), [escalate to support](/host/common-errors-diagnostics#escalate-support) instead. + +## Related pages + +| Topic | Read next | +| --- | --- | +| What to escalate to Vast support | [Common Errors & Diagnostics](/host/common-errors-diagnostics#escalate-support) | +| Decoding self-test failures first | [Self-Test Reference](/host/self-test-reference) | +| Support expectations before you host | [Is Vast for Me?](/host/persona-decision-guide) | diff --git a/host/datacenter-status.mdx b/host/datacenter-status.mdx index 759bf4f6..6544f0ab 100644 --- a/host/datacenter-status.mdx +++ b/host/datacenter-status.mdx @@ -1,14 +1,14 @@ --- title: Datacenter Status +sidebarTitle: "Datacenter Status" createdAt: Mon Jan 13 2025 21:20:40 GMT+0000 (Coordinated Universal Time) updatedAt: Tue Jul 08 2025 20:21:58 GMT+0000 (Coordinated Universal Time) "canonical": "/host/datacenter-status" +personas: + - headless-operator --- - -Personas: Headless Operator, Business Owner. - -Stage: Operate. +
Headless / DC
Equipment that is in a certified datacenter on Vast.ai is eligible to be included in the "Secure Cloud" offering and receive other benefits, such as the blue datacenter label. Individual certifications will eventually be highlighted so users can understand if a given host is compliant with HIPAA, GDPR, TIER 2/3 or ISO 27001. Users typically are willing to pay more for the security and reliability that comes with equipment that is in a proper facility. @@ -41,6 +41,6 @@ In order to apply, you will need to first gather the required documentation: - Business information such as a certificate of good standing or other recent record - The name and address of the datacenter where the equipment is located along with the relevant certificates - A contract or invoice from the datacenter linking the business -- Other due dilligence documentation as required +- Other due diligence documentation as required -Once you have the requiremed documentation, To apply please visit: [https://vast.ai/data-center-application](https://vast.ai/data-center-application) +Once you have the required documentation, apply at: [https://vast.ai/data-center-application](https://vast.ai/data-center-application) diff --git a/host/docs-change-review.mdx b/host/docs-change-review.mdx new file mode 100644 index 00000000..834e7184 --- /dev/null +++ b/host/docs-change-review.mdx @@ -0,0 +1,115 @@ +--- +title: "Host Docs Change Review" +sidebarTitle: "Change Review" +description: "Review-only comparison page for the CON-1518 host docs mockup." +"canonical": "/host/docs-change-review" +--- + +This is a review-only page for checking the proposed Host docs restructure against the current docs. It is not linked from the Host sidebar. + +## Snapshot + +| Item | Current state | +| --- | --- | +| Local preview | [http://127.0.0.1:3001](http://127.0.0.1:3001) | +| Working branch | `CON-1518-host-docs-ia-mockup` | +| Compared against | `origin/main` at `c283475` | +| Current local commit | `56f39d2` plus uncommitted docs edits | +| Customer-facing top-level Host pages scanned | 33 | +| Scaffold marker matches | 0 | +| Changed top-level Host content pages | 34: 23 new, 10 modified, 1 removed/split | +| Review-only helper pages | This page and the old-content highlight toggle | + + +Use the floating **Old content** button while browsing the local Host pages to highlight blocks reused from the old docs. The small "Old parent docs" badge shows which `origin/main` page(s) the current page was split from or materially based on. Yellow highlight means the block contains exact old text or has been manually marked as moved/reworked guidance from `origin/main`; blue highlight means the image or diagram source is reused from `origin/main`. Unhighlighted content is new or materially rewritten. The helper is gated to local preview hosts, but still remove `old-docs-highlight-demo.js` before opening a production PR. + + +## Scaffold Check + +No customer-facing top-level Host pages currently contain the old scaffold markers: + +- `Status: mockup` +- `Personas:` +- `Stage:` +- `## Purpose` +- `## Proposed Content` +- `Crisp` +- `cryptolabs` +- obvious placeholder/scaffold wording + +Thin pages are not the same as scaffolded pages. These are intentionally short routing or troubleshooting pages, but they are worth reviewing for depth: + +| Page | Words | Review question | +| --- | ---: | --- | +| [Hosting Quickstart](/host/quickstart) | 179 | Is a linked journey enough, or should it include more setup detail? | +| [Installing Host Software](/host/installing-host-software) | 263 | Should installer failure examples and daemon commands be expanded here? | +| [Maintenance Windows](/host/maintenance-windows) | 288 | Should this include screenshots or exact UI steps? | +| [Not in Search](/host/not-in-search) | 228 | Should this include more CLI filters and search-ranking examples? | + +## Outstanding Review + +| Area | Status | What to decide | +| --- | --- | --- | +| Review helper page | Open | Remove this page before a production PR, or keep it only in the mockup branch. | +| Persona chips | Open | Decide whether visible persona chips belong in the final docs. `persona-chips.css` is currently an untracked local file that supports them. | +| Workload Policy | Needs source review | The page is now a summary and links to the Host Agreement and Terms as source of truth. Legal/support should confirm wording around mining, Bittensor, active rentals, and abuse escalation. | +| Payout timing | Needs source review | Confirm the 2-4 week timing, Friday 12:00 PM Pacific posting, and payout-provider settlement language. | +| Supported hardware | Needs source review | Confirm GPU/OS/VM/AMD wording and the physical CPU core requirement against the final CLI/self-test behavior. | +| Self-Test Reference | Needs regeneration check | Regenerate from the latest self-test/CLI source once those source PRs are final, then verify anchors used by common questions. | +| Deleted optimization guide | Needs redirect/link decision | `host/optimization-guide.mdx` is removed/split into Earnings Model, Pricing Your Listing, and Market Metrics. Decide whether a redirect is needed. | +| Thin routing pages | Review | Quickstart, install, maintenance, and search visibility are useful but compact; decide whether to expand now or leave as lifecycle pointers. | + +## Current Vs Proposed + +Use the **current** link to compare against production docs and the **proposed** link to review the local mockup. + +| Status | Page | Current docs | Proposed local | Main change | +| --- | --- | --- | --- | --- | +| Modified | Hosting Overview | [current](https://docs.vast.ai/host/hosting-overview) | [proposed](/host/hosting-overview) | Shorter overview, stronger contract/offer framing, routes setup details to focused pages. | +| New | Supported Hardware | No direct current page | [proposed](/host/supported-hardware) | Adds buying/listing hardware guidance, unsupported setups, VM caveats, and physical CPU core rule. | +| New | Is Vast for Me? | No direct current page | [proposed](/host/persona-decision-guide) | Adds decision guide for hobbyists, business owners, and operators before they buy or install. | +| Modified | Earnings & Pricing Model | [current](https://docs.vast.ai/host/earning) | [proposed](/host/earning) | Replaces referral-console copy with host revenue model, 30-day P10/median/P90 estimate, and market data links. | +| Modified | Tax Guide for Hosts | [current](https://docs.vast.ai/host/guide-to-taxes) | [proposed](/host/guide-to-taxes) | Keeps tax caveats and fits page into Before You Host flow. | +| New | Hosting Quickstart | No direct current page | [proposed](/host/quickstart) | Adds first-time host setup journey with links to lifecycle pages. | +| New | Account & Agreement | No direct current page | [proposed](/host/account-hosting-agreement) | Adds host account conversion, separate account, agreement, and stale install command guidance. | +| New | Hardware Prep | No direct current page | [proposed](/host/hardware-prep) | Adds pre-install hardware/BIOS/driver checklist and routes to supported hardware/storage/network pages. | +| New | Storage Setup | No direct current page | [proposed](/host/storage-setup) | Adds Docker storage, XFS/project quota, NVMe, RAID, and pquota error guidance. | +| New | Network & Ports | No direct current page | [proposed](/host/network-ports) | Adds direct-port requirements, TCP/UDP forwarding, CGNAT/public-IP caveats, and failure links. | +| New | Install Host Software | No direct current page | [proposed](/host/installing-host-software) | Adds official install command, installer failure, logs, and post-install checks. | +| New | Headless Install | No direct current page | [proposed](/host/headless-install) | Adds headless/datacenter path, SSH/BMC expectations, install flow, and recovery guidance. | +| Modified | VMs & IOMMU | [current](https://docs.vast.ai/host/vms) | [proposed](/host/vms) | Refits VM/IOMMU content into setup lifecycle. | +| Modified | Verification Stages | [current](https://docs.vast.ai/host/verification-stages) | [proposed](/host/verification-stages) | Updates staged verification guidance and physical CPU core wording. | +| Modified | Understanding Verification | [current](https://docs.vast.ai/host/understanding-verification) | [proposed](/host/understanding-verification) | Clarifies automated verification, reliability, and support expectations. | +| Modified | How to Self-Test | [current](https://docs.vast.ai/host/how-to-self-test) | [proposed](/host/how-to-self-test) | Points failures to the generated Self-Test Reference and updated rentability guidance. | +| Modified | GPU Market Metrics | [current](https://docs.vast.ai/host/market-metrics) | [proposed](/host/market-metrics) | Keeps metrics/API/CLI details and fits it into Verify & List. | +| New | Self-Test Reference | Existing self-test docs were separate | [proposed](/host/self-test-reference) | New generated-style reference for thresholds, issues, and remediation guidance. | +| New | Pricing Your Listing | No direct current page | [proposed](/host/pricing-your-listing) | Adds listing controls, DPH, `min_gpu`, bids, discounts, and worked pricing example. | +| New | Not in Search | No direct current page | [proposed](/host/not-in-search) | Adds search visibility triage and direct CLI machine lookup. | +| New | First 24 Hours | No direct current page | [proposed](/host/first-24-hours) | Adds early monitoring checklist and first-rental expectations. | +| New | Reliability & Uptime | No direct current page | [proposed](/host/reliability-uptime) | Adds reliability drop/recovery guidance and operational expectations. | +| New | Maintenance Windows | No direct current page | [proposed](/host/maintenance-windows) | Adds maintenance planning without disrupting active contracts. | +| New | Remove or Recreate | No direct current page | [proposed](/host/removing-recreating-machines) | Adds unlist/delete/recreate guidance, ghost-machine escalation, and GPU swap notes. | +| New | Fleet Operations | No direct current page | [proposed](/host/fleet-operations) | Adds multi-machine/headless operator workflows and monitoring expectations. | +| New | Common Errors & Diagnostics | No direct current page | [proposed](/host/common-errors-diagnostics) | Adds logs, diagnostics, NVIDIA/Docker/runtime errors, and escalation bundle guidance. | +| Modified | Datacenter Status | [current](https://docs.vast.ai/host/datacenter-status) | [proposed](/host/datacenter-status) | Fits Secure Cloud/datacenter status into Operate flow. | +| Modified | Host Payouts | [current](https://docs.vast.ai/host/payment) | [proposed](/host/payment) | Updates payout timing, posted date, provider settlement, and invoice language. | +| New | Workload Policy | No direct current page | [proposed](/host/workload-policy) | Adds summary linked to Host Agreement and Terms as source of truth. | +| New | Common Host Questions | No direct current page | [proposed](/host/common-host-questions) | Adds common host Q&A index with anchors to lifecycle docs. | +| New | Host Glossary | No direct current page | [proposed](/host/glossary) | Adds definitions for host terms, statuses, CLI concepts, and verification terms. | +| New | Hosting Agreement | No direct current page | [proposed](/host/hosting-agreement) | Adds reference page pointing to canonical agreement and host commitments. | +| New | Discord & Community | No direct current page | [proposed](/host/community) | Adds community/Discord expectations and escalation boundaries. | +| Removed/split | Optimization Guide | [current](https://docs.vast.ai/host/optimization-guide) | [Earnings](/host/earning), [Pricing](/host/pricing-your-listing), [Metrics](/host/market-metrics) | Split broad optimization guidance into focused business/pricing/market pages. | + +## Sidebar IA + +The proposed Host sidebar is: + +1. Before You Host +2. Set Up +3. Verify & List +4. Operate +5. Reference +6. CLI +7. SDK + +The previous visible `Decide` label has been renamed to `Before You Host`, and the internal IA proposal page has been removed from the sidebar. diff --git a/host/docs-ia-proposal.mdx b/host/docs-ia-proposal.mdx deleted file mode 100644 index 781105cb..00000000 --- a/host/docs-ia-proposal.mdx +++ /dev/null @@ -1,106 +0,0 @@ ---- -title: "Host Docs IA Proposal" -sidebarTitle: "IA Proposal" -description: "Mockup of the proposed Host docs lifecycle layout and rollout plan." -"canonical": "/host/docs-ia-proposal" ---- - -Personas: General Pro Operator, Headless Operator, Business Owner, Hobbyist. - -Stage: Decide. - -This mockup reorganizes Host docs by the host lifecycle: - -```text -Decide -> Set Up -> Verify & List -> Operate -> Reference -``` - -The goal is to make the sidebar answer "where am I in the hosting journey?" instead of "what type of document is this?" - -## Persona Convention - -Each page should name its primary reader lanes near the top of the page: - -| Tag | Reader | -| --- | --- | -| General Pro Operator | Linux-comfortable host operator | -| Headless Operator | Datacenter or fleet operator using SSH/BMC workflows | -| Business Owner | Listing, pricing, purchasing, and payout decision maker | -| Hobbyist | First-time or low-infra host | - -This mockup uses text tags in the page body. Visual sidebar chips would require product/Mintlify customization and should not block the docs IA work. - -## Observations Addressed - -| Observation | IA response | -| --- | --- | -| Hosts do not know what to read next | Add a numbered quickstart and lifecycle stages | -| `hosting-overview.mdx` is an omnibus | Split it into journey pages with stable URLs | -| Support repeats the same answers | Create one topic per common support bucket | -| Self-test and verification errors are hard to decode | Give each failure class its own reference anchor | -| Personas have different needs | Keep one IA, but tag pages by persona | -| Agent retrieval needs stable targets | Use short pages, clear headings, and one topic per page | - -## What This Branch Can Address - -| Proposal item | Can be addressed in `vast-ai/docs`? | Mockup approach | -| --- | --- | --- | -| Reorganize Host sidebar by lifecycle | Yes | `docs.json` now uses Decide, Set Up, Verify & List, Operate, and Reference | -| Tag every page by persona | Yes | Pages use a text convention near the top: Personas and Stage | -| Split `hosting-overview.mdx` | Yes | New per-step pages are represented; actual content migration should happen in follow-up PRs | -| Prioritize P0/P1/P2 backlog | Yes | New placeholder pages are grouped by lifecycle and can be filled in priority order | -| Make Supported Hardware a top prevention doc | Yes | Supported Hardware is in Decide before broader expectation-setting pages | -| Make support answers linkable | Yes | Each common support bucket gets a stable page path and headings | -| Make docs agent-friendly | Yes | One topic per page, stable URLs, and explicit observation/purpose sections | -| Move CLI and SDK out of the main host journey | Yes | CLI and SDK live under Reference so lifecycle pages come first | -| Add a CON-1517 common-question entry point | Yes | Reference now includes Common Host Questions, which routes recurring questions to focused lifecycle pages | - -## What Needs Product, Backend, Or Data Work - -| Need | Why docs alone cannot finish it | -| --- | --- | -| Visual persona chips in the sidebar | Mintlify sidebar entries are configured in `docs.json`; custom chips/filters would require Mintlify customization or frontend/product work | -| Dynamic persona paths such as "show me the Hobbyist track" | Requires navigation/filter UI beyond static docs configuration | -| Live verification queue position or GPU-tier wait times | Requires backend/product data exposure before docs can show exact status | -| CLI deep-links from runtime error output to anchors | Requires CLI changes after the docs anchors are approved | -| Exact vericode glossary values and machine error catalog | Requires authoritative backend/ops source of truth | -| Full install-guide validation | Requires access to real target hardware with BMC/IPMI or equivalent remote install access | -| Crisp-derived reporting links inside public docs | Support-data artifacts are internal; public docs should cite conclusions, not expose raw support sessions | - -## Child Ticket Mapping - -| Ticket/workstream | Sidebar destination | Review note | -| --- | --- | --- | -| CON-1518 IA restructure | This mockup | Approve or adjust stage names before production content PRs | -| CON-1516 Supported Hardware | Decide -> Supported Hardware | Treat as prevention-first P0, even if volume is lower than installer/self-test | -| CON-1256 Listing Optimization | Decide -> Earnings & Pricing Model; Verify & List -> Pricing Your Listing | Should be elevated because pricing, payouts, and listing optimization are currently scattered | -| CON-1515 Verification / Self-test Reference | Verify & List -> Understanding Verification; Self-Test Failure Reference | Keep verification concepts separate from error-string/failure lookup | -| CON-1077 Headless Hosting Guide | Set Up -> Headless Install Path; Operate -> Fleet Operations | Absorb into lifecycle pages instead of creating a parallel persona-only sidebar | -| CON-1517 Common Questions | Reference -> Common Host Questions; Set Up, Verify & List, and Operate topic pages | Use the Crisp buckets to pick P0/P1/P2 pages; use the common-question index only as a router | -| CON-1397 Host Installer investigation | Set Up -> Installing the Vast Host Software | Turn installer findings into the main install troubleshooting page | -| CON-1531 Machine Error Reference | Operate -> Common Errors & Diagnostics; Reference -> Glossary | Needs authoritative error-code/source-of-truth input before it can be complete | - -## CON-1517 Wiki Seed Coverage - -The CON-1517 Crisp analysis is already enough to prioritize topics. The existing wiki can seed first-pass content, but the production docs should still verify commands, thresholds, and current product behavior before publishing. - -| Wiki seed file | Target docs pages | -| --- | --- | -| `host-setup-guide.md` | Hosting Quickstart, Hardware Prep, Installing the Vast Host Software, Network & Ports, Storage Setup, Reliability & Uptime | -| `vast-networking-ports.md` | Network & Ports, Self-Test Failure Reference, Why Isn't My Machine in Search? | -| `vast-self-test-guide.md` | How to Self-Test, Self-Test Failure Reference, Understanding Verification | -| `troubleshooting-guide.md` | Common Errors & Diagnostics, Reliability & Uptime, Hardware Prep, Network & Ports | -| `common-errors.md` | Self-Test Failure Reference, Common Errors & Diagnostics, Machine Error Reference follow-up | -| `nvme-setup-for-vast.md` | Storage Setup, Installing the Vast Host Software | -| `nvidia-driver-guide.md` | Hardware Prep, Common Errors & Diagnostics, Self-Test Failure Reference | - -## Rollout Recommendation - -1. Approve or modify the lifecycle group names. -2. Keep this branch as an IA mockup, not a production content PR. -3. Use Common Host Questions as the CON-1517 routing/index page, then write P0 pages in separate PRs: Supported Hardware, Install Host Software, Network & Ports, Self-Test Failures, Account & Agreement, Quickstart, Verification expansion, and Host Payouts. -4. Add CLI/backend follow-up tickets only after the target anchors are accepted. - -## Review Decision - -Approve the lifecycle sidebar as the default Host IA, or modify the stage names before the P0 pages are written. diff --git a/host/earning.mdx b/host/earning.mdx index 649c5b04..ec1e644e 100644 --- a/host/earning.mdx +++ b/host/earning.mdx @@ -5,53 +5,146 @@ slug: 9Ci2RCeCAEPKRT8fcy_2S createdAt: Tue Jan 14 2025 00:55:36 GMT+0000 (Coordinated Universal Time) updatedAt: Tue Aug 05 2025 19:10:27 GMT+0000 (Coordinated Universal Time) "canonical": "/host/earning" +personas: + - business-owner --- +
Business
-Personas: Business Owner. +Use this page to estimate host revenue before buying hardware, setting prices, or changing an existing listing. The useful model is simple: market price range, rentable GPU count, and actual utilization over time. -Stage: Decide. + +Hosting earnings are not guaranteed. Verification, a competitive price, or a strong machine can improve eligibility and attractiveness, but rentals still depend on demand, supply, reliability, search behavior, and renter requirements. + -## Overview +
+## Simple Monthly Model -This page in the console allows you to manage your earnings from referrals. You can find more information about Vast's referral program [here](/guides/reference/referral-program). +For a first estimate, use: -# Pages Walkthrough +```text +monthly gross = rentable GPUs x per-GPU hourly price x 720 x utilization +``` -![](/images/console-earning.webp) +Where: -The **Earnings **page gives you a transparent view of your referral program performance and accumulated rewards. Here’s what each section means: +| Input | Meaning | +| --- | --- | +| `rentable GPUs` | The number of GPUs that can be rented during the month. If only part of a multi-GPU machine is usually rented, use that smaller count. | +| `per-GPU hourly price` | The expected GPU price in dollars per GPU-hour. Compare against similar offers, not just the highest visible listing. | +| `720` | A 30-day month at 24 hours per day. | +| `utilization` | The share of the month the GPU capacity is rented. Use `0.55` for 55% utilization. | -- **Current Balance:** This is the amount you’ve earned so far from your referred users but **haven’t been paid out yet. **It keeps growing as your referrals continue to use the platform. -- **Total Earnings**: This shows your **lifetime earnings **the total amount you’ve earned from all your referrals since you joined the earnings program or started hosting. It includes both paid and unpaid amounts. -- **Total Referral Count**: This number represents the **total users you’ve referred **who have successfully created accounts through your referral link. It’s a great way to track how your outreach is growing! -- **Total Rental Earnings **(host only)**: **This shows the total lifetime amount you’ve earned from your machine being rented out on the platform. -- **Total Referral Earnings** (host only): This shows the total lifetime amount you've earned from all your referrals. +This is a gross revenue estimate before power, cooling, colocation, internet, hardware depreciation, repairs, taxes, and any other operating costs. -Additionally, there is the **Earning Chart** section that provides a clear visual overview of your earning history. +## 30-Day Range Estimate - -![](/images/console-earning-2.webp) - +The most useful planning range is based on the last 30 days of comparable market data: -The **Template Performance** chart displays the earnings history from templates. +1. Pick the closest comparable GPU class, hosting type, verification state, and machine quality. +2. Look at 30-day P10, median, and P90 price signals for that GPU. +3. Estimate utilization from your own machine history, or from comparable market demand if this is new hardware. +4. Calculate a lower, middle, and upper gross monthly range. -### Payouts +| Scenario | Formula | +| --- | --- | +| Conservative | `GPUs x P10 hourly price x 720 x 30-day utilization` | +| Expected | `GPUs x median hourly price x 720 x 30-day utilization` | +| Optimistic | `GPUs x P90 hourly price x 720 x 30-day utilization` | -You can view your payout history for a selected date range. Here you can generate and download invoices for your earning payouts. +P10 means the lower end of the observed market range. Median is the midpoint. P90 is an upper market signal and is usually realistic only when your machine has a clear advantage such as stronger reliability, better network, better storage, better location, datacenter verification, or scarce GPU supply. - -![](/images/console-earning-3.webp) - +## Worked Example -In the **Payout Account** section, you can set up a payout account. +Suppose a host has 4 rentable GPUs, observed or expected utilization of 55%, and comparable 30-day prices of: - -![](/images/console-earning-4.webp) - +| Price signal | Per-GPU hourly price | +| --- | --- | +| P10 | \$0.35 | +| Median | \$0.45 | +| P90 | \$0.65 | -## Common Questions +The estimates are: -### How can I have earnings as a Vast user? +| Scenario | Calculation | Gross monthly estimate | +| --- | --- | --- | +| Conservative | `4 x 0.35 x 720 x 0.55` | \$554.40 | +| Expected | `4 x 0.45 x 720 x 0.55` | \$712.80 | +| Optimistic | `4 x 0.65 x 720 x 0.55` | \$1,029.60 | -You can generate earnings by gaining Vast credit through template creation via our referral program. You can find more information about Vast's referral program [here](/guides/reference/referral-program). +Use this as a planning range, not a promise. A machine with poor reliability, weak networking, low system RAM, slow storage, bad pricing, or low demand can underperform the range. + +## What To Compare + +Compare against machines that are close to yours: + +| Factor | Why it matters | +| --- | --- | +| GPU model and GPU count | Demand and price vary heavily by GPU type and by whether renters need 1 GPU or many GPUs. | +| Verification and hosting type | Verified and datacenter-quality machines may appear more attractive to renters. | +| Region and network | Latency, bandwidth, and public reachability affect renter fit. | +| System RAM and CPU | Some workloads need more host RAM or CPU per GPU than the minimum requirements. | +| Storage type and capacity | NVMe and enough usable disk can make a listing more attractive. | +| Reliability and uptime | A stronger reliability history can support better visibility and pricing power. | +| `min_gpu`, bids, discounts, and offer end date | Listing terms affect who can rent the machine and for how long. | + +## Market Data Sources + +Start with Vast's own market data: + +- [GPU Market Metrics](/host/market-metrics) explains the dashboard, CLI, and API sources. +- [Host market dashboard](https://cloud.vast.ai/host/market/) shows current and historical GPU supply, demand, and P10/median/P90 pricing. +- [Vast hosting earnings calculator](https://vast.ai/hosting/calculator) gives a data-backed estimate using marketplace utilization and price references. + +Third-party dashboards can be useful as additional context: + +- [500.farm Vast charts](https://500.farm/vastai/charts/) + + +Third-party tools are not official Vast documentation. Treat them as comparison aids, and verify important pricing or utilization decisions against Vast market data and your own host dashboard. + + +## Actual Earnings + +For an existing host, compare forecasts with actual results: + +| Where to look | What to check | +| --- | --- | +| Host dashboard earnings | Current balance, total rental earnings, payout history, and payout account status. | +| Payout timing | Plan around 2 to 4 weeks from when earnings are posted, depending on location and payout method. Earnings are posted on Fridays around 12:00 PM Pacific time. | +| Billing history | Generate billing history with charges included when you need invoice detail. | +| Machine history | Rented hours, idle time, reliability changes, maintenance windows, and machine errors. | +| Market metrics | Whether your GPU's supply, demand, and median price moved during the same period. | + +If current earnings are below the 30-day estimate, first check utilization. A higher hourly price does not help if renters choose cheaper or healthier comparable machines. + +## Pricing Strategy + +Most hosts should start from comparable market prices, then adjust based on actual utilization: + +- New machines often need competitive pricing while they build reliability and rental history. +- A machine can justify a higher price only when it has clear advantages that renters value. +- Lowering price can improve utilization, but it can also reduce gross revenue if the machine was already consistently rented. +- Raising price affects new rental contracts only. Existing rental contracts keep the terms they accepted when they rented. +- Do not chase every short-term market move. Review trends over a week or month unless demand changes sharply. + +## Net Margin + +Gross revenue is only the top line. For a realistic business view, subtract: + +- Power and cooling. +- Internet, colocation, rack, or facility costs. +- Hardware depreciation and financing. +- Replacement parts and maintenance time. +- Payment provider, accounting, and tax-related costs. + +For payout timing, see [Host Payouts](/host/payment). For tax handling, see [Tax Guide for Hosts](/host/guide-to-taxes). + +## Related Questions + +| Question | Read next | +| --- | --- | +| How should I price my listings? | [Pricing Your Listing](/host/pricing-your-listing) | +| What should I know about min GPU, bids, and discounts? | [Pricing Your Listing: listing controls](/host/pricing-your-listing#listing-controls) | +| How do hosts get paid? | [Host Payouts](/host/payment) | +| Where does the market data come from? | [GPU Market Metrics](/host/market-metrics) | diff --git a/host/first-24-hours.mdx b/host/first-24-hours.mdx index 36c492be..24ea250e 100644 --- a/host/first-24-hours.mdx +++ b/host/first-24-hours.mdx @@ -3,28 +3,68 @@ title: "First 24 Hours After Install" sidebarTitle: "First 24 Hours" description: "Expectations after a host first installs and lists a machine." "canonical": "/host/first-24-hours" +personas: + - hobbyist + - pro-operator --- -Status: mockup placeholder. +
HobbyistPro Operator
-Personas: Hobbyist, General Pro Operator. +Use this page after installing and listing a machine to understand what to monitor first. -Stage: Operate. +
+## What does a healthy host daemon look like? -## Purpose +A healthy host daemon should run without restart loops, connect to the Vast backend, report the expected GPUs and machine state, and support instance startup. From the host dashboard or CLI, the machine should appear under the host account, have active offers when listed, avoid red machine errors, and be able to run a temporary self-test instance that reports progress. -Set expectations for the period after install, before a host understands normal platform behavior. + +## What should I monitor in the first 24 hours? -## Addresses +Monitor machine visibility, active offers, self-test status, red machine errors, daemon logs, Docker/NVIDIA runtime health, direct port reachability from outside the LAN, thermals, power, storage capacity, network stability, and first-rental startup behavior. Test common client paths such as SSH and Jupyter when applicable. -- "What now?" after listing. -- First rental confusion. -- Early reliability movement. -- Watching logs without overreacting. + +## Test your machine like a client -## Proposed Content +It is vital to test your own machine to ensure the ports and software are running smoothly. -- What should happen immediately. -- What can take time. -- What is normal versus suspicious. -- Where to watch machine status and logs. +### Set up a separate client account (GUI) + +If you want to use the website GUI, set up a new account on a different email address, add a credit card, then find your machine and create instances on it like a client. This has the benefit of showing you the entire client experience. Testing the recommended PyTorch template is vital to ensure that SSH and Jupyter are working properly. + +### Use the CLI (preferred) + +The preferred method is the [CLI](https://cloud.vast.ai/cli/). For Windows users, we suggest setting up [WSL](https://learn.microsoft.com/en-us/windows/wsl/install), which requires installing Ubuntu on your Windows machine and enabling virtualization in BIOS. + +First list your connected machines: + +```text Text +./vastai show machines +``` + +Then find the available offers for your machine ID: + +```text Text +./vastai search offers 'machine_id=12345 verified=any' +``` + +Replace 12345 with your actual machine ID. This is also the fastest way to see all the offers listed for a given machine — the website GUI stacks similar offers, so it is not easy to see all listings there. + +Take the ID number from the first column and use it to create a free instance on your own machine. This example loads the latest PyTorch image along with both Jupyter and SSH direct launch modes: + +```text Text +./vastai create instance --image pytorch/pytorch:latest --jupyter --direct --env '-e TZ=PDT -p 22:22 -p 8080:8080' +``` + +Check your [instance tab](https://cloud.vast.ai/instances/) to make sure PyTorch loaded correctly along with Jupyter and SSH. Click the \<\_ button to get the SSH command and test the direct SSH connection. Click the open button to test Jupyter. If the button is stuck "connecting", there is most likely a problem with the port configuration on the router in front of the machine; see [Network & Ports](/host/network-ports#test-ports-outside-lan). Once finished, destroy the instance. + +## What can take time + +Verification, search visibility, and first rentals do not happen instantly after listing. Passing self-test makes the machine eligible for verification, but verification timing depends on machine health, supply and demand, and platform policy. See [Understanding Verification](/host/understanding-verification#verification-time). + +## Related pages + +| Topic | Read next | +| --- | --- | +| Running the self-test | [How to Self-Test](/host/how-to-self-test) | +| Machine not appearing in search | [Why Isn't My Machine in Search?](/host/not-in-search) | +| Reliability expectations | [Reliability & Uptime](/host/reliability-uptime) | diff --git a/host/fleet-operations.mdx b/host/fleet-operations.mdx index bdc048bc..9ac9865a 100644 --- a/host/fleet-operations.mdx +++ b/host/fleet-operations.mdx @@ -1,29 +1,119 @@ --- title: "Fleet Operations" sidebarTitle: "Fleet Operations" -description: "Multi-machine host operations and monitoring concepts." +description: "Multi-machine host workflows using the CLI and SDK: bulk listing, maintenance, monitoring, and cleanup." "canonical": "/host/fleet-operations" +personas: + - headless-operator + - business-owner --- -Status: mockup placeholder. +
Headless / DCBusiness
-Personas: Headless Operator, Business Owner. +Operate many machines from one management box. Every workflow on this page composes host CLI commands that work over SSH — no console clicking per machine — and each has a [Python SDK](/host/sdk/show-machines) equivalent for automation. -Stage: Operate. +## Working at fleet scale -## Purpose +Three CLI features make fleet scripting practical: -Reserve a home for larger datacenter and multi-machine workflows. +- `vastai show machines -q` prints **only the numeric machine IDs**, so it composes into other commands. +- `vastai list machines` (plural) accepts **multiple IDs** and applies the same listing arguments to all of them. +- The global `--raw` flag returns machine-readable JSON, and `--retry N` retries flaky calls — use both in unattended scripts. -## Addresses +```bash +# All machine IDs in the fleet +vastai show machines -q -- Thin but high-value headless/fleet operator needs. -- Bulk maintenance and monitoring. -- Consistent setup across many hosts. +# Full fleet state as JSON for scripts and monitoring +vastai show machines --raw +``` -## Proposed Content +## Bulk listing and pricing updates -- Fleet assumptions. -- Bulk operation links. -- Monitoring checklist. -- When to automate versus use console workflows. +Update the listings of every machine at once by feeding the ID list into `list machines`. For example, extending all offer end dates: + +```bash +vastai list machines $(vastai show machines -q) -e 12/31/2026 --retry 6 +``` + +The same pattern works for any listing argument — on-demand price (`-g`), min bid floor (`-b`), discount rate (`-r`), min chunk (`-m`), or a rolling end date (`--duration "2 weeks"`). See [vastai list machines](/host/cli/list-machines) for all options and [Pricing Your Listing](/host/pricing-your-listing) for how to choose the values. + + +Price changes affect **new rental contracts only** — existing contracts keep their original terms. End dates are the exception: moving the offer end date **later at the same or lower price also extends existing rental contracts** ([details](/host/hosting-overview#extending-rental-contracts)). A fleet-wide end-date extension therefore extends your commitment on every active contract; if you have raised pricing, existing contracts cannot be extended. + + +## Fleet maintenance windows + +Schedule the same window across a rack or site, then audit what is scheduled: + +```bash +# Schedule a 2-hour power maintenance for every machine +for id in $(vastai show machines -q); do + vastai schedule maint "$id" --sdate 1782950400 --duration 2 --maintenance_category power +done + +# Review all scheduled windows +vastai show maints + +# Cancel if plans change +vastai cancel maint +``` + +`--sdate` is unix epoch seconds (UTC) and `--duration` is in hours; categories are `power`, `internet`, `disk`, `gpu`, `software`, or `other`. Clients on affected machines are notified so they can save their work. The policy rules — when to wait for contracts to end versus schedule a window — are in [Maintenance Windows](/host/maintenance-windows). + +## Default (background) jobs + +A default job runs your own container on a machine whenever it is idle, at a price floor you set, so unrented GPUs still do useful work: + +```bash +vastai set defjob --price_gpu 0.20 --image --args +vastai remove defjob +``` + +This performs the same action as creating a background job at [cloud.vast.ai/host/create](https://cloud.vast.ai/host/create). See [vastai set defjob](/host/cli/set-defjob). Make sure your background workload complies with the [Workload Policy](/host/workload-policy). + +## Defragmenting GPU assignments + +On multi-GPU machines, scattered single-GPU rentals can block larger multi-GPU offers. Defragmenting rearranges GPU assignments to make more multi-GPU offers available: + +```bash +vastai defrag machines $(vastai show machines -q) +``` + +See [vastai defrag machines](/host/cli/defrag-machines). + +## Monitoring the fleet + +A practical monitoring loop without a GUI: + +1. Pull fleet state with `vastai show machines --raw` and watch for red machine errors, reliability drops, and missing offers. +2. Inspect a specific machine with `vastai show machine ` ([reference](/host/cli/show-machine)). +3. After fixing an issue or finishing maintenance, rerun the self-test on the affected machine — see [How to Self-Test](/host/how-to-self-test). The self-test rents a temporary instance, so run it when the machine is idle. +4. Collect diagnostics for any failing machine with `vastai dump-logs ` — see [what to collect](/host/common-errors-diagnostics#collect-logs). + +For market-wide pricing and demand signals to inform fleet pricing, use [GPU Market Metrics](/host/market-metrics) — the `vastai metrics` commands also support `--raw`. + +## Storage cleanup across the fleet + +Expired or deleted rental contracts occasionally fail to release storage. Clean up fleet-wide: + +```bash +for id in $(vastai show machines -q); do + vastai cleanup machine "$id" +done +``` + +See [vastai cleanup machine](/host/cli/cleanup-machine). + +## Decommissioning machines + +Unlist to stop new contracts, honor remaining rental end dates, then delete — the same rules as a single machine, per [Removing or Recreating Machines](/host/removing-recreating-machines). + +## Related pages + +| Topic | Read next | +| --- | --- | +| SSH-only install for new fleet machines | [Headless Install Path](/host/headless-install) | +| Maintenance policy and client impact | [Maintenance Windows](/host/maintenance-windows) | +| Pricing strategy | [Pricing Your Listing](/host/pricing-your-listing) | +| Python automation | [SDK reference](/host/sdk/show-machines) | diff --git a/host/glossary.mdx b/host/glossary.mdx index 36c6b682..e8854c35 100644 --- a/host/glossary.mdx +++ b/host/glossary.mdx @@ -1,28 +1,123 @@ --- title: "Host Glossary" sidebarTitle: "Glossary" -description: "Definitions for host-facing Vast terms." +description: "Definitions for host-facing Vast terms, each linked to its canonical page." "canonical": "/host/glossary" +personas: + - pro-operator + - headless-operator + - business-owner + - hobbyist --- -Status: mockup placeholder. +
All host personas
-Personas: General Pro Operator, Headless Operator, Business Owner, Hobbyist. +Definitions for the terms hosts meet in the console, the CLI, and these docs. Each entry links to the page that covers the topic in depth. -Stage: Reference. +### Auto Sort -## Purpose +The default ordering of marketplace search results. It combines ranking factors with an element of randomness, which is why a machine's position varies between searches. See [Why Isn't My Machine in Search?](/host/not-in-search) -Give support, docs, and agents one place to resolve host terminology. +### CGNAT -## Proposed Terms +Carrier-grade NAT — an ISP setup where your router does not get its own public IPv4 address, so inbound connections cannot reach the host. A common reason self-test and renters cannot connect. See [Network & Ports](/host/network-ports#cgnat-starlink-ipv6) -- `vericode` -- `dlperf` -- `direct_port_count` -- reliability -- verification -- rental contract -- offer -- machine ID -- deverified +### Datacenter status / Secure Cloud + +A partner tier for machines in certified datacenters (ISO 27001 and related requirements). Granted machines get the blue datacenter label and appear in "Secure Cloud" searches. See [Datacenter Status](/host/datacenter-status) + +### Deverified + +A previously verified machine that no longer meets requirements, usually because the host software detected an error. The machine appears as unverified in search until the issue is resolved, then transitions back automatically. See [Verification Stages](/host/verification-stages#deverified) + +### Direct ports (`direct_port_count`) + +Externally reachable ports forwarded from your public IP to the host machine. The self-test requires at least 3 per listed GPU; an instance can use up to 64. See [Network & Ports](/host/network-ports#ports-per-gpu) + +### DLPerf + +Vast's estimated GPU performance score on typical deep-learning tasks (CNN/Transformer training), used to compare machines across hardware generations. See [DLPerf scoring](/guides/reference/faq/rental-types#dlperf-scoring) + +### DPH + +Dollars per hour. In host listing discussions it usually refers to the hourly price of GPU compute; the renter's total cost can also include storage and bandwidth. See [Pricing Your Listing](/host/pricing-your-listing) + +### Instance + +What a renter actually runs on your machine — a container (or VM) created from one of your offers, with its own ports, storage, and lifecycle. + +### Interruptible rental + +A lower-priority rental type that works as a bidding system: the highest bid runs and lower bids are paused. Hosts set the minimum bid they will accept. See [rental types](/guides/reference/faq/rental-types) + +### kaalia + +The Vast host daemon that runs on your machine as a systemd service. Its logs are the first place to look for daemon-side problems. See [Common Errors & Diagnostics](/host/common-errors-diagnostics#logs) + +### Machine ID + +The backend identifier for a host machine, used in CLI commands like `vastai self-test machine `. Recreating a machine can produce a new ID, so confirm which one is active before reinstalling. See [Removing or Recreating Machines](/host/removing-recreating-machines) + +### Machines tab + +The host console page listing your machines. It appears in the navigation only after your account is converted to a host account. See [Account & Hosting Agreement](/host/account-hosting-agreement#host-features-tab) + +### Min GPU / `min_chunk` (slicing) + +The smallest GPU grouping a renter can select on a multi-GPU machine, in powers of 2 down to 1. Setting it to 1 on an 8-GPU machine lets renters take 1, 2, 4, or 8 GPUs. See [Pricing Your Listing](/host/pricing-your-listing#listing-controls) + +### NAT hairpinning + +Testing a port from inside your own LAN via your public IP, which many routers handle differently than real outside traffic — so a port can look closed from inside while being reachable externally (or vice versa). Always test from a different network. See [Network & Ports](/host/network-ports#test-ports-outside-lan) + +### Offer + +A listing a host creates for a machine, defining the price, offer end date, minimum GPU chunk, and other terms renters can accept. Offers accept new rentals until their end date. See [Hosting Overview](/host/hosting-overview#offers-and-rental-contracts) + +### Offer end date / rental end date + +The offer end date is your commitment to keep the machine online and functional for new rentals. When a renter accepts the offer, it becomes that contract's rental end date (shown in the UI as "client end date") and cannot be shortened. See [Hosting Overview](/host/hosting-overview#offer-end-date) + +### On-demand rental + +The standard, highest-priority rental type at your listed price. Active on-demand rentals pause any interruptible rentals on the same resources. See [rental types](/guides/reference/faq/rental-types) + +### Reliability (score) + +The platform's measure of a machine's stable operation over time. A score above 0.90 is an eligibility gate for self-test and verification — not a ranking factor — and sustained instability can deverify a verified machine. See [Reliability & Uptime](/host/reliability-uptime) + +### Rental contract + +Created each time a renter accepts your offer. It locks in the offer's terms at that moment — price, hardware specs, rental end date — and no host action can change them afterward. See [Hosting Overview](/host/hosting-overview#the-rental-contract) + +### Reserved rental + +A longer-term prepaid rental type at a discount the host controls via the reserved discount rate. See [Pricing Your Listing](/host/pricing-your-listing#listing-controls) + +### Self-test + +A CLI diagnostic (`vastai self-test machine`) that checks the machine against minimum requirements, then rents a temporary instance on it to run CUDA, memory, NCCL, and stress workloads. Passing makes the machine eligible for verification. See [How to Self-Test](/host/how-to-self-test) + +### Unlist vs. delete + +Unlisting stops new rental contracts but leaves existing ones running until their end dates; deleting removes the machine record entirely and should only happen after active commitments are understood. See [Removing or Recreating Machines](/host/removing-recreating-machines) + +### Verification / verified + +The process that marks a machine as meeting platform standards: an automated pre-scan plus vetting by Vast staff (datacenter partners get a dedicated manual process). Verified machines are more visible to renters. See [Verification Stages](/host/verification-stages) and [Understanding Verification](/host/understanding-verification) + +### vericode + +A numeric verification-status code attached to a machine or offer. It is a status signal from Vast's verification system, not an action the host runs manually. + +`vericode=8` means **Port Networking Issues**: Vast could not verify the machine's direct public port connectivity. Common causes include closed external ports, forwarding to the wrong LAN IP, CGNAT or no inbound public IP, host firewall rules, asymmetric protocol handling, or a stale port range. + +When you see `vericode=8`, fix the public IP, router/firewall forwarding, or port range, then rerun the self-test and wait for the machine state to refresh. See [Self-Test Reference: vericode=8](/host/self-test-reference#vericode-8) and [Network & Ports](/host/network-ports). + +### Volume offer + +A storage-only offer on a machine, priced separately from GPU offers. Rented volume space is subtracted from the disk available to GPU offers. See [Hosting Overview](/host/hosting-overview#volume-offers) + +### XFS `prjquota` + +XFS project quotas — the preferred filesystem setup for Docker's data root on a host, required for per-container storage quotas. Its absence causes the common `--storage-opt is supported only for overlay over xfs with pquota` install error. See [Storage Setup](/host/storage-setup#xfs-prjquota) diff --git a/host/guide-to-taxes.mdx b/host/guide-to-taxes.mdx index d87d4968..00a4cdeb 100644 --- a/host/guide-to-taxes.mdx +++ b/host/guide-to-taxes.mdx @@ -1,13 +1,14 @@ --- title: "Tax Guide for Hosts" +sidebarTitle: "Tax Guide" createdAt: "Mon Jan 13 2025 21:20:40 GMT+0000 (Coordinated Universal Time)" updatedAt: "Wed Jan 15 2025 00:36:52 GMT+0000 (Coordinated Universal Time)" canonical: "/host/guide-to-taxes" +personas: + - business-owner --- -Personas: Business Owner. - -Stage: Decide. +
Business
**Disclaimer:** As an independent contractor, you are solely responsible for tracking your earnings and accurately reporting them in your tax filings. Vast.ai cannot provide tax advice, and we cannot verify the accuracy of any publicly available tax guidance. If you have questions about your tax obligations, please consult a tax professional. @@ -39,10 +40,12 @@ If you are an international host receiving payouts via Wise, please refer to the ## Common Questions +
### Does Vast.ai handle VAT? Vast.ai is based in California and does not currently collect or remit VAT. + ### Is VAT shown on invoices? VAT is not currently specified on Vast.ai invoices. diff --git a/host/hardware-prep.mdx b/host/hardware-prep.mdx index 90e4bb8d..91f1674f 100644 --- a/host/hardware-prep.mdx +++ b/host/hardware-prep.mdx @@ -3,22 +3,46 @@ title: "Hardware Prep" sidebarTitle: "Hardware Prep" description: "Ubuntu, BIOS, NVIDIA driver, and host preparation checklist." "canonical": "/host/hardware-prep" +personas: + - pro-operator + - headless-operator --- -Status: mockup placeholder. +
Pro OperatorHeadless / DC
-Personas: General Pro Operator, Headless Operator. +Prepare the host machine before installing the Vast host software, including OS, BIOS, driver, power, thermal, and stability checks. -Stage: Set Up. +
+## What should be ready before I run the host installer? -## Purpose +Before installing, make sure the host has supported same-type GPUs, native Ubuntu/Linux, an AVX-capable CPU, at least one physical CPU core per listed GPU, adequate RAM, fast SSD/NVMe storage, compatible GPU drivers, stable public networking, and enough direct ports. -Collect pre-install hardware and OS prep that is currently scattered across setup and troubleshooting guidance. +For verification, the self-test preflight enforces the current minimum thresholds (CUDA support, reliability gate, direct ports, PCIe bandwidth, internet bandwidth, VRAM, system RAM). The canonical list lives in [Verification Stages: requirements](/host/verification-stages#additional-requirements-for-verification). -## Proposed Content +For CPU capacity, use the physical-core rule: the host should have at least one visible physical CPU core per visible GPU. Hyperthreads and logical CPUs do not count as physical cores. -- Ubuntu version expectations. -- BIOS and virtualization settings. -- NVIDIA driver and CUDA driver-stack expectations. -- Auto-update warnings. -- Thermal, power, and stability checks. + +## What Ubuntu versions should hosts use? + +Current listing guidance requires **Ubuntu 24.04 LTS**. Confirm it works with your GPU driver, Docker, storage setup, and the Vast host installer before listing a production host. + + +## What NVIDIA driver version should I use? + +Use a stable NVIDIA driver that supports your GPU and a CUDA runtime compatible with the Vast self-test image family. Verification requires CUDA-compatible driver/runtime support for CUDA 11.8 or newer. Verify GPU visibility and driver health with `nvidia-smi` before listing. + +## BIOS, power, and stability + +- Enable virtualization and IOMMU in BIOS if you plan to support [VMs](/host/vms); check IOMMU guidance especially on AMD EPYC systems. +- Avoid riser, lane, power, or BIOS layouts that throttle PCIe bandwidth. +- Confirm power delivery and cooling can sustain all GPUs at full load for long periods. +- Disable unattended kernel and driver updates; plan updates through [Maintenance Windows](/host/maintenance-windows#automatic-updates) instead. + +## Related pages + +| Topic | Read next | +| --- | --- | +| Buying guidance and minimums | [Supported Hardware](/host/supported-hardware) | +| Disk and filesystem layout | [Storage Setup](/host/storage-setup) | +| Ports and connectivity | [Network & Ports](/host/network-ports) | +| Installing the host software | [Installing Host Software](/host/installing-host-software) | diff --git a/host/headless-install.mdx b/host/headless-install.mdx index 4e2f1d2b..28d55d7b 100644 --- a/host/headless-install.mdx +++ b/host/headless-install.mdx @@ -1,29 +1,266 @@ --- title: "Headless Install Path" sidebarTitle: "Headless Install" -description: "SSH-only and datacenter-friendly host setup path." +description: "SSH-only, Ubuntu Server install path for datacenter and remote-managed hosts." "canonical": "/host/headless-install" +personas: + - headless-operator --- -Status: mockup placeholder. +{/* DRAFT — adapted from the jjziets/vasttools community install guide. + Pending end-to-end dogfooding on a reference system before final review. */} -Personas: Headless Operator. +
Headless / DC
-Stage: Set Up. +Use this path when the host is installed and operated entirely over SSH, BMC, or IPMI — no display, keyboard, or desktop environment. It takes a clean Ubuntu Server machine to a listed Vast host from the command line. -## Purpose + +Start with a **clean install of Ubuntu 24.04.x Server** (HWE kernel recommended). During the Ubuntu installer, add OpenSSH and nothing else. For hardware requirements, check [Supported Hardware](/host/supported-hardware) first. + -Make the SSH/BMC path explicit for operators who do not use local displays or keyboards. +## Step 1: Update the system -## Addresses +```bash +sudo apt update && sudo apt upgrade -y && sudo apt dist-upgrade -y +sudo apt install update-manager-core -y +``` -- CON-1077 headless guide scope. -- Fleet or datacenter installs. -- "Docker works with GPUs, now what?" operator confusion. +If you didn't select the HWE kernel during install, install it now: -## Proposed Content +```bash +sudo apt install --install-recommends linux-generic-hwe-24.04 -y +``` -- Assumptions for SSH-only setup. -- BMC/IPMI/PXE notes. -- Non-interactive install considerations. -- Post-install checks that do not require a GUI. +Reboot after kernel changes: + +```bash +sudo reboot +``` + +## Step 2: Install NVIDIA drivers + +```bash +sudo apt install build-essential -y +sudo add-apt-repository ppa:graphics-drivers/ppa -y +sudo apt update +``` + +Find the latest available driver: + +```bash +sudo apt search nvidia-driver | grep nvidia-driver | sort -r +``` + +Install the latest stable driver (replace `560` with whatever is newest): + +```bash +sudo apt install nvidia-driver-560 -y +``` + +Reboot and verify: + +```bash +sudo reboot +nvidia-smi +``` + +## Step 3: Disable automatic updates + +Automatic updates can break drivers while clients are renting your machine ([why this matters](/host/maintenance-windows#automatic-updates)). Disable them: + +```bash +sudo apt purge --auto-remove unattended-upgrades -y +sudo systemctl disable apt-daily-upgrade.timer +sudo systemctl mask apt-daily-upgrade.service +sudo systemctl disable apt-daily.timer +sudo systemctl mask apt-daily.service +``` + +Only update manually when your machine is unlisted and idle, inside a planned [maintenance window](/host/maintenance-windows). + +## Step 4: X server config (and removing a desktop, if present) + +Vast containers need the X server configuration but not a desktop environment. On Ubuntu Server, just run: + +```bash +sudo nvidia-xconfig -a --cool-bits=28 --allow-empty-initial-configuration --enable-all-gpus +``` + +If the machine started life as Ubuntu Desktop, remove GNOME first: + +```bash +sudo apt-get update +sudo apt-get -y upgrade +sudo apt-get install -y libgtk-3-0 xinit xserver-xorg-core +sudo apt-get remove -y gnome-shell +sudo update-grub +sudo nvidia-xconfig -a --cool-bits=28 --allow-empty-initial-configuration --enable-all-gpus +``` + +## Step 5: Mount NVMe for Docker storage + +This is the most important step. Vast stores all client data at `/var/lib/docker`, which must be on a dedicated drive formatted as **XFS with `pquota`** — see [Storage Setup](/host/storage-setup#xfs-prjquota) for why. + + +The steps below **wipe the target drive**. If your OS is on `/dev/nvme0n1`, do NOT use that device. Check with `lsblk` first. + + +**5a. Identify your drives:** + +```bash +lsblk -f +``` + +Find the NVMe to use for Docker. It must be a different drive from your OS. + +**5b. Partition the drive** (replace `/dev/nvme0n1` with your device): + +```bash +sudo cfdisk /dev/nvme0n1 +``` + +In the menu: choose **gpt** if asked for a label type, select **New** (Enter for the full disk), select **Write** and type **yes**, then **Quit**. This creates a partition at `/dev/nvme0n1p1`. + +**5c. Format as XFS:** + +```bash +sudo mkfs.xfs /dev/nvme0n1p1 +``` + +Do not use `mkfs.ext4` — Vast requires XFS for per-container storage quotas. + +**5d. Create the Docker directory:** + +```bash +sudo mkdir -p /var/lib/docker +``` + +**5e. Get the drive's UUID:** + +```bash +sudo blkid /dev/nvme0n1p1 +``` + +Copy the UUID value from the output. Using the UUID is safer than device names, which can change between reboots. + +**5f. Add to `/etc/fstab`** (replace the UUID with yours): + +``` +UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 /var/lib/docker xfs rw,auto,pquota,nofail 0 0 +``` + +| Option | Purpose | +|--------|---------| +| `rw` | Read-write access | +| `auto` | Mount automatically at boot | +| `pquota` | **Required by Vast** — enables per-container storage quotas | +| `nofail` | System still boots if the drive has an issue | + +**5g. Mount and verify:** + +```bash +sudo mount -a +df -h /var/lib/docker +``` + +You should see the NVMe mounted at `/var/lib/docker` with the correct size. + +## Step 6: Enable GPU persistence mode + +Keeps GPUs initialised between jobs so they idle at low power instead of fully reinitialising each time: + +```bash +sudo bash -c '(crontab -l; echo "@reboot nvidia-smi -pm 1" ) | crontab -' +``` + +## Step 7: Install the Vast host software + +```bash +sudo apt install python3 -y +sudo wget https://console.vast.ai/install -O install +sudo python3 install YourKey +``` + +Replace `YourKey` with your API key. Copy the current install command from the official setup page while signed into your host account — do not reuse commands from old notes or another account ([why](/host/installing-host-software#install-command)). + +## Step 8: Configure GRUB (optional) + +Edit `/etc/default/grub` and set: + +``` +GRUB_CMDLINE_LINUX="amd_iommu=on nvidia_drm.modeset=0 systemd.unified_cgroup_hierarchy=false" +``` + +| Option | Purpose | +|--------|---------| +| `amd_iommu=on` | Enables IOMMU on AMD CPUs (needed for [VM support](/host/vms) and PCIe passthrough) | +| `nvidia_drm.modeset=0` | Disables NVIDIA kernel modesetting (prevents conflicts with containers) | +| `systemd.unified_cgroup_hierarchy=false` | Uses cgroup v1 (required by some Docker configurations) | + +Apply the changes: + +```bash +sudo update-grub +``` + +## Step 9: Configure networking + +Set up router/firewall port forwarding per [Network & Ports](/host/network-ports), then set the port range for client instances: + +```bash +sudo bash -c 'echo -n "40000-40019" > /var/lib/vastai_kaalia/host_port_range' +``` + +Use `echo -n` — the file must contain only the dash-separated range with no trailing newline. + +Size the range per [ports per GPU](/host/network-ports#ports-per-gpu). Test that ports are reachable **from outside your LAN** — same-LAN tests can fail from [NAT hairpinning](/host/network-ports#test-ports-outside-lan). One option: run `sudo nc -l -p PORT` on the host and check from an external network or [portchecker.co](https://portchecker.co). + +## Step 10: Fix NVML error (if needed) + +If the installer reports an NVML error, see [NVML driver/library mismatch](/host/common-errors-diagnostics#nvml-mismatch). A community-maintained patch script also exists: + +```bash +sudo wget https://raw.githubusercontent.com/jjziets/vasttools/main/nvml_fix.py +sudo python3 nvml_fix.py +``` + + +`nvml_fix.py` is a community tool, not official Vast software. Review it before running. + + +## Step 11: Reboot and verify + +```bash +sudo reboot +``` + +After reboot, check everything is healthy: + +```bash +# Check NVMe is mounted to /var/lib/docker +df -h /var/lib/docker + +# Check the Vast daemon is running +sudo systemctl status vastai + +# Check Docker is running +sudo systemctl status docker + +# Check GPUs are visible +nvidia-smi +``` + +## Step 12: List, self-test, and monitor + +1. List the machine and set pricing — [Pricing Your Listing](/host/pricing-your-listing). +2. Run the self-test from any machine with the CLI: [How to Self-Test](/host/how-to-self-test). If you run it from the same network as the host, your router must allow loopback (NAT hairpinning) — otherwise run it from a cloud VM or a mobile connection. +3. Watch the first day per [First 24 Hours After Install](/host/first-24-hours) — all checks there work over SSH. + +## Related pages + +| Topic | Read next | +| --- | --- | +| Standard (non-headless) install | [Installing Host Software](/host/installing-host-software) | +| Storage layout rationale | [Storage Setup](/host/storage-setup) | +| Multi-machine operations | [Fleet Operations](/host/fleet-operations) | +| Scheduled maintenance over SSH | [Maintenance Windows](/host/maintenance-windows) | diff --git a/host/hosting-agreement.mdx b/host/hosting-agreement.mdx index 2dc2fbdb..c30e4e35 100644 --- a/host/hosting-agreement.mdx +++ b/host/hosting-agreement.mdx @@ -1,23 +1,50 @@ --- title: "Hosting Agreement" sidebarTitle: "Hosting Agreement" -description: "Reference page for the host agreement and related expectations." +description: "Where to find the hosting agreement and what hosts commit to." "canonical": "/host/hosting-agreement" +personas: + - pro-operator + - headless-operator + - business-owner + - hobbyist --- -Status: mockup placeholder. +
All host personas
-Personas: General Pro Operator, Headless Operator, Business Owner, Hobbyist. +The canonical hosting agreement lives in the console: **[cloud.vast.ai/host/agreement](https://cloud.vast.ai/host/agreement)**. You accept it when converting your account to a host account, and it governs every offer and rental contract on your machines. -Stage: Reference. + +This page is a plain-language summary for orientation only. If this page and the agreement ever differ, the [agreement](https://cloud.vast.ai/host/agreement) and the [Terms of Service](https://vast.ai/terms) win. + -## Purpose +## Where to find and accept it -Give the Host sidebar a stable page for agreement-related links and explanations. +| Document | Where | +| --- | --- | +| Hosting agreement (canonical) | [cloud.vast.ai/host/agreement](https://cloud.vast.ai/host/agreement) | +| Acceptance flow | Linked from the first paragraph of the [host setup guide](https://cloud.vast.ai/host/setup/) during account conversion — see [Account & Hosting Agreement](/host/account-hosting-agreement) | +| Terms of Service (platform-wide) | [vast.ai/terms](https://vast.ai/terms) | -## Proposed Content +## What you commit to, in plain language -- Link to the canonical agreement in the console. -- Plain-language explanation of host commitments. -- Data isolation and contract expectations. -- Related account setup page. +By listing a machine, you create offers that clients can accept as rental contracts. For each active rental contract, you commit to: + +- Provide the hardware and services according to all the advertised specs. +- Not use the hardware for any other purpose while it is rented. +- Keep the client's data isolated and protected according to the data protection policy. +- Provide the advertised services until each rental contract's rental end date. + +For how offers become contracts and why terms lock at rental time, see [Hosting Overview: the rental contract](/host/hosting-overview#the-rental-contract). + +## Data isolation + +Renter data and workloads are off-limits: do not stop, inspect, modify, or interfere with renter containers, and do not access renter files except where a documented platform or support process requires it. The operational rules are summarized in [Workload Policy](/host/workload-policy). + +## Related pages + +| Topic | Read next | +| --- | --- | +| Accepting the agreement / account conversion | [Account & Hosting Agreement](/host/account-hosting-agreement) | +| Day-to-day policy expectations | [Workload Policy](/host/workload-policy) | +| Contract and offer lifecycle | [Hosting Overview](/host/hosting-overview) | diff --git a/host/hosting-overview.mdx b/host/hosting-overview.mdx index 87702d5b..22800f30 100644 --- a/host/hosting-overview.mdx +++ b/host/hosting-overview.mdx @@ -1,16 +1,17 @@ --- title: "Hosting Overview" sidebarTitle: "Hosting Overview" -slug: "xP4AEPJl2F6woPGcD7EWl" createdAt: "Tue Jan 14 2025 01:09:17 GMT+0000 (Coordinated Universal Time)" updatedAt: "Fri Jul 11 2025 22:44:42 GMT+0000 (Coordinated Universal Time)" "canonical": "/host/hosting-overview" +personas: + - pro-operator + - headless-operator + - business-owner + - hobbyist --- - -Personas: General Pro Operator, Headless Operator, Business Owner, Hobbyist. - -Stage: Decide. +
All host personas
Vast is a GPU marketplace. Hosts sell GPU resources on the marketplace. Hosts are responsible for: @@ -21,21 +22,11 @@ Vast is a GPU marketplace. Hosts sell GPU resources on the marketplace. Hosts ar ## Account setup and hosting agreement -You must create a new account for hosting. If you are using Vast.ai as a client, do not use the same account. A single client and hosting account is not supported and you will quickly run into issues. - -Once your account is created, open the [host setup guide](https://cloud.vast.ai/host/setup/). There is a link in the first paragraph to the hosting agreement. Read through the agreement. Once you accept, your account will then be converted to a hosting account. You will notice there is now a link to Machines in the navigation, along with some other changes. Your account can now list machines that are running the daemon software. +You must create a dedicated account for hosting — do not reuse your client account. For account conversion, the agreement flow, and Machines-tab troubleshooting, see [Account & Hosting Agreement](/host/account-hosting-agreement). ## Machine setup -The [host setup guide](https://cloud.vast.ai/host/setup/) is the official documentation for setting up a machine on Vast.ai. Read through each section closely. - -Common issues to check: - -- Make sure to test the networking. Clients require open ports to directly connect to the machine for most jobs. -- Make sure to read the section on IOMMU if you have an AMD EPYC system. -- Make sure to disable auto-updates so that your machine doesn't drop a client job to update a driver. - -Once you are ready to list your machine, come back to this guide to understand pricing and the rental contract lifecycle. +Follow the [Hosting Quickstart](/host/quickstart) for the ordered setup path: [Hardware Prep](/host/hardware-prep), [Storage Setup](/host/storage-setup), [Network & Ports](/host/network-ports), and [Installing Host Software](/host/installing-host-software). Once you are ready to list your machine, come back to this guide to understand pricing and the rental contract lifecycle. ## General concepts @@ -119,7 +110,7 @@ The on-demand price is the price per hour for the GPU rental. On demand rentals ### Interruptible min price (optional) -The interruptible price allows for the host to set the minimum interruptible price for a client to rent. Interruptibles work in a bidding system: clients set a bid price for their instance; the current highest bid is the instance that runs, the others are paused. [more info](https://vast.ai/faq#RentalTypes) +The interruptible price allows for the host to set the minimum interruptible price for a client to rent. Interruptibles work in a bidding system: clients set a bid price for their instance; the current highest bid is the instance that runs, the others are paused. [more info](/guides/reference/faq/rental-types) ### Reserved Discount Pricing Factor @@ -129,7 +120,7 @@ The reserved discount pricing is determined by the hosts. If you intend to encou ![](/images/hosting-overview.webp) -Once that filter is selected, hosts who offer that discount will become easily visible. Hover over the rental button to see the discount rates that are offered. The original vs. the updated price will be shown as denoted by a stikethrough in the original amount: +Once that filter is selected, hosts who offer that discount will become easily visible. Hover over the rental button to see the discount rates that are offered. The original vs. the updated price will be shown as denoted by a strikethrough in the original amount: ![](/images/hosting-overview-2.webp) @@ -199,122 +190,12 @@ If you have raised the pricing, you cannot extend the current rental contracts. ## Testing your own machine -It is vital to test your own machine to ensure the ports and software is running smoothly. - -### Setup a separate client account - -There are two supported ways to test your own machine. If you want to use the website GUI, you will need to setup a new account on a different email address, add a credit card and then find your machine and create instances on it like a client. This has the benefit of showing you the entire client experience. Testing the recommended Pytorch template is vital to ensure that SSH and Jupyter are working properly. - -### Use the CLI (preferred) - -The preferred method of testing your own machine is to run the [CLI](https://cloud.vast.ai/cli/). For Windows users, we suggest setting up [WSL](https://learn.microsoft.com/en-us/windows/wsl/install) which will require you to install Ubuntu on your Windows machine and change your bios settings to allow virtualization. Then you can start an Ubuntu terminal and run the CLI. - -To rent your own machine you will need to first search the offers with your machine ID to find the ID and then create an instance using that ID. The show machine command will show all your connected machines. - -```text Text -./vastai show machines -``` - -Then for each machine id you will need to find the available instance IDs. - -```text Text -./vastai search offers 'machine_id=12345 verified=any' -``` - -Replace 12345 with your actual machine ID in question. You can see the number of available listings as well as information about the machine. This is the fastest way to also see all the offers listed for a given machine. The website GUI stacks similar offers and so it is not easy to see all the listings for a given machine. That is not a problem for the CLI. - -Take the ID number from the first column and use that to create a free instance on your own machine. This example loads the latest pytorch image along with both jupyter and ssh direct launch modes. - -```text Text -./vastai create instance --image pytorch/pytorch:latest --jupyter --direct --env '-e TZ=PDT -p 22:22 -p 8080:8080' -``` - -You can then look at your [instance tab](https://cloud.vast.ai/instances/) to make sure that pytorch loaded correctly along with jupyter and ssh. Click on the \<\_ button to get the ssh command to connect to the instance. Test the direct ssh command. Click on the open button to test jupyter. If the button is stuck "connecting" then there is most likely a problem with the port configuration on the router in front of the machine. Once finished, destroy the instance. +It is vital to test your own machine to ensure the ports and software are running smoothly. See [First 24 Hours After Install: test your machine like a client](/host/first-24-hours#test-like-a-client) for the GUI and CLI walkthroughs. ## Maintenance -The proper way to perform maintenance on your machine is to wait until all active rental contracts have ended or the machine has no running instances. - -Unlisting the offer will prevent new rental contracts from being created, but does not affect existing ones. However if you have active rental contracts, you could set the offer end date to match the latest rental end date, allowing new clients to rent instances that end at the same date. Once the end date is reached, you can then unlist the machine and then perform maintenance. - -Remember that a single machine may have multiple active rental contracts from different clients, each with its own rental end date. All rental contracts must be honored, you cannot take the machine offline until every active rental contract has ended. - -For unplanned or unscheduled maintenance, use the CLI and the schedule maint command. That will notify the client that you **have** to take the machine down and that they should save their work. You can specify a date and duration. - -## Uninstalling - -To uninstall, use the Vast uninstall script located at https://s3.amazonaws.com/vast.ai/uninstall. +The proper way to perform maintenance on your machine is to wait until all active rental contracts have ended or the machine has no running instances. For planning details, scheduling, and what clients see, read [Maintenance Windows](/host/maintenance-windows). For unlisting, deleting, recreating, or uninstalling the host software, see [Remove or Recreate](/host/removing-recreating-machines). ## Common Questions -### How do I host my machine(s) on Vast? How can I rent my PC? - -Hosting on Vast will require some Linux knowledge, as you will be maintaining a server. Our setup guide is [here](https://vast.ai/console/host/setup/). After the first paragraph of the guide there is a link to the hosting agreement. Once you agree, your account will be converted to a hosting account. You can review our [FAQ](https://vast.ai/faq/#Hosting-General) that answers many of your hosting questions. - -### How do I get an invoice? - -You can create an invoice by going to the "Billing" page, and then click the box for "Include Charges" under "Generate Billing History". - -### How do I check if my machine is listed? - -If your machine seems unlisted, try this command `vastai search offers 'machine_id=MACHINE_ID verified=any'` to see if the CLI finds it. If there is a result, your machine is properly listed - -### Can you verify my machine? - -Verification is conducted in a randomized and automated fashion. We only run manual verification tests are for datacenters and high end machines. - -### How does verification work? - -Verification is mostly for higher end machines, mining rigs may never be verified. Verification is also based on supply vs demand and is machine/gpu specific. Right now the only machines which can expect fast verification are \$10k+: H100 or A100 80GB - if not tested quickly in a day or so let us know. 8x4090, 4xA6000 - should be tested in less than a week, especially if you have a number of them The only manual verification tests are for datacenters and high end machines. For everything else we run more random auto verification roughly about once a week. For datacenter partner inquiries email us at [contact@vast.ai](mailto:contact@vast.ai) directly. - -### How do I gain datacenter status? - -To apply for datacenter status we have a number of requirements. There is a minimum number of servers and the datacenter where the equipment is located will need to have a third party certification such as ISO 27001. Please read the complete requirement list and application instructions [here](/host/datacenter-status). - -### How do I uninstall vast from my machine? - -You can use the [uninstall script](https://s3.amazonaws.com/vast.ai/uninstall) - -### What is this red error message on my machine? - -If the hosting software detects and error, that error message will be listed on your machine in the machines page. Once the cause of the error has been resolved, most error messages will be automatically cleared after 1-2 hours. The quickest way to learn more about resolving specific error messages is to check out the hosting channels in [our discord](https://discord.gg/hSuEbSQ4X8). - -### Why is my machine not listed? - -You won't be able to see it on the GUI right away, but you can search using the [CLI](/guides/instances/managing-instances). - -### Can I send a message to a client using my machine letting them know that I fixed an issue that they were having? - -No, there is not an established process for hosts to message clients on Vast. - -### I fear I will decrease my reliability from restarting my machine and potentially lose my verification. - -Your machine's reliability does not directly affect your verification standing. Verification is independent of reliability. Though, whenever taking your machine offline and working on it you should procede with caution as it is easy to introduce new issues or errors that will cause your machine to be de-verified. - -### How much can I make hosting on Vast? - -To get an understanding of prices, check our [Market Stats page](https://cloud.vast.ai/host/market/). You'll need to be signed in as a host with at least one registered machine to view it. - -### Why did the reliability on my machine decrease? - -If the machine loses connection or if there is a client instance that does not want to start the machine's reliability will drop. - -### How do I minimize my reliability dropping? - -Do not take your machine offline. If you must take your machine offline, minimize the time you have it offline. Note: reliability takes into account the average earnings of the machine, and machines with less earnings get penalized less from offline time. - -### If someone has already used an image on my machine does redownload happen or is the system smart? - -Prior images are cached. - -### My storage for clients is somehow full. I just have a few jobs stored in my server and most of them are old and didn't delete once the job finished. A lot of them are really old, can I remove them to free up some space? - -We suggest that you try cleaning up the docker build cache, as it sometimes frees up far more space than it claims. You can also clean up old unused images. - -### I can't find my machine? - -If your machine seems unlisted, try this command `vastai search offers 'machine_id=MACHINE_ID verified=any'` to see if the CLI finds it. If there is a result, your machine is properly listed. - -### Why can't I see my machine on the Search page in the console? - -There are over 10,000+ listings on Vast, and search only displays a small subset. You will usually not be able to find any one specific machine through most normal searches. This is expected and intentional behavior of our system. You can use `vastai search offers 'machine_id=MACHINE_ID verified=any'`, to see your machine's listing. If you want to get an understanding of the machines ranking above yours you can use very narrow filters to see what similar machines are ranking above you. For example, something like: `vastai search offers 'gpu_name=RTX_4090 cpu_ram>257 cpu_ram<258'` is a decently constrained search that will most likely include a given machine you are looking for (that fits these filters) amongst others that are similar. Keep in mind our Auto Sort that `search offers` defaults to is comprised of both ranking various factors as well as an element of randomness. +Use the [Common Host Questions index](/host/common-host-questions) for support-linkable answers about setup, listing visibility, verification, payouts, reliability, storage, and operations. diff --git a/host/how-to-self-test.mdx b/host/how-to-self-test.mdx index 81d50a48..87e6cb56 100644 --- a/host/how-to-self-test.mdx +++ b/host/how-to-self-test.mdx @@ -1,19 +1,21 @@ --- title: "How to Self-Test" +sidebarTitle: "How to Self-Test" createdAt: "Mon Nov 25 2025 00:00:00 GMT+0000 (Coordinated Universal Time)" updatedAt: "Mon Nov 25 2025 00:00:00 GMT+0000 (Coordinated Universal Time)" "canonical": "/host/how-to-self-test" +personas: + - pro-operator + - headless-operator --- - -Personas: General Pro Operator, Headless Operator. - -Stage: Verify & List. +
Pro OperatorHeadless / DC
## Minimal Requirements for Verification Before your machine can be verified on Vast.ai, it must meet all minimum quality and reliability benchmarks. Verification confirms that your machine is stable, performant, and properly configured to run client workloads. +The canonical threshold list lives in [Verification Stages: requirements](/host/verification-stages#additional-requirements-for-verification). **Note:** Meeting these minimum requirements makes your machine eligible for verification, but does not automatically guarantee verification. @@ -36,7 +38,9 @@ During the self-test, the following components and conditions are verified: * System RAM and CPU performance * Overall machine reliability under simulated workloads -A short test workload will be executed to assess actual runtime performance. +The self-test first checks whether the listed machine meets minimum requirements before renting a temporary diagnostic instance. If preflight passes, the CLI rents a temporary instance, starts the self-test image, polls runtime progress, runs system requirement checks, a CUDA ResNet workload, ECC memory allocation, NCCL, and combined CPU/GPU stress, then reports the result and destroys the temporary instance. The runtime system requirements stage checks that each GPU has at least 98% free VRAM, system RAM is at least 95% of total GPU VRAM capped around 2 TB, and visible physical CPU cores are at least the visible GPU count. + +Passing self-test makes the machine eligible for verification, but does not guarantee immediate verification. **Tip:** Ensure no other jobs or instances are running during the self-test for the most accurate results. @@ -51,7 +55,7 @@ Follow the official setup guide to install the Vast CLI: ### Step 1: Set Your API Key -1.1 Get your API key: [API Keys Documentation](https://docs.vast.ai/guides/reference/keys#api-keys) +1.1 Get your API key: [API Keys Documentation](/guides/reference/keys#api-keys) 1.2 Authenticate your CLI with your Vast.ai account: @@ -93,11 +97,17 @@ If the test passes, you’ll see: If the test fails: * The CLI will display detailed reasons for failure. -* Apply the suggested fixes and rerun the test. +* Look up the exact error string in the [Self-Test Reference](/host/self-test-reference), apply the suggested fixes, and rerun the test. If the test says the machine is "not found or not rentable": -* Try un-listing your machine, then listing it again. +* Check whether the machine is rented, offline/unlisted, below the reliability threshold, missing active offers, or hidden from your API key: + +``` +vastai search offers 'machine_id= rentable=any rented=any' +``` + +* See [Self-Test Failures: machine not found or not rentable](/host/self-test-reference#machine-not-rentable) for the possible root states and remediation path. * Ensure your machine has no missing data in your machines page, such as upload and download speed, RAM, or ports. ### Optional: Ignore Requirements Mode diff --git a/host/installing-host-software.mdx b/host/installing-host-software.mdx index 62bafcc1..be0cef1c 100644 --- a/host/installing-host-software.mdx +++ b/host/installing-host-software.mdx @@ -3,29 +3,36 @@ title: "Installing the Vast Host Software" sidebarTitle: "Install Host Software" description: "Canonical install guide for the Vast host daemon and setup script." "canonical": "/host/installing-host-software" +personas: + - pro-operator + - headless-operator + - hobbyist --- -Status: mockup placeholder. +
Pro OperatorHeadless / DCHobbyist
-Personas: General Pro Operator, Headless Operator, Hobbyist. +Install the Vast host software from the official setup flow, then verify that the daemon, Docker, storage, and GPU runtime are healthy. -Stage: Set Up. +## Before you install -## Purpose +Work through [Hardware Prep](/host/hardware-prep#install-prerequisites) and [Storage Setup](/host/storage-setup) first. Your account must already be host-enabled with the agreement accepted; see [Account & Hosting Agreement](/host/account-hosting-agreement). -Create the missing high-volume install guide and absorb findings from the installer investigation. +
+## Where should I copy the install command from? -## Addresses +Copy the current install command from the official Vast host setup page after your account is host-enabled. The command may include account-specific token or API-key material, so do not reuse commands from old notes, screenshots, third-party guides, or another account. -- Installer failures. -- Host identify/API key errors. -- `--no-docker` versus interactive installs. -- `vast_host_install.log`. -- `kaalia` systemd service checks. + +## Why did the install script fail? -## Proposed Content +Common causes include an expired or stale setup command, a truncated token or API key, an account that has not fully converted to host mode, an interrupted binary download, a deprecated endpoint, an executable or service failure such as `203/EXEC`, Docker/cgroup issues, or storage quota/filesystem mismatch. -- Pre-install checklist. -- Official install path. -- Common root causes and exact fixes. -- How to collect logs before asking for help. +Re-copy the install command from the official setup page, confirm the account is host-enabled, then check the installer and daemon logs before retrying. + +## Logs and diagnostics + +Check `vast_host_install.log` for installer output and the `kaalia` systemd service for daemon health. For log locations and diagnostic bundles, see [Common Errors & Diagnostics](/host/common-errors-diagnostics#logs). + +## After the install + +Confirm the machine appears under your host account, then continue with [How to Self-Test](/host/how-to-self-test) and [First 24 Hours](/host/first-24-hours#healthy-daemon). diff --git a/host/maintenance-windows.mdx b/host/maintenance-windows.mdx index efacdb4a..775c977b 100644 --- a/host/maintenance-windows.mdx +++ b/host/maintenance-windows.mdx @@ -3,28 +3,35 @@ title: "Maintenance Windows" sidebarTitle: "Maintenance Windows" description: "How hosts plan maintenance without disrupting active contracts." "canonical": "/host/maintenance-windows" +personas: + - pro-operator + - headless-operator --- -Status: mockup placeholder. +
Pro OperatorHeadless / DC
-Personas: General Pro Operator, Headless Operator. +Use maintenance windows to plan host work without surprising active renters. -Stage: Operate. +
+## How should I handle maintenance? -## Purpose +Wait until active rental contracts have ended or there are no running instances before planned maintenance. Unlisting prevents new rental contracts, but it does not end existing contracts. Always honor active rental end dates. -Make scheduled maintenance visible as an operating workflow. +If you have active rental contracts, you can set the offer end date to match the latest rental end date, allowing new clients to rent instances that end at the same time. Once the end date is reached, unlist the machine and perform the maintenance. -## Addresses +Remember that a single machine may have multiple active rental contracts from different clients, each with its own rental end date. You cannot take the machine offline until every active rental contract has ended. -- Maintenance window tickets. -- Time-zone confusion. -- Reboot timing and contract draining. -- CLI schedule/cancel maintenance usage. +For unplanned or unscheduled maintenance, schedule a maintenance window from the CLI. That notifies clients that you **have** to take the machine down and that they should save their work; you can specify a date and duration. See [vastai schedule maint](/host/cli/schedule-maint) and [vastai cancel maint](/host/cli/cancel-maint). -## Proposed Content + +## Should I disable automatic updates? -- When to use a maintenance window. -- How to schedule and cancel. -- What clients see. -- What not to do during active rentals. +Avoid unattended kernel or GPU driver changes during active rentals. Driver and kernel updates can break running jobs or leave the host in a driver/library mismatch state until rebooted. Plan updates during maintenance windows, then verify `nvidia-smi`, Docker GPU access, and self-test behavior before accepting new rentals. + +## Related pages + +| Topic | Read next | +| --- | --- | +| Contract and offer end dates | [Hosting Overview](/host/hosting-overview#offer-end-date) | +| Reliability impact of downtime | [Reliability & Uptime](/host/reliability-uptime) | +| Removing a machine entirely | [Removing or Recreating Machines](/host/removing-recreating-machines) | diff --git a/host/market-metrics.mdx b/host/market-metrics.mdx index ff1277b6..91e5b818 100644 --- a/host/market-metrics.mdx +++ b/host/market-metrics.mdx @@ -2,11 +2,12 @@ title: "GPU Market Metrics" sidebarTitle: "Market Metrics" description: "Track GPU supply, demand, pricing, and locations across the Vast marketplace" +personas: + - business-owner + - pro-operator --- -Personas: Business Owner, General Pro Operator. - -Stage: Verify & List. +
BusinessPro Operator
Vast provides real-time and historical data on GPU supply, demand, pricing, and geographic distribution across the marketplace. You can use this data to make informed decisions about pricing your machines and understanding demand for specific GPU types. diff --git a/host/network-ports.mdx b/host/network-ports.mdx index abb07e65..075fb30f 100644 --- a/host/network-ports.mdx +++ b/host/network-ports.mdx @@ -3,29 +3,47 @@ title: "Network & Ports" sidebarTitle: "Network & Ports" description: "Port forwarding, CGNAT, public IP, IPv6, and host connectivity guidance." "canonical": "/host/network-ports" +personas: + - pro-operator + - headless-operator --- -Status: mockup placeholder. +
Pro OperatorHeadless / DC
-Personas: General Pro Operator, Headless Operator. +Configure public networking, direct ports, firewalls, and router forwarding before verification. -Stage: Set Up. +
+## How many direct ports are required per GPU? -## Purpose +The self-test requires at least 3 direct ports per listed GPU. -Give network and port issues their own canonical page. +Vast maps a maximum of **64 ports per instance**, so the useful ceiling scales with how many instances the machine can host. For example, a 4-GPU machine sliced into single-GPU instances can make use of up to 256 mapped ports (64 per instance). Mapping more than 64 direct ports per listed GPU is unnecessary and is not a self-test requirement. -## Addresses + +## Do I need TCP and UDP forwarding? -- CGNAT and no-public-IP failures. -- NAT hairpinning during self-test. -- `vericode=8` style connectivity failures. -- Direct port count and port range confusion. +The self-test progress service uses container port `5000/tcp`, and the CLI connects to the mapped external public IP and port. Keep TCP and UDP forwarding consistent for your direct port range where your network setup requires both protocols. -## Proposed Content + +## What if I am behind CGNAT, Starlink, IPv6-only, or no public IP? -- Required direct ports per GPU. -- Why TCP and UDP forwarding must be symmetric. -- How to test from outside the host LAN. -- Public IP, CGNAT, Starlink, and IPv6 caveats. -- Link from self-test timeout failures. +Vast host instances need direct public connectivity to mapped ports. CGNAT, many residential Starlink setups, IPv6-only service without compatible inbound reachability, and networks without a public inbound path can prevent clients and the self-test from reaching the host. + +Compare your router WAN IP with your public IP, test from outside your LAN, and ask your ISP for public inbound connectivity if needed. + + +## How should I test ports from outside my LAN? + +Test the external public IP and mapped port from a different network, not only from the host's LAN. Same-LAN tests can fail because of NAT hairpinning even when the port is reachable externally. If the CLI reports a tested external IP:port, troubleshoot that exact mapping first and confirm the router or firewall forwards it to the host machine's LAN address. + +## Connectivity failures during self-test + +Self-test timeouts and [`vericode=8`](/host/glossary#vericode) port errors are usually network-path problems, not hardware problems. See [Self-Test Failures: vericode=8](/host/self-test-reference#vericode-8) and [Self-Test Failures: no response for 120s](/host/self-test-reference#no-response-120s). + +## Related pages + +| Topic | Read next | +| --- | --- | +| Network suitability before buying | [Supported Hardware](/host/supported-hardware#network) | +| Running the self-test | [How to Self-Test](/host/how-to-self-test) | +| Decoding failures | [Self-Test Reference](/host/self-test-reference) | diff --git a/host/not-in-search.mdx b/host/not-in-search.mdx index 8c1054a5..074308ba 100644 --- a/host/not-in-search.mdx +++ b/host/not-in-search.mdx @@ -3,28 +3,47 @@ title: "Why Isn't My Machine in Search?" sidebarTitle: "Not in Search" description: "Troubleshooting machine visibility in marketplace search." "canonical": "/host/not-in-search" +personas: + - pro-operator + - headless-operator + - business-owner + - hobbyist --- -Status: mockup placeholder. +
All host personas
-Personas: General Pro Operator, Business Owner, Hobbyist. +Use this page when a machine is listed but does not appear where you expect in marketplace search. -Stage: Verify & List. +## Listed and visible are different things -## Purpose +Separate "listed" from "visible in a normal broad search." There are over 10,000 listings on Vast, and search only displays a small subset. Search can be affected by ranking, grouping, filters, verification state, offer state, rental state, reliability, price, supply and demand, or machine errors. -Separate search visibility from verification and self-test so hosts can self-diagnose. +
+## Check the machine directly -## Addresses +Inspect the machine with CLI filters such as `machine_id=MACHINE_ID`, and include states like `verified=any`, `rentable=any`, or `rented=any` where appropriate: -- Machine not visible in search. -- Bundling and disabled bundling confusion. -- Deverified or low-demand machines. -- Supply/demand queue expectations. +```bash +vastai search offers 'machine_id=MACHINE_ID verified=any rentable=any rented=any' +``` -## Proposed Content +If the CLI returns a result, the machine is properly listed. Then check whether the machine is rented, unverified or deverified, below the reliability threshold, has zero active offers, has offer-side errors, or is offline/unlisted. -- How to search by machine ID. -- Reasons a listed machine may not appear. -- Difference between listing, verification, and ranking. -- Links to verification and pricing pages. +## Comparing your ranking + +To understand which machines rank above yours, use narrow filters that match your hardware, for example: + +```bash +vastai search offers 'gpu_name=RTX_4090 cpu_ram>257 cpu_ram<258' +``` + +The default Auto Sort combines ranking factors with an element of randomness, so position varies between searches. + +## Related pages + +| Topic | Read next | +| --- | --- | +| Common question index | [Common Host Questions](/host/common-host-questions) | +| Verification state | [Verification Stages](/host/verification-stages) | +| Pricing competitiveness | [Pricing Your Listing](/host/pricing-your-listing) | +| Self-test rentability errors | [Self-Test Failures](/host/self-test-reference#machine-not-rentable) | diff --git a/host/payment.mdx b/host/payment.mdx index 93f21f5a..44d570b3 100644 --- a/host/payment.mdx +++ b/host/payment.mdx @@ -4,27 +4,98 @@ sidebarTitle: "Host Payouts" createdAt: Mon Jan 13 2025 21:20:40 GMT+0000 (Coordinated Universal Time) updatedAt: Mon Jan 13 2025 21:31:15 GMT+0000 (Coordinated Universal Time) "canonical": "/host/payment" +personas: + - business-owner --- +
Business
-Personas: Business Owner. +Manage your payouts from the **Earnings** page in the console. This page explains what each dashboard section means, how payout timing works, and how to set up a payout account. For tax forms and withholding, see the [Tax Guide for Hosts](/host/guide-to-taxes). -Stage: Operate. +## The Earnings page + +![](/images/console-earning.webp) + +The Earnings page gives you a transparent view of your rental and referral performance and accumulated rewards: + +- **Current Balance**: the amount you've earned so far but **haven't been paid out yet**. It keeps growing as your machines are rented and your referrals use the platform. +- **Total Earnings**: your **lifetime earnings** — the total amount earned since you started hosting or joined the earnings program. It includes both paid and unpaid amounts. +- **Total Referral Count**: the total users who created accounts through your referral link. See the [referral program](/guides/reference/referral-program). +- **Total Rental Earnings** (host only): the total lifetime amount you've earned from your machines being rented on the platform. +- **Total Referral Earnings** (host only): the total lifetime amount you've earned from all your referrals. + +The **Earning Chart** section provides a visual overview of your earning history, and the **Template Performance** chart displays earnings history from templates. + + +![](/images/console-earning-2.webp) + + +
+## Payout history and invoices + +You can view your payout history for a selected date range, and generate and download invoices for your earning payouts. + + +![](/images/console-earning-3.webp) + + +To create a billing-history invoice, open the **Billing** page and check **Include Charges** under **Generate Billing History**. + +## Setting up a payout account + +In the **Payout Account** section, set up the account your payouts are sent to (PayPal, Wise, Stripe, or another supported provider). + + +![](/images/console-earning-4.webp) + ## Common Questions + ### When will I get paid? -It takes 2 weeks to get your first payout. The pay period ends and goes pending, then you are paid for that pay period the following Friday. +Payout timing depends on your location and payout method. A practical expectation is **2 to 4 weeks** from when earnings are posted until funds arrive with your payout provider. +Earnings are posted on Fridays around **12:00 PM Pacific time** (PDT during daylight saving time). Payment is generally scheduled about **2 weeks after the amount is posted**. After Vast sends the payment list, PayPal, Wise, Stripe, or another payout provider may take additional time to settle the funds to your account. + + +### I see my invoice is marked as Pending. What does this mean? + +A pending invoice has been generated but has not yet entered the payment phase. Earnings are posted on Fridays around 12:00 PM Pacific time, and payment is generally scheduled about two weeks after the amount is posted. After payment is sent, the payout provider may still need time to settle the funds. + + +### Can Vast.ai send my payout by direct bank transfer? + +Use the payout providers available in the **Payout Account** section, such as PayPal, Wise, Stripe, or another supported provider shown in the console. Direct ACH, SWIFT, or wire-transfer payouts outside the supported payout-provider flow are not available. + + +### Why is my account not generating invoices? -### Can I generate an invoice? +Invoices depend on payout setup and threshold state. Confirm that your payout account is connected and verified, that any required tax or identity information is complete, and that your balance has reached the minimum payout threshold. -You can create an invoice by going to the "Billing" page, and then click the box for "Include Charges" under "Generate Billing History". + +### Can I generate an invoice manually? + +You can view and download payout records from **Earnings -> Payout History**. For billing-history invoices, open the **Billing** page and check **Include Charges** under **Generate Billing History**. To customize invoice details, update **Settings -> Invoice Information**. + + +### How can I have earnings as a Vast user? + +Hosts can earn from machine rentals. Vast users may also have referral or template-related earnings; see the [referral program](/guides/reference/referral-program) for details. ### How much can I make hosting on Vast? -To get an understanding of prices, check our [Market Stats page](https://cloud.vast.ai/host/market/). You'll need to be signed in as a host with at least one registered machine to view it. +Estimate with the [Earnings & Pricing Model](/host/earning) and [GPU Market Metrics](/host/market-metrics). You can also check the [Market Stats page](https://cloud.vast.ai/host/market/) — you'll need to be signed in as a host with at least one registered machine to view it. + +## Related pages + +| Topic | Read next | +| --- | --- | +| Tax forms by payout provider | [Tax Guide for Hosts](/host/guide-to-taxes) | +| Revenue estimation and pricing | [Earnings & Pricing Model](/host/earning) | +| Referral earnings | [Referral program](/guides/reference/referral-program) | diff --git a/host/persona-decision-guide.mdx b/host/persona-decision-guide.mdx index 490d8181..34ffde01 100644 --- a/host/persona-decision-guide.mdx +++ b/host/persona-decision-guide.mdx @@ -1,30 +1,93 @@ --- title: "Is Vast for Me?" sidebarTitle: "Is Vast for Me?" -description: "Persona decision guide for prospective hosts." +description: "Decision guide for prospective Vast.ai hosts." "canonical": "/host/persona-decision-guide" +personas: + - hobbyist + - business-owner --- -Status: mockup placeholder. +
HobbyistBusiness
-Personas: Hobbyist, Business Owner. +Use this page before buying hardware, repurposing a machine, or starting an install. Hosting on Vast can work well when you have suitable hardware, stable networking, and enough Linux/server comfort to operate the machine yourself. -Stage: Decide. + +Vast is a GPU marketplace, not a managed hardware setup service. Hosts are responsible for their own machine, operating system, drivers, storage, networking, uptime, pricing, and maintenance. + -## Purpose +## Good Fit -Set expectations before someone buys hardware or starts an install. +Hosting is more likely to be a good fit if you can say yes to most of these: -## Addresses +- You have, or plan to buy, [supported hardware](/host/supported-hardware). +- The host can run native Ubuntu/Linux and stay dedicated to Vast while rented. +- The GPUs are the same type and have enough VRAM for current self-test requirements. +- You have stable power, cooling, storage, and public inbound networking. +- You are comfortable troubleshooting Linux, Docker, GPU drivers, PCIe, and routers. +- You can keep the machine online through active rental contracts. +- You are willing to adjust pricing based on market data and utilization. -- New host "what do I do next?" tickets. -- Hosts expecting white-glove setup support. -- Hobbyist confusion around Windows, gaming rigs, consumer networking, and earnings. +## Wait Or Reconsider -## Proposed Content +Pause before hosting if any of these describe your setup: -- Who should host on Vast. -- Who should not host yet. -- What Vast does and does not support. -- What each persona should read next. -- Clear pointer to Discord/community channels. +| Situation | Why it is risky | +| --- | --- | +| You want to host from Windows or WSL | WSL can help you run the CLI from a client machine, but it is not the supported host operating system. | +| You are behind CGNAT, IPv6-only service, Starlink without inbound reachability, or blocked ports | Renters and self-test need direct inbound connectivity to mapped ports. | +| You have mixed GPUs, very old GPUs, or low-VRAM GPUs | Mixed and low-demand hardware can fail checks or be unattractive to renters. | +| You expect Vast support to configure the machine for you | Vast does not provide hands-on setup support for local Linux, BIOS, driver, Docker, storage, power, thermal, or router work. | +| You need guaranteed verification, search placement, rental volume, or earnings | Passing requirements makes a machine eligible; it does not guarantee business results. | +| The machine is also your daily gaming or workstation machine | Rented workloads need a stable dedicated host and can use the GPU heavily for long periods. | + +## Choose Your Path + +| If you are... | Start with | Then read | +| --- | --- | --- | +| New to hosting | [Hosting Quickstart](/host/quickstart) | [Supported Hardware](/host/supported-hardware), [Account & Hosting Agreement](/host/account-hosting-agreement) | +| Checking a possible hardware purchase | [Supported Hardware](/host/supported-hardware) | [Earnings & Pricing Model](/host/earning), [Hardware Prep](/host/hardware-prep) | +| A Linux-comfortable operator | [Hardware Prep](/host/hardware-prep) | [Install Host Software](/host/installing-host-software), [Network & Ports](/host/network-ports), [How to Self-Test](/host/how-to-self-test) | +| Running machines without local displays | [Headless Install](/host/headless-install) | [Fleet Operations](/host/fleet-operations), [Maintenance Windows](/host/maintenance-windows) | +| Evaluating hosting as a business | [Earnings & Pricing Model](/host/earning) | [GPU Market Metrics](/host/market-metrics), [Pricing Your Listing](/host/pricing-your-listing), [Host Payouts](/host/payment), [Tax Guide for Hosts](/host/guide-to-taxes) | + +## Decision Checklist + +Before continuing, confirm: + +1. Hardware: GPU model, VRAM, CPU, RAM, PCIe, storage, and network match the [Supported Hardware](/host/supported-hardware) guidance. +2. Operating system: the host can run native Ubuntu/Linux. +3. Account: you will use a dedicated host account, not the same account you use as a renter. +4. Network: you can forward enough direct ports from a public inbound path to the host. +5. Operations: you can keep the machine stable, cool, powered, and online during rental contracts. +6. Economics: you have checked [Earnings & Pricing Model](/host/earning), compared similar listings, and understand that earnings depend on demand, price, reliability, and utilization. +7. Support expectations: you can collect logs and diagnostics, and you understand which issues are host responsibilities. + +## Common Questions + +| Question | Short answer | +| --- | --- | +| [What hardware is supported?](/host/supported-hardware) | Use dedicated Ubuntu/Linux hosts with supported same-type GPUs, AVX-capable CPU, enough physical CPU cores, RAM, storage, PCIe, networking, and direct ports. | +| [What hardware or OS should I avoid?](/host/supported-hardware#unsupported-or-discouraged-setups) | Avoid Windows/WSL as the host OS, mixed GPUs, low-VRAM or very old GPUs, CPUs without AVX, and machines without inbound public networking. | +| [What is the first-time setup path?](/host/quickstart) | Check hardware and networking, create a host account, prepare the machine, install the host software, list, self-test, then monitor verification and rentals. | +| [Do I need a separate host account?](/host/account-hosting-agreement#separate-host-account) | Yes. Use a dedicated host account. Do not combine client rental and host operations in the same account. | +| [What if I do not have a public IP?](/host/network-ports#cgnat-starlink-ipv6) | CGNAT, blocked inbound ports, and incompatible IPv6-only setups can prevent clients and self-test from reaching the host. | +| [How should I price listings?](/host/pricing-your-listing) | Compare similar active listings, use market metrics, and adjust based on utilization, reliability, GPU model, and demand. | +| [How do hosts get paid?](/host/payment) | Payout timing and settlement depend on the pay period, invoice state, and payout provider. | +| [What should go to Vast support?](/host/common-errors-diagnostics#escalate-support) | Escalate account, agreement, backend machine record, payout, API permission, or platform-state mismatches. Local hardware and network setup remain host responsibilities. | + +## What Vast Does And Does Not Do + +Vast provides the marketplace, host software, listing tools, verification/self-test workflow, docs, CLI/API/SDK, and community channels. + +Hosts provide and operate the machine. That includes: + +- Hardware purchase and assembly. +- Ubuntu/Linux installation. +- BIOS, PCIe, power, thermal, and storage setup. +- NVIDIA/AMD driver health. +- Docker and GPU runtime health. +- Router, firewall, public IP, and port forwarding. +- Pricing, maintenance planning, and uptime. + +For peer help, see [Discord & Community](/host/community). For setup details, continue with [Hosting Quickstart](/host/quickstart). diff --git a/host/pricing-your-listing.mdx b/host/pricing-your-listing.mdx index 326b59cd..94944ac8 100644 --- a/host/pricing-your-listing.mdx +++ b/host/pricing-your-listing.mdx @@ -3,28 +3,111 @@ title: "Pricing Your Listing" sidebarTitle: "Pricing Your Listing" description: "Listing optimization, DPH, slicing, bids, and pricing examples." "canonical": "/host/pricing-your-listing" +personas: + - business-owner + - pro-operator --- -Status: mockup placeholder. +
BusinessPro Operator
-Personas: Business Owner, General Pro Operator. +Use this page when you are ready to list a verified machine or adjust an existing offer. Pricing is a balance between hourly rate, utilization, renter fit, and how long you are willing to keep the machine available. -Stage: Verify & List. +## Before You Price -## Purpose +Check these first: -Give listing optimization a home outside the setup overview. +1. The machine is stable enough to rent and has no unresolved hardware, driver, Docker, storage, or network errors. +2. The offer end date matches the commitment you are willing to honor. +3. You have compared similar machines in [GPU Market Metrics](/host/market-metrics). +4. You have estimated gross revenue using the [Earnings & Pricing Model](/host/earning). +5. You understand that price changes affect new rental contracts only. -## Addresses +
+## Listing Controls -- Pricing help tickets. -- Discount schedules and bid pricing. -- GPU slicing and `min_gpu`. -- Business owner listing strategy. +These controls define the terms renters see when they choose your machine. -## Proposed Content +| Control | CLI option | What it changes | +| --- | --- | --- | +| On-demand GPU price | `--price_gpu` | Per-GPU rental price in dollars per hour for active on-demand rentals. | +| Interruptible minimum bid | `--price_min_bid` | Lowest per-GPU bid price you will accept for interruptible rentals. | +| Reserved discount rate | `--discount_rate` | Maximum long-term prepay discount rate for reserved rentals. | +| Minimum GPU chunk | `--min_chunk` | Smallest GPU group a renter can select from a multi-GPU machine. | +| Offer end date | `--end_date` or `--duration` | How long the offer accepts new rental contracts. | +| Disk price | `--price_disk` | Storage price in dollars per GB per month for inactive instances. | +| Upload and download price | `--price_inetu`, `--price_inetd` | Bandwidth prices in dollars per GB. | +| Volume offer size and price | `--vol_size`, `--vol_price` | Optional separately listed storage volume offer. | -- DPH and market metric explanation. -- Worked pricing example. -- On-demand, interruptible, and reserved tradeoffs. -- How to use market metrics. +DPH means dollars per hour. In host listing discussions, it usually refers to the hourly price of GPU compute, but the renter's total cost can also include storage and bandwidth. + +## Starting Workflow + +1. Find comparable offers with the same GPU model, similar GPU count, similar verification state, similar region, and similar machine quality. +2. Compare P10, median, and P90 prices for the last 30 days. +3. Choose an on-demand price that fits your goal: high occupancy, high hourly rate, or a balanced middle. +4. Set `min_gpu`/`--min_chunk` to `1` unless you have a clear reason to require multi-GPU rentals. +5. Set an interruptible minimum bid if you want lower-priority bid rentals. +6. Set a reserved discount only if you are comfortable with longer rentals at a lower effective rate. +7. Set an offer end date you can honor. +8. Review utilization after the machine has had enough time on the market. + +## Worked Example + +A 4-GPU machine has comparable 30-day market prices of P10 `$0.35`, median `$0.45`, and P90 `$0.65` per GPU-hour. The host wants a balanced start and chooses: + +| Setting | Example value | Reason | +| --- | --- | --- | +| On-demand price | `$0.45/GPU/hr` | Starts near the comparable median. | +| Interruptible min bid | `$0.25/GPU/hr` | Allows lower-priority rentals without accepting very low bids. | +| Reserved discount | `0.30` | Offers a discount for longer rentals while preserving margin. | +| Minimum GPU chunk | `1` | Lets renters take 1, 2, or 4 GPUs instead of requiring the whole machine. | +| Offer end date | A known maintenance-safe date | Avoids open-ended commitments the host may not be able to honor. | + +The matching CLI shape is: + +```bash +vastai list machine \ + --price_gpu 0.45 \ + --price_min_bid 0.25 \ + --discount_rate 0.30 \ + --min_chunk 1 \ + --end_date 12/31/2026 +``` + +Adjust the numbers for your market, operating costs, and risk tolerance. + +## Changing Price Later + +When a renter accepts an offer, the offer terms become that rental contract. The price, hardware terms, and rental end date are locked for that contract. + +Changing the listing price later affects only future rental contracts: + +| Change | Effect | +| --- | --- | +| Raise the listed price | New renters see the higher price. Existing renters keep their original price. | +| Lower the listed price | New renters see the lower price. Existing renters keep their original price. | +| Shorten the offer end date | New contracts are limited by the new end date. Existing rental end dates do not shorten. | +| Unlist the machine | Prevents new rentals, but active rental contracts continue until their rental end dates. | + +If a machine has active rental contracts, keep it online and functional until the latest rental end date shown for that machine. + +## When To Adjust + +Use utilization and market movement as your main signals. + +| Signal | Possible action | +| --- | --- | +| Low utilization and many similar cheaper offers | Lower price, improve listing quality, or revisit hardware fit. | +| High utilization and many similar offers priced higher | Consider raising price for future contracts. | +| Good price but poor rentals | Check verification, reliability, search visibility, network, storage, and machine errors. | +| Frequent interruptible rentals but low on-demand demand | Recheck on-demand price and whether your machine is mainly attractive to price-sensitive renters. | +| Strong long-running demand | Consider a reserved discount and a longer offer end date if operations can support it. | + +## Common Questions + +| Question | Read next | +| --- | --- | +| What simple pricing model should I understand? | [Earnings & Pricing Model](/host/earning) | +| Where do I find market price data? | [GPU Market Metrics](/host/market-metrics) | +| How do I list from the CLI? | [vastai list machine](/host/cli/list-machine) | +| How do I change the interruptible bid floor? | [vastai set min-bid](/host/cli/set-min-bid) | diff --git a/host/quickstart.mdx b/host/quickstart.mdx index 72a4dcc5..2d51831a 100644 --- a/host/quickstart.mdx +++ b/host/quickstart.mdx @@ -3,26 +3,20 @@ title: "Hosting Quickstart" sidebarTitle: "Hosting Quickstart" description: "Numbered journey for first-time hosts." "canonical": "/host/quickstart" +personas: + - hobbyist --- -Status: mockup placeholder. +
Hobbyist
-Personas: Hobbyist. +Follow this ordered path for a first-time Vast host setup. Each step links to the page with the full detail. -Stage: Set Up. +## Setup Path -## Purpose - -Give a first-time host one ordered path instead of a long omnibus page. - -## Proposed Journey - -1. Decide whether Vast fits your hardware and expectations. -2. Create or convert a host account. -3. Prepare Ubuntu, drivers, BIOS, storage, and networking. -4. Install the Vast host software. -5. List the machine. -6. Run self-test. -7. Understand verification and first-rental expectations. - -Each step should link to a deeper page. +1. **Decide whether Vast fits your hardware and expectations.** Read [Is Vast for Me?](/host/persona-decision-guide) and check your hardware against [Supported Hardware](/host/supported-hardware). +2. **Create a dedicated host account and accept the hosting agreement.** See [Account & Hosting Agreement](/host/account-hosting-agreement). +3. **Prepare the machine.** Set up Ubuntu, drivers, and BIOS with [Hardware Prep](/host/hardware-prep), disks with [Storage Setup](/host/storage-setup), and port forwarding with [Network & Ports](/host/network-ports). +4. **Install the Vast host software.** Follow [Installing Host Software](/host/installing-host-software). Running over SSH only? Use the [Headless Install Path](/host/headless-install). +5. **List the machine.** Set your price and terms with [Pricing Your Listing](/host/pricing-your-listing). +6. **Run the self-test.** Follow [How to Self-Test](/host/how-to-self-test), and decode any failures with the [Self-Test Reference](/host/self-test-reference). +7. **Understand verification and first-rental expectations.** Read [Understanding Verification](/host/understanding-verification) and [First 24 Hours After Install](/host/first-24-hours). diff --git a/host/reliability-uptime.mdx b/host/reliability-uptime.mdx index a94ff477..f57991b9 100644 --- a/host/reliability-uptime.mdx +++ b/host/reliability-uptime.mdx @@ -3,28 +3,52 @@ title: "Reliability & Uptime" sidebarTitle: "Reliability & Uptime" description: "Reliability score, uptime expectations, and common score drops." "canonical": "/host/reliability-uptime" +personas: + - pro-operator + - headless-operator --- -Status: mockup placeholder. +
Pro OperatorHeadless / DC
-Personas: General Pro Operator, Headless Operator. +Understand reliability score, uptime expectations, common score drops, and practical recovery steps. -Stage: Operate. +
+## Why does reliability drop after rentals, reboots, or disconnects? -## Purpose +Reliability can drop when the platform observes instability, failed starts, disconnections, downtime, network failures, driver or GPU failures, thermal or power events, or active rental disruption. Short rentals can expose startup and runtime failures quickly. Reboots or disconnects during active commitments can hurt reliability. -Explain reliability in operational terms. +If you must take the machine offline, minimize the offline time. The score also takes the machine's average earnings into account: machines with lower earnings are penalized less for offline time. -## Addresses + +## How quickly does reliability recover? -- Reliability score questions. -- Disconnect and recovery expectations. -- NVIDIA auto-update and reboot traps. -- Displayed score versus underlying machine health. +Reliability recovery depends on sustained stable operation and the machine's recent incident history. Some error messages can clear after the underlying issue is resolved, but reliability score recovery should not be treated as an instant reset. Keep the machine stable and error-free, then monitor the score over time. -## Proposed Content + +## What should I do when reliability is at or below 0.90? -- What reliability measures. -- What causes score drops. -- Recovery expectations. -- Preventive maintenance checklist. +Reliability greater than 0.90 is a self-test preflight gate. If the machine is at or below the threshold, the normal self-test can fail before renting the temporary instance. Keep the machine stable, resolve recent hardware, network, driver, daemon, thermal, power, or rental-disruption issues, then retry once the score recovers. + +The gate exists so machines that have not been online for a sufficient amount of time are not put through verification testing. It is an eligibility gate, not a ranking factor: above the gate, a higher score does not by itself increase verification priority. Sustained instability after verification can, however, cause a verified machine to be deverified. + +Do not use `--ignore-requirements` as a verification shortcut. It is only useful for dogfooding or runtime validation, and the machine still needs enough direct ports for the runtime test to work. + + +## Will restarting lower reliability or remove verification? + +Reliability does not directly determine verification state by itself. Verification is separate from the reliability score, but outages, failed starts, driver issues, network drops, or other instability can reduce reliability and may eventually contribute to deverification if the machine becomes unhealthy. Plan restarts around active contracts and use maintenance windows whenever possible. + + +## Preventing score drops + +- Do not take the machine offline during active rental contracts; plan work through [Maintenance Windows](/host/maintenance-windows). +- Disable unattended kernel and NVIDIA driver updates; see [automatic updates](/host/maintenance-windows#automatic-updates). +- Keep thermals, power delivery, and network stability healthy under sustained load. + +## Related pages + +| Topic | Read next | +| --- | --- | +| How reliability affects verification | [Understanding Verification](/host/understanding-verification) | +| Self-test preflight gates | [How to Self-Test](/host/how-to-self-test) | +| Machine errors | [Common Errors & Diagnostics](/host/common-errors-diagnostics) | diff --git a/host/removing-recreating-machines.mdx b/host/removing-recreating-machines.mdx index b9fc9f2e..449c3a6a 100644 --- a/host/removing-recreating-machines.mdx +++ b/host/removing-recreating-machines.mdx @@ -3,28 +3,43 @@ title: "Removing or Recreating Machines" sidebarTitle: "Remove or Recreate" description: "Unlisting, deleting, and recreating host machines." "canonical": "/host/removing-recreating-machines" +personas: + - pro-operator + - headless-operator + - business-owner + - hobbyist --- -Status: mockup placeholder. +
All host personas
-Personas: General Pro Operator, Business Owner, Hobbyist. +Use this page when you need to unlist, delete, recreate, or replace a host machine. -Stage: Operate. +
+## How do I unlist, delete, or recreate a machine? -## Purpose +Unlisting stops new rental contracts from being created, but it does not end existing contracts. Deleting or recreating a machine should only happen after active commitments and stored workloads are understood. Recreating may be useful after a failed install, stale record, or major hardware change, but make sure you know which machine ID is active before reinstalling. -Give machine removal and recreation a single support-linkable page. +From the CLI, see [vastai unlist machine](/host/cli/unlist-machine), [vastai delete machine](/host/cli/delete-machine), and [vastai cleanup machine](/host/cli/cleanup-machine). -## Addresses + +## What changes when I swap GPUs or other hardware? -- Delete versus unlist confusion. -- Hardware swap re-registration. -- Old machine IDs. -- Cleanup after failed setup. +Hardware changes can affect verification, search visibility, offers, and client expectations. Reducing GPU count, RAM, disk, or advertised capacity can trigger deverification or contract problems. Adding or replacing GPUs may require the host daemon or backend to refresh machine specs, and you may need to rerun self-test. The same-GPU-type guideline still applies; see [Supported Hardware](/host/supported-hardware). -## Proposed Content + +## Uninstalling the host software -- What unlist does. -- What delete does. -- When to recreate. -- What happens to offers, volumes, and old IDs. +To uninstall, use the Vast uninstall script located at [https://s3.amazonaws.com/vast.ai/uninstall](https://s3.amazonaws.com/vast.ai/uninstall). Make sure active rental contracts have ended and the machine is unlisted first. + + +## What should I do with a ghost machine? + +First inspect whether the machine has active contracts, stored instances or volumes, visible offers, or backend state preventing deletion. Use the normal unlist/delete/cleanup path only when safe. If a stale backend record remains after normal cleanup, collect the machine ID, account, screenshots or CLI output, and relevant logs, then contact Vast support. + +## Related pages + +| Topic | Read next | +| --- | --- | +| Honoring active contracts first | [Maintenance Windows](/host/maintenance-windows) | +| Verification impact of changes | [Verification Stages](/host/verification-stages) | +| Diagnostics for stale records | [Common Errors & Diagnostics](/host/common-errors-diagnostics#escalate-support) | diff --git a/host/self-test-failure-reference.mdx b/host/self-test-failure-reference.mdx deleted file mode 100644 index 7440a429..00000000 --- a/host/self-test-failure-reference.mdx +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: "Self-Test Failure Reference" -sidebarTitle: "Self-Test Failures" -description: "Lookup reference for self-test failures, meanings, and next actions." -"canonical": "/host/self-test-failure-reference" ---- - -Status: mockup placeholder. - -Personas: General Pro Operator, Headless Operator. - -Stage: Verify & List. - -## Purpose - -Turn self-test output into linkable guidance. - -## Addresses - -- Self-test failures. -- "Not found or not rentable" ambiguity. -- No-response and timeout troubleshooting. -- CLI support bundle handoff. - -## Proposed Content - -- One failure code or error string per anchor. -- Meaning in host language. -- Measured value versus threshold when available. -- One or two actions before contacting support. - -This page should eventually align with the generated CON-1515 self-test reference. diff --git a/host/self-test-reference.mdx b/host/self-test-reference.mdx new file mode 100644 index 00000000..2825f3ef --- /dev/null +++ b/host/self-test-reference.mdx @@ -0,0 +1,60 @@ +--- +title: "Self-Test Reference" +sidebarTitle: "Self-Test Reference" +description: "Lookup reference for self-test failures, meanings, and next actions." +"canonical": "/host/self-test-reference" +personas: + - pro-operator + - headless-operator +--- + +
Pro OperatorHeadless / DC
+ +Use this reference to look up self-test failures, understand what they usually mean, and choose the next diagnostic step. Each failure has its own anchor so CLI errors and support replies can link directly to it. + +
+## vericode=8 / Port Networking Issues + +[Glossary: vericode](/host/glossary#vericode) + +[vericode=8](/host/glossary#vericode) is a platform-detected direct-port or connectivity problem. Common causes include closed external ports, forwarding to the wrong LAN IP, CGNAT or no inbound public IP, firewall rules, asymmetric protocol handling, or a stale port range. + +Test the public IP:port if available, verify router and host firewall rules, then rerun the self-test after fixing the network path. See [Network & Ports](/host/network-ports) for the full connectivity checklist. + + +## No response for 120s + +A `no response` or progress timeout means the CLI could not get usable progress from the temporary self-test instance after it was created. Newer CLI output may show a more specific code such as `progress_endpoint_unreachable`, `progress_empty_timeout`, or `progress_endpoint_lost`. Start with connectivity and startup checks: + +- Inspect the tested external IP:port if the CLI printed one. +- Confirm router or firewall forwarding to the host LAN IP. +- Retry from an outside network to rule out NAT hairpinning; see [testing from outside your LAN](/host/network-ports#test-ports-outside-lan). +- Inspect the diagnostic bundle for instance status, container logs, and daemon logs. + +Other likely causes include container startup failure, Docker/NVIDIA runtime stalls, host daemon stalls, GPU or system hangs, or upload instability. + + +## Machine ID not found or not rentable + +This can mean the machine is already rented, has zero active on-demand offers, is offline or unlisted, is not visible to the API account, is deverified or below a threshold, has offer-side error metadata, or the API key cannot inspect the host/offer state. + +Start with: + +```bash +vastai search offers 'machine_id=MACHINE_ID rentable=any rented=any' +``` + +Then confirm the machine ID, API key/account, listed state, active offers, rental state, reliability, and any error metadata. + + +## Which warnings can be ignored? + +Avoid ignoring warnings by default. One clear self-test advisory is that mapping more than 64 direct ports per listed GPU is usually unnecessary and is not a self-test gate. Red machine errors, self-test failures, NVML/Xid errors, port networking issues, and not-visible/rentable states should be investigated. + +## Reliability below the preflight gate + +Reliability greater than 0.90 is a self-test preflight gate; if the machine is at or below it, the self-test can fail before renting the temporary instance. See [Reliability & Uptime](/host/reliability-uptime#reliability-threshold). + +## Errors not specific to the self-test + +For `bad bandwidthtest2`, CDI device injection failures, NVML mismatches, and other machine-health errors, see [Common Errors & Diagnostics](/host/common-errors-diagnostics). diff --git a/host/storage-setup.mdx b/host/storage-setup.mdx index ec9ccbe1..b693f3a8 100644 --- a/host/storage-setup.mdx +++ b/host/storage-setup.mdx @@ -3,28 +3,61 @@ title: "Storage Setup" sidebarTitle: "Storage Setup" description: "Disk, filesystem, Docker storage, XFS, RAID, and NVMe guidance for hosts." "canonical": "/host/storage-setup" +personas: + - pro-operator + - headless-operator --- -Status: mockup placeholder. +
Pro OperatorHeadless / DC
-Personas: General Pro Operator, Headless Operator. +Set up Docker storage, disks, filesystems, and mounts so rented workloads have stable fast storage. -Stage: Set Up. +
+## How should I set up Docker storage? -## Purpose +Use fast SSD/NVMe storage mounted predictably for Docker and Vast workloads. Current listing guidance expects at least 128 GB of fast SSD storage per GPU. Keep Docker storage on the intended data disk, not accidentally on the OS disk, and use stable mounts so Docker and the host daemon start after the storage is available. -Make storage setup linkable instead of burying it in install troubleshooting. + +## Example fstab line for one NVMe or SSD -## Addresses +For a normal single NVMe or SSD mounted for Docker storage, use the disk UUID rather than a device name like `/dev/nvme0n1p1`, because device names can change between boots. Example `/etc/fstab` entry: -- XFS project quota confusion. -- Docker data-root and mount issues. -- RAID/NVMe layout questions. -- Volume-offer space allocation questions. +```text +UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 /var/lib/docker xfs rw,auto,pquota,nofail 0 0 +``` -## Proposed Content +Replace the UUID with the value from `blkid` for your XFS-formatted partition. The important pieces are `/var/lib/docker`, `xfs`, and `pquota` project quota support. After editing `/etc/fstab`, run `sudo mount -a`; if it reports an error, fix the fstab entry before rebooting. -- Recommended filesystem and mount layout. -- XFS `prjquota` notes. -- Docker storage location. -- How rented volumes affect available host disk. + +## Is XFS with project quotas required? + +XFS with project quota support is the preferred layout when Docker storage quotas are used. Some machines may appear to work with other layouts, but quota-backed Docker storage errors are much easier to avoid when Docker's data root is on an XFS filesystem with project quotas enabled. + + +## How should I choose single NVMe vs RAID/NVMe? + +For one NVMe, use a stable mount with enough capacity and performance for Docker and rented workloads. For multiple NVMes, RAID0 can increase capacity and throughput, but it also increases the failure domain because one failed drive can break the array. Choose the layout based on reliability goals, monitor drive health, and make sure the mount is available before Docker and the host daemon start. + + +## What causes the Docker pquota storage error? + +The error `--storage-opt is supported only for overlay over xfs with pquota` means Docker is being asked to use per-container storage quotas on a backing filesystem that is not mounted as XFS with project quota support. + +Move Docker's data root to a correctly mounted XFS filesystem with project quotas, then restart Docker and the host software after verifying the mount. Back up or confirm the target disk before formatting or moving Docker data. + +## Volume offers and host disk + +Space allocated to rented volume offers is subtracted from the storage available to GPU offers. For how volume offers interact with available disk, see [Hosting Overview](/host/hosting-overview#volume-offers). + + +## Does Vast redownload images that were already used on my machine? + +Prior images are cached on the host when possible. If a renter uses an image that is already present on the machine, the system can reuse the cached image instead of downloading it again. + +## Related pages + +| Topic | Read next | +| --- | --- | +| Hardware minimums | [Supported Hardware](/host/supported-hardware#storage) | +| Pre-install checklist | [Hardware Prep](/host/hardware-prep#install-prerequisites) | +| Install failures | [Installing Host Software](/host/installing-host-software#install-failures) | diff --git a/host/supported-hardware.mdx b/host/supported-hardware.mdx index c1b397cd..a7078588 100644 --- a/host/supported-hardware.mdx +++ b/host/supported-hardware.mdx @@ -3,27 +3,128 @@ title: "Supported Hardware" sidebarTitle: "Supported Hardware" description: "Hardware compatibility guidance before buying or listing a host machine." "canonical": "/host/supported-hardware" +personas: + - hobbyist + - business-owner --- -Status: mockup placeholder. +
HobbyistBusiness
-Personas: Hobbyist, Business Owner, General Pro Operator. +Use this page before buying hardware, installing the host software, or listing a machine. A machine can be technically listable and still be a poor fit if it cannot pass self-test, cannot receive inbound connections, or is not attractive to renters. -Stage: Decide. + +Passing the minimum requirements makes a machine eligible for verification. It does not guarantee verification, search placement, rentals, or earnings. + -## Purpose +## Quick Check -Prevent irreversible host spend on hardware that cannot pass installation, self-test, or marketplace demand checks. +For a normal Vast host, plan on: -## Addresses +- A dedicated native Ubuntu/Linux machine. +- Same-type GPUs in the machine. +- A supported NVIDIA GPU, or one of the AMD GPU families listed below. +- More than 7 GiB VRAM per GPU for self-test. +- An AVX-capable CPU. +- At least one physical CPU core per visible/listed GPU. +- Enough system RAM for the listed GPUs. +- Fast SSD/NVMe storage, with at least 128 GB per GPU as a listing baseline. +- Stable public networking with direct inbound port forwarding. -- Hardware compatibility tickets. -- GB10, ARM, Windows, old GPU, and low-VRAM confusion. -- Business-owner purchase decisions before support contact. +If any of those are uncertain, check them before spending money on hardware. -## Proposed Content +## GPU Support -- Minimum GPU, VRAM, CPU, RAM, storage, and network expectations. -- Hardware that is technically installable but unlikely to earn well. -- Unsupported or discouraged configurations. -- Links to verification and self-test requirements. +Current listing guidance includes: + +| Vendor | Current guidance | +| --- | --- | +| NVIDIA | 10-series NVIDIA GPUs or newer. Higher-demand datacenter, workstation, and recent consumer GPUs are more likely to be useful to renters. | +| AMD | MI25 or newer Radeon Instinct, Radeon VII, Radeon Pro VII, Radeon RX 7900 GRE/XT/XTX, and Radeon Pro W7900/W7800. Other 6000-series or newer Radeon RX/Pro W GPUs may work, but may not be searchable with standard AMD ROCm filters. | + +All GPUs in the machine should be the same type. Avoid mixed GPU models in one listed machine unless Vast explicitly documents support for that setup. + +Newer GPU models are added as they come online. If a new model is not yet listed or searchable, ask Vast to add it through support or the [host community channels](/host/community). + +## Minimum Listing Baseline + +These are baseline expectations for listing a machine: + +| Area | Baseline | +| --- | --- | +| Operating system | Ubuntu 24.04 LTS. Confirm the release works with your GPU driver, Docker, storage setup, and the Vast host installer — see [Ubuntu versions](/host/hardware-prep#ubuntu-versions). | +| Machine use | Dedicated host machine. Do not use the same machine for unrelated workloads while it is rented. | +| GPU type | Supported same-type GPUs. | +| CPU | AVX-capable CPU. At least one physical CPU core per listed GPU. Hyperthreads and logical CPUs do not count as physical cores. CPUs without hyperthreading are fine. | +| System RAM | At least 4 GB system RAM per GPU as a listing baseline. Self-test can require much more, especially on high-VRAM machines. | +| Storage | Fast SSD/NVMe storage with at least 128 GB per GPU. | +| PCIe | At least 1x PCIe for every 2.5 TFLOPS of GPU performance. Avoid riser, lane, power, or BIOS layouts that throttle GPUs. | +| Network | Fast, reliable internet and an open direct port range mapped to the machine. | + +## Verification And Self-Test Requirements + +Verification adds stricter checks on top of the listing baseline: CUDA driver/runtime support, a reliability eligibility gate, direct ports per GPU, PCIe bandwidth, internet bandwidth that scales with total VRAM, per-GPU VRAM, system RAM, and runtime CPU-core checks. + +The canonical, current thresholds live in [Verification Stages: requirements](/host/verification-stages#additional-requirements-for-verification). For the operational steps, see [How to Self-Test](/host/how-to-self-test) and [Understanding Verification](/host/understanding-verification). + +## CPU, RAM, And Balance + +Do not size the rest of the machine as an afterthought. A high-end GPU host with weak CPU, low RAM, poor PCIe layout, slow storage, or unstable networking is less likely to pass verification or deliver good renter experience. + +Use these rules of thumb: + +- Count physical CPU cores, not vCPUs or hyperthreads. +- Match CPU, RAM, PCIe, storage, and network capacity to the GPU tier. +- Keep enough system RAM for CPU-side staging and self-test. +- Avoid reducing GPU count, RAM, disk, or other capacity after a machine has been created; reductions can trigger deverification. + +## Storage + +Use fast SSD/NVMe storage mounted predictably before Docker and the host daemon start. + +For Docker storage quotas, XFS with project quota support is the preferred path. Storage problems often appear later as install failures, Docker quota errors, self-test failures, or poor renter performance. See [Storage Setup](/host/storage-setup). + +## Network + +Vast hosts need inbound public connectivity to mapped ports. Residential networking can work, but only if the router, firewall, ISP, and public IP path allow direct inbound connections. + +Avoid hosting from networks with: + +- CGNAT or no public inbound IPv4 path. +- IPv6-only service without compatible inbound reachability. +- Port forwarding that only works from inside the LAN. +- Frequent packet loss, disconnects, or unstable upload. + +See [Network & Ports](/host/network-ports) before listing. + +## Unsupported Or Discouraged Setups + +Avoid these setups unless Vast explicitly documents support for your exact configuration: + +| Setup | Why to avoid it | +| --- | --- | +| Windows as the host OS | Vast hosting is built around native Linux hosting. WSL can be useful for running the CLI from a client machine, but it is not the supported host operating system. | +| ARM or GB10-class systems | Current host requirements include AVX-capable CPUs and the normal host path should be treated as native Ubuntu/Linux on x86_64/AMD64 hardware unless Vast documents a specific ARM host path. | +| Mixed GPU models | All GPUs on the machine should be the same type. Mixed cards complicate offers, verification, and renter expectations. | +| Low-VRAM or very old GPUs | The self-test requires more than 7 GiB VRAM per GPU, and low-demand hardware may not earn enough to justify hosting. | +| Gaming or workstation use during rentals | Rented machines should be dedicated. Local gaming, mining, display workloads, or background GPU jobs can disrupt renters and self-test. | +| No public inbound networking | Machines behind CGNAT, blocked ports, or unstable residential links often fail connectivity checks. | + +## VM Support + +VM support is optional, but it can affect search visibility and demand for some renters. VM support depends on CPU, chipset, BIOS, IOMMU, kernel, and GPU behavior. It is automatically tested by the host software when applicable. + +See [VMs & IOMMU](/host/vms) before buying hardware specifically for VM workloads. + +## Before You Buy + +Before buying or repurposing hardware: + +1. Check the GPU model and VRAM against this page. +2. Confirm the CPU supports AVX and has enough physical cores. +3. Confirm the motherboard, risers, slots, and BIOS can provide enough PCIe bandwidth. +4. Confirm you can run native Ubuntu/Linux and stable GPU drivers. +5. Confirm you have fast SSD/NVMe storage. +6. Confirm your network has a public inbound path and enough direct ports. +7. Check [GPU Market Metrics](/host/market-metrics) and similar listings before assuming earnings. + +After the machine is ready, continue with [Hosting Quickstart](/host/quickstart). diff --git a/host/understanding-verification.mdx b/host/understanding-verification.mdx index c1f1548a..26ba922f 100644 --- a/host/understanding-verification.mdx +++ b/host/understanding-verification.mdx @@ -4,24 +4,27 @@ sidebarTitle: "Understanding Verification" createdAt: Mon Nov 03 2025 17:30:00 GMT+0000 (Coordinated Universal Time) updatedAt: Mon Nov 03 2025 17:30:00 GMT+0000 (Coordinated Universal Time) "canonical": "/host/understanding-verification" +personas: + - pro-operator + - headless-operator + - business-owner + - hobbyist --- +
All host personas
-Personas: General Pro Operator, Headless Operator, Business Owner, Hobbyist. - -Stage: Verify & List. - +
## How Verification Works -Verification is **fully automated and powered by proprietary algorithms** that continuously evaluate each machine’s operational health and performance, dynamically adjusting assessments based on real-time **supply and demand**. +Verification combines **automated screening** with **internal vetting**. Proprietary algorithms continuously evaluate each machine's operational health and performance, dynamically adjusting assessments based on real-time **supply and demand**. Only machines that meet the platform's defined reliability and performance thresholds are eligible for verification. -This process involves **no manual intervention**, ensuring consistent, scalable, and objective verification across all systems. +Community machines that pass the automated pre-scan are then vetted by Vast staff before being marked verified. Large datacenter partners go through a dedicated manual verification process — see [Datacenter Status](/host/datacenter-status). --- -To qualify, a machine must pass [minimum baseline](https://docs.vast.ai/host/how-to-self-test), and health/stability checks. Beyond that, the system evaluates four primary criteria (order not indicative of priority): +To qualify, a machine must pass [minimum baseline](/host/how-to-self-test), and health/stability checks. Beyond that, the system evaluates four primary criteria (order not indicative of priority): **Note:** Meeting the minimum requirements makes your machine eligible for verification, but it does not guarantee that verification will occur immediately. The final verification outcome still depends on the factors listed below. @@ -31,6 +34,8 @@ To qualify, a machine must pass [minimum baseline](https://docs.vast.ai/host/how **Definition:** Stable, uninterrupted operation over time (uptime, resilience under continuous workloads). +**How it affects verification:** The reliability score acts as an **eligibility gate, not a ranking factor**. Machines at or below 0.90 reliability are not tested — the gate exists so machines that have not been online for a sufficient amount of time are not put through verification. Above the gate, a higher score does not by itself increase verification priority. Sustained instability after verification can, however, cause a machine to be deverified. + **Do** - Maintain consistent uptime with minimal downtime. @@ -43,8 +48,6 @@ To qualify, a machine must pass [minimum baseline](https://docs.vast.ai/host/how - Frequent restarts or unplanned outages. - Overheating, undervolting, or unstable power delivery. -> **Note:** Higher reliability greatly improves verification likelihood. Sustained ≥99.99% (up to 99.9999%+) uptime is typically favored. - --- ## 2) Infrastructure Configuration @@ -95,7 +98,7 @@ To qualify, a machine must pass [minimum baseline](https://docs.vast.ai/host/how ## 3) DLPerf Score -**Definition:** Estimated GPU performance on typical deep-learning tasks (e.g., CNN/Transformer training) for cross-hardware comparison. Higher DLPerf improves verification odds. [Read more](https://docs.vast.ai/guides/reference/faq/rental-types#dlperf-scoring) +**Definition:** Estimated GPU performance on typical deep-learning tasks (e.g., CNN/Transformer training) for cross-hardware comparison. Higher DLPerf improves verification odds. [Read more](/guides/reference/faq/rental-types#dlperf-scoring) **Do** @@ -108,6 +111,7 @@ To qualify, a machine must pass [minimum baseline](https://docs.vast.ai/host/how --- + ## 4) Supply & Demand Analysis **Definition:** Ongoing evaluation of market trends and renter behavior to surface configurations most likely to be rented. @@ -125,11 +129,23 @@ To qualify, a machine must pass [minimum baseline](https://docs.vast.ai/host/how --- + +## How Long Can Verification Take? + +Passing self-test makes a machine eligible, but it does not guarantee immediate verification. Community machines are pre-scanned automatically and then vetted by Vast staff, so timing depends on machine health, supply and demand, platform policy, and the internal vetting queue. Support can help with account or backend anomalies, but ordinary host verification should not be treated as a manual support queue. + + +## Can support verify my machine? + +Verification is primarily automated and queue-based for community hosts. Support can help with account issues, backend anomalies, or datacenter partner workflows, but ordinary verification should not be treated as a manual request queue. For most hosts, the useful action is to keep the machine healthy, eligible, and competitively listed while the automated process evaluates demand and readiness. + +--- + ## Quick Reference | **Category** | **What Matters Most** | **How to Improve** | |---------------|------------------------|--------------------| -| Reliability | Stable, uninterrupted uptime | Proactive monitoring; steady power/thermals; minimize restarts | +| Reliability | Staying above the 0.90 eligibility gate; stability after verification | Proactive monitoring; steady power/thermals; minimize restarts | | Network | Symmetric, stable bandwidth; open ports | Upgrade links; verify routing/ports; monitor jitter/loss | | Hardware | Modern GPUs/CPUs; adequate PCIe & RAM | Favor DC/workstation GPUs; ensure PCIe lanes; match CPU/RAM to GPU tier | | Storage | Throughput and reliability | Prefer NVMe; monitor SMART; ensure sustained bandwidth | diff --git a/host/verification-stages.mdx b/host/verification-stages.mdx index f221fc3b..7c33e2a1 100644 --- a/host/verification-stages.mdx +++ b/host/verification-stages.mdx @@ -4,12 +4,14 @@ sidebarTitle: "Verification Stages" createdAt: Mon Jan 13 2025 21:20:40 GMT+0000 (Coordinated Universal Time) updatedAt: Mon Nov 03 2025 12:50:03 GMT+0000 (Coordinated Universal Time) "canonical": "/host/verification-stages" +personas: + - pro-operator + - headless-operator + - business-owner + - hobbyist --- - -Personas: General Pro Operator, Headless Operator, Business Owner, Hobbyist. - -Stage: Verify & List. +
All host personas
## States & Lifecycle @@ -21,9 +23,9 @@ Stage: Verify & List. ## How It Works -Verification is **entirely automated by proprietary algorithms** that assess each machine’s operational health and performance, incorporating [supply-and-demand](https://docs.vast.ai/host/understanding-verification#4-supply-&-demand-analysis) dynamics. +Verification combines **automated screening** with **internal vetting**, incorporating [supply-and-demand](/host/understanding-verification#supply-demand) dynamics. Community machines are pre-scanned automatically and then vetted by Vast staff; large datacenter partners go through a dedicated manual verification process (see [Datacenter Status](/host/datacenter-status)). -Only machines that meet the platform’s reliability and [performance thresholds](https://docs.vast.ai/host/how-to-self-test) are eligible for verification. There is **no manual intervention**, ensuring consistency, scalability, and objectivity. +Only machines that meet the platform's reliability and [performance thresholds](/host/how-to-self-test) are eligible for verification. --- @@ -43,7 +45,7 @@ Only machines that meet the platform’s reliability and [performance thresholds **What it means:** Newly added machines or machines under evaluation. The system hasn't yet completed enough testing to confirm platform standards. This is not a judgment of quality-only that no platform guarantee exists yet. **Do** -- [Pass the Self-Test](https://docs.vast.ai/host/how-to-self-test) +- [Pass the Self-Test](/host/how-to-self-test) - Maintain steady uptime during evaluation. - Ensure drivers/CUDA and networking are correctly installed and reachable. - Keep the environment clean; schedule work via Create Job only. @@ -59,11 +61,11 @@ Only machines that meet the platform’s reliability and [performance thresholds In order to be listed on Vast.ai, the machine must follow these minimum guidelines: ```text Text -- Ubuntu 18.04 or newer (required) +- Ubuntu 24.04 LTS (required) - Dedicated machines only - the machine shouldn't be doing other stuff while rented - Fast, reliable internet: at least 10Mbps per machine. - 10-series Nvidia GPU or MI25 or newer Radeon Instinct series GPU or Radeon VII or Radeon Pro VII or Radeon RX 7900 (GRE/XT/XTX); or Radeon Pro W7900/W7800. Other 6000 series or newer Radeon RX/Pro W series GPUs may be supported; but may not be searchable using standard filters for AMD ROCm. -- At least 1 physical CPU core (2 hyperthreads) per GPU. +- At least 1 physical CPU core per GPU. Hyperthreads/logical CPUs do not count as physical cores, and CPUs without hyperthreading are fine. - Your CPU must support AVX instruction set (not all lower end CPUs support this). - At least 4 GB of system RAM per GPU. - Fast SSD storage with at least 128GB per GPU. @@ -78,17 +80,22 @@ In order to be listed on Vast.ai, the machine must follow these minimum guidelin In order for your unverified machine to be verified, it must also meet the following minimum requirements: ```text Text -- CUDA version greater than or equal to 12.0 -- Reliability of 90% -- At least 3 open ports per GPU (100 recommended) +- CUDA version greater than or equal to 11.8 +- Reliability greater than 0.90 +- At least 3 open ports per GPU - Internet Download speed must scale with total machine VRAM at ~2.6 Mbps per GiB, with a 100 Mbps floor and 500 Mbps ceiling - Internet Upload speed must scale with total machine VRAM at ~2.6 Mbps per GiB, with a 100 Mbps floor and 500 Mbps ceiling -- GPU RAM of 7 GB +- GPU RAM greater than 7 GB +- System RAM close to total GPU VRAM, capped around 2 TB for very high-VRAM machines - Passing the Self-Test ``` + +The reliability gate exists so machines that have not been online for a sufficient amount of time are not tested; it is an eligibility gate, not a ranking factor — see [Reliability & Uptime](/host/reliability-uptime#reliability-threshold). For port sizing beyond the minimum (per-instance limits and useful ceilings), see [Network & Ports](/host/network-ports#ports-per-gpu). + +This list is the canonical home for verification requirements — other pages link here rather than restating the thresholds. > **Note:** High-end GPUs are more likely to be verified. Machines with datacenter GPUs such as B200, H200, H100, A100, etc., and those with premium GPUs such as RTX PRO 6000 WS, 8xRTX 5090, 8xRTX 4090, etc., receive prioritized verification processing due to their high demand and performance capabilities. -**Tip:** Meeting these minimum requirements makes your machine eligible for verification, but does not automatically guarantee verification. [Read More about Verification](https://docs.vast.ai/host/understanding-verification) +**Tip:** Meeting these minimum requirements makes your machine eligible for verification, but does not automatically guarantee verification. [Read More about Verification](/host/understanding-verification) --- diff --git a/host/vms.mdx b/host/vms.mdx index 578706c3..627568ea 100644 --- a/host/vms.mdx +++ b/host/vms.mdx @@ -3,18 +3,18 @@ title: "VMs & IOMMU" sidebarTitle: "VMs & IOMMU" createdAt: Mon Jan 13 2025 21:20:40 GMT+0000 (Coordinated Universal Time) updatedAt: Wed Jan 15 2025 00:37:08 GMT+0000 (Coordinated Universal Time) +personas: + - pro-operator + - headless-operator --- - -Personas: General Pro Operator, Headless Operator. - -Stage: Set Up. +
Pro OperatorHeadless / DC
**WARNING:** VMs interface much more directly with hardware than Docker containers. Proper VM support is very sensitive to hardware setup. -This guide covers the configuration steps needed to enable support for Vast VMs on most setups, but is not and cannot be exhausitve. +This guide covers the configuration steps needed to enable support for Vast VMs on most setups, but is not and cannot be exhaustive. # Introduction @@ -35,25 +35,14 @@ VM support will allow your machine to take advantage of demand for use cases tha VMs support the following features/use-cases that Docker-based instances do not: - -

Feature

-

Use-case

-
- -Systemd/Docker - -Multi-Application Server Tooling and DevOps (e.g., Docker Compose, Kubernetes, Docker Build) - -Non-Linux OSes - -Windows Graphics (e.g., for rendering or cloud gaming) - -ptrace - -Program analysis for CUDA-performance optimization (e.g., via Nvidia NSight) +| Feature | Use-case | +| --- | --- | +| Systemd/Docker | Multi-Application Server Tooling and DevOps (e.g., Docker Compose, Kubernetes, Docker Build) | +| Non-Linux OSes | Windows Graphics (e.g., for rendering or cloud gaming) | +| ptrace | Program analysis for CUDA-performance optimization (e.g., via Nvidia NSight) | Currently no other peer-to-peer GPU rental marketplace offers full VMs; instead full VMs are only available from traditional providers at much higher costs. -Thus we believe that hosts who have VMs enabled can expect to command a substantial preumium. +Thus we believe that hosts who have VMs enabled can expect to command a substantial premium. ### Drawbacks diff --git a/host/workload-policy.mdx b/host/workload-policy.mdx index c5b66ce5..0667daca 100644 --- a/host/workload-policy.mdx +++ b/host/workload-policy.mdx @@ -3,21 +3,98 @@ title: "Workload Policy" sidebarTitle: "Workload Policy" description: "Host-facing expectations for workload types and platform policy." "canonical": "/host/workload-policy" +personas: + - pro-operator + - headless-operator + - business-owner + - hobbyist --- -Status: mockup placeholder. +
All host personas
-Personas: General Pro Operator, Headless Operator, Business Owner, Hobbyist. +Use this page as a readable host-operator summary of renter workload expectations, active rental contracts, and policy-sensitive activity. It extracts the parts most relevant to day-to-day hosting, but it does not replace the canonical policy documents. -Stage: Operate. + +Do not treat this page as legal advice or as a replacement for the agreement and terms. Platform policy can change, so review the canonical documents when making policy-sensitive decisions. + -## Purpose +## Source Of Truth -Set expectations around workloads before hosts make assumptions from Discord or prior platforms. +If this page and the canonical documents ever differ, follow the canonical documents. -## Proposed Content +| Source | Use it for | +| --- | --- | +| [Host Agreement](https://cloud.vast.ai/host/agreement) | Host account conversion, host commitments, rental contract expectations, data isolation, and host-specific agreement terms. | +| [Vast.ai Terms of Service](https://vast.ai/terms) | Platform-wide acceptable use, prohibited activity, payment/account rules, export compliance, suspension/termination rights, and legal terms. | -- Mining and proof-of-work expectations. -- Idle workloads. -- Bittensor and similar workloads. -- Abuse, security, and acceptable use links. +## Host Responsibilities + +When you list a machine, renters can create rental contracts from your offer. While a rental contract is active, the host is expected to keep the advertised machine available, stable, and performant through the rental end date. + +As a host: + +- Keep the machine online and avoid changes that interrupt active renters. +- Do not run local gaming, mining, display, benchmark, or background GPU workloads while the machine is rented. +- Do not stop, inspect, modify, or interfere with active renter containers because they appear idle or unfamiliar. +- Keep renter data isolated and do not access renter files except where a documented platform or support process requires it. +- Keep escalation contact details current so urgent machine issues can reach the right operator. +- Follow the current host agreement, terms, export requirements, and applicable law. + +## Active Rentals + +An active rental is still an active rental even when GPU utilization looks low. Some renters run interactive notebooks, services, build jobs, data preparation, CPU-heavy tasks, or workloads with long idle periods between bursts. + +Do not assume an idle-looking instance is abandoned. If you need maintenance, use the documented maintenance and offer-end-date flows, and avoid disrupting active contracts. + +
+## Can I send a message to a client using my machine? + +No, there is not an established process for hosts to message clients on Vast. If a renter workload appears idle, broken, abusive, or policy-sensitive, follow the guidance on this page instead of trying to contact the renter directly. + +## Prohibited And Restricted Activity + +The Terms of Service describe prohibited activity across the platform. The summary below extracts the host-operating implications, but it should not be treated as a separate allowlist. + +| Category | Host-facing guidance | +| --- | --- | +| Illegal or abusive activity | Activity that violates law, regulation, platform policy, or third-party rights should be escalated. | +| Malware, spam, or network abuse | Do not knowingly support malware, spam, unauthorized bulk messaging, attacks, credential theft, or disruption of Vast or third-party services. | +| Security bypass or platform abuse | Attempts to bypass access controls, scrape platform data, interfere with security features, impersonate users, or overload platform systems are not acceptable. | +| Intellectual-property infringement | Renters are responsible for having rights to the software, data, and content they run. Escalate credible infringement concerns. | +| Export-controlled or sanctioned use | Usage must comply with applicable export controls and sanctions. Escalate suspected restricted destination, user, or end-use issues. | +| Cryptocurrency mining | The Terms include restrictions on cryptocurrency mining, including when credits were purchased using a credit card. Hosts should not advertise cryptocurrency mining as generally allowed. | + +## Mining, Bittensor, And Proof-Of-Work + +Crypto-adjacent workloads can be confusing because they may look similar from the host side. Some workloads are AI inference or training around a blockchain network; others are cryptocurrency mining or proof-of-work activity. + +For host docs, use this rule: + +- Do not tell renters that cryptocurrency mining is generally allowed. +- Do not optimize host guidance around proof-of-work mining as a supported hosting path. +- Treat Bittensor, validator/miner, subnet, and similar workloads as policy-sensitive when they involve token rewards, chain participation, proof-of-work, or credit-card-funded usage. +- If a renter asks whether a specific crypto-adjacent workload is allowed, point them to the [Terms of Service](https://vast.ai/terms) or support rather than making a host-side policy decision. + +If you suspect a renter is violating policy, collect the machine ID, instance ID if available, timestamps, and observable symptoms. Do not inspect private renter data to investigate. + +## What Hosts Should Do + +| Situation | Action | +| --- | --- | +| A rental appears idle | Leave it running. Price listings with idle time in mind. | +| A rental is causing machine instability | Check host hardware, thermals, power, driver, Docker, and daemon logs. Escalate if the issue appears policy-related or platform-side. | +| You see suspected abuse | Preserve observable details and contact support. Do not access renter files or secrets. | +| You need planned maintenance | Use maintenance windows and offer-end-date planning. Avoid active-rental disruption. | +| You want to stop accepting new rentals | Unlist the machine. Existing rental contracts continue until their rental end dates. | +| A contract has expired or storage is stale | Use documented cleanup flows such as [Removing or Recreating Machines](/host/removing-recreating-machines) and host CLI cleanup commands. | + +## Related Pages + +| Topic | Read next | +| --- | --- | +| Contract and offer behavior | [Hosting Overview](/host/hosting-overview) | +| Account conversion and agreement flow | [Account & Agreement](/host/account-hosting-agreement) | +| Canonical host agreement | [Host Agreement](https://cloud.vast.ai/host/agreement) | +| Canonical terms | [Terms of Service](https://vast.ai/terms) | +| Maintenance planning | [Maintenance Windows](/host/maintenance-windows) | +| Unlisting and cleanup | [Remove or Recreate](/host/removing-recreating-machines) | diff --git a/old-docs-highlight-demo.js b/old-docs-highlight-demo.js new file mode 100644 index 00000000..d8347ac5 --- /dev/null +++ b/old-docs-highlight-demo.js @@ -0,0 +1,3628 @@ +// Local CON-1518 demo helper. Do not include in the production docs PR. +// Generated from origin/main host docs to highlight content reused from the old docs. +(function () { + const OLD_CONTENT_DEMO_ENABLED = true; + const LOCAL_PREVIEW_HOSTS = new Set(['localhost', '127.0.0.1', '0.0.0.0', '::1']); + const isLocalPreview = LOCAL_PREVIEW_HOSTS.has(location.hostname) || location.hostname.endsWith('.localhost'); + + if (!OLD_CONTENT_DEMO_ENABLED || !isLocalPreview) return; + if (window.__vastOldDocsHighlightDemo) return; + window.__vastOldDocsHighlightDemo = true; + + const OLD_DOC_PHRASES = [ + { + "t": "the min gpu setting controls the smallest gpu partition you offer. for an 8-gpu machine this determines whether customers can rent 1 2 4 or 8 gpus at a time. it s a critical lever for balancing demand capture against utilization efficiency.", + "s": "optimization-guide.mdx" + }, + { + "t": "machines with datacenter gpus such as b200 h200 h100 a100 etc. and those with premium gpus such as rtx pro 6000 ws 8xrtx 5090 8xrtx 4090 etc. receive prioritized verification processing due to their high demand and performance capabilities.", + "s": "verification-stages.mdx" + }, + { + "t": "due to greater user control over hardware vm support requires iommu settings for securing pcie communications that can degrade the performance of nccl on non-rtx 40x0 multi-gpu machines that rely on pci-based gpu peer-to-peer communication.", + "s": "vms.mdx" + }, + { + "t": "note that default configuration settings for most machines will not support vms and we can detect that so most hosts who do not want vms enabled do not need to take any action. configuring your machine to support vms. hardware prerequisites", + "s": "vms.mdx" + }, + { + "t": "if you have confirmed your payout account is in good standing and still have not received your funds after a reasonable processing period please contact support for further review. i see my invoice is marked as pending. what does this mean", + "s": "payment.mdx" + }, + { + "t": "note: meeting the minimum requirements makes your machine eligible for verification but it does not guarantee that verification will occur immediately. the final verification outcome still depends on the factors listed below. 1 reliability", + "s": "understanding-verification.mdx" + }, + { + "t": "if you operate out of a data center consider highlighting any certifications you hold e.g. tier 4 data center hipaa compliance as differentiators. these can be meaningful selling points for enterprise and compliance-sensitive customers.", + "s": "optimization-guide.mdx" + }, + { + "t": "test your machines before listing and after any configuration changes. a machine that appears available but fails when rented wastes a customer s time and yours so you lose the rental and risk a negative reliability signal. verification", + "s": "optimization-guide.mdx" + }, + { + "t": "who this is for: hosts who have already completed the technical setup process and have machines ready to list. this guide covers the economic decisions that is the settings and strategies that affect your ranking occupancy and revenue.", + "s": "optimization-guide.mdx" + }, + { + "t": "the optimal mix depends on current market conditions so be sure to consider what your competitors are offering and where unmet demand exists. review your utilization patterns and adjust periodically. keeping your machines competitive", + "s": "optimization-guide.mdx" + }, + { + "t": "this is one of the most commonly misconfigured settings. the min bid price is a floor for the bidding system not an on-demand price. customers bid above this floor and competition among bidders will drive the actual price higher.", + "s": "optimization-guide.mdx" + }, + { + "t": "the core tradeoff: higher prices increase revenue per rental hour but reduce occupancy. lower prices fill your machines faster but each hour earns less. the optimum sits somewhere in the middle and shifts with supply and demand.", + "s": "optimization-guide.mdx" + }, + { + "t": "note: meeting the minimum requirements makes your machine eligible for verification but it does not guarantee that verification will occur immediately. the final verification outcome still depends on the factors listed below.", + "s": "understanding-verification.mdx" + }, + { + "t": "we do not recommend multi-gpu hosts with datacenter gpus enable vms until we can ensure better gpu p2p communication support in vms including support for nvlink. configuring vms on your machine checking vm enablement status.", + "s": "vms.mdx" + }, + { + "t": "test your machines before listing and after any configuration changes. a machine that appears available but fails when rented wastes a customer s time and yours so you lose the rental and risk a negative reliability signal.", + "s": "optimization-guide.mdx" + }, + { + "t": "what it means: newly added machines or machines under evaluation. the system hasn t yet completed enough testing to confirm platform standards. this is not a judgment of quality-only that no platform guarantee exists yet.", + "s": "verification-stages.mdx" + }, + { + "t": "vast.ai does not provide tax documents or tax advice to hosts residing outside the united states. international hosts are responsible for understanding and complying with their local tax obligations. united states hosts", + "s": "guide-to-taxes.mdx" + }, + { + "t": "pricing is the most direct lever for your earnings but the optimal price isn t simply as high as possible. rather it s the rate that maximizes total revenue given your hardware competition and current market conditions.", + "s": "optimization-guide.mdx" + }, + { + "t": "do maintain consistent uptime with minimal downtime. keep network connectivity stable avoid jitter and drops. manage thermals and power to prevent throttling. proactively monitor hardware health and perform maintenance.", + "s": "understanding-verification.mdx" + }, + { + "t": "when will deverification happen when the hosting software detects an error your machine is automatically but temporarily deverified. it will appear as unverified in search results until the underlying issue is resolved.", + "s": "verification-stages.mdx" + }, + { + "t": "verification is fully automated and powered by proprietary algorithms that continuously evaluate each machine s operational health and performance dynamically adjusting assessments based on real-time supply and demand.", + "s": "understanding-verification.mdx" + }, + { + "t": "the offer end date is your commitment to how long you will keep the machine online and fully functional. the pricing you set is the rate you ll be paid for that commitment. together these form the terms of your offer.", + "s": "hosting-overview.mdx" + }, + { + "t": "before your machine can be verified on vast.ai it must meet all minimum quality and reliability benchmarks. verification confirms that your machine is stable performant and properly configured to run client workloads.", + "s": "how-to-self-test.mdx" + }, + { + "t": "it is your responsibility to: ensure your tax information is up to date with your payment provider confirm whether you qualify for a tax form based on your earnings and location file your taxes accurately and on time", + "s": "guide-to-taxes.mdx" + }, + { + "t": "here s what each section means: current balance: this is the amount you ve earned so far from your referred users but haven t been paid out yet. x49 t keeps growing as your referrals continue to use the platform.", + "s": "earning.mdx" + }, + { + "t": "if 200 gb of the volume offer are rented the gpu offers will reduce to 2 1xgpu 400gb offers and 1 2xgpu 800gb offer. the volume offer will still remain as there is still available space and update to offer 300gb.", + "s": "hosting-overview.mdx" + }, + { + "t": "to rent your own machine you will need to first search the offers with your machine id to find the id and then create an instance using that id. the show machine command will show all your connected machines.", + "s": "hosting-overview.mdx" + }, + { + "t": "from the payout history section you can: view historical payouts filter records by date range download payout records in csv format download payout records in pdf format how much can i make hosting on vast.ai", + "s": "payment.mdx" + }, + { + "t": "total earnings: this shows your lifetime earnings x74 he total amount you ve earned from all your referrals since you joined the earnings program or started hosting. it includes both paid and unpaid amounts.", + "s": "earning.mdx" + }, + { + "t": "volume offer end dates must align with gpu offer end dates. setting an end date on a volume will not update if there is an existing gpu offer. setting a gpu offer end date will update volume offer end dates.", + "s": "hosting-overview.mdx" + }, + { + "t": "allocated storage that is storage in use by client rental contracts is subtracted from the total storage available on a machine and split up proportionally among the machine s gpus in remaining gpu offers.", + "s": "hosting-overview.mdx" + }, + { + "t": "> note: if you ve fixed the issue but the system doesn t automatically detect the resolution a vast.ai team member may need to manually check that your machine is functioning correctly and clear the error.", + "s": "verification-stages.mdx" + }, + { + "t": "the latest rental end date across all active rental contracts on a machine is shown in the ui. you must keep the machine available until this date. example: multiple rental contracts from different offers", + "s": "hosting-overview.mdx" + }, + { + "t": "paypal paypal issues tax forms to qualifying users directly through their platform. for information on thresholds and delivery refer to paypal s tax help resources. for questions contact paypal support.", + "s": "guide-to-taxes.mdx" + }, + { + "t": "total referral count: this number represents the total users you ve referred x77 ho have successfully created accounts through your referral link. it s a great way to track how your outreach is growing", + "s": "earning.mdx" + }, + { + "t": "there are three ways to access market metrics: dashboards at cloud.vast.ai/host/market/ cli via vastai metrics subcommands requires pip install vastai v1.0.4+ rest api endpoints see api reference below", + "s": "market-metrics.mdx" + }, + { + "t": "your floor price should not be close to your expected actual rental price. the bidding mechanism will bring the price up so you set the minimum you d accept not the price you hope to get. disk pricing", + "s": "optimization-guide.mdx" + }, + { + "t": "what it means: the machine passed automated checks for reliability network stability operational health and performance. a verified machine consistently delivers server services to platform standards.", + "s": "verification-stages.mdx" + }, + { + "t": "vast.ai does not provide tax documents or tax advice to hosts residing outside the united states. international hosts are responsible for understanding and complying with their local tax obligations.", + "s": "guide-to-taxes.mdx" + }, + { + "t": "you must create a new account for hosting. if you are using vast.ai as a client do not use the same account. a single client and hosting account is not supported and you will quickly run into issues.", + "s": "hosting-overview.mdx" + }, + { + "t": "interruptibles work in a bidding system: clients set a bid price for their instance the current highest bid is the instance that runs the others are paused. more info reserved discount pricing factor", + "s": "hosting-overview.mdx" + }, + { + "t": "the optimal mix depends on current market conditions so be sure to consider what your competitors are offering and where unmet demand exists. review your utilization patterns and adjust periodically.", + "s": "optimization-guide.mdx" + }, + { + "t": "do pass the self-test maintain steady uptime during evaluation. ensure drivers/cuda and networking are correctly installed and reachable. keep the environment clean schedule work via create job only.", + "s": "verification-stages.mdx" + }, + { + "t": "implication: machines aligned with active renter preferences-popular gpus sufficient vram strong reliability fast internet-are prioritized for verification to maximize utilization and profitability.", + "s": "understanding-verification.mdx" + }, + { + "t": "the reserved discount pricing is determined by the hosts. if you intend to encourage a long term rental this is a factor that you may want to research. use the filters in the ui to select reserved.", + "s": "hosting-overview.mdx" + }, + { + "t": "take the id number from the first column and use that to create a free instance on your own machine. this example loads the latest pytorch image along with both jupyter and ssh direct launch modes.", + "s": "hosting-overview.mdx" + }, + { + "t": "from this page you can add or update: company name business address tax identification information other billing details you would like displayed on invoices downloading invoices and payout records", + "s": "payment.mdx" + }, + { + "t": "note: the --ignore-requirements flag runs the test in a relaxed mode bypassing some checks. even if the test passes in this mode your machine does not meet the minimum verification requirements.", + "s": "how-to-self-test.mdx" + }, + { + "t": "consider enabling the auto-extend feature. this allows rentals to automatically continue beyond their initial term. it reduces churn without requiring you to commit to a longer maximum duration.", + "s": "optimization-guide.mdx" + }, + { + "t": "after the payout is submitted your payout provider may require additional processing time before funds appear in your account. why does my invoice show paid when i haven t received the funds yet", + "s": "payment.mdx" + }, + { + "t": "verification is one of the most common filters customers apply when searching. ensuring your machines are verified significantly increases your visibility in search results. data center hosts", + "s": "optimization-guide.mdx" + }, + { + "t": "only machines that meet the platform s reliability and performance thresholds are eligible for verification. there is no manual intervention ensuring consistency scalability and objectivity.", + "s": "verification-stages.mdx" + }, + { + "t": "if you want to use the website gui you will need to setup a new account on a different email address add a credit card and then find your machine and create instances on it like a client.", + "s": "hosting-overview.mdx" + }, + { + "t": "your floor price should not be close to your expected actual rental price. the bidding mechanism will bring the price up so you set the minimum you d accept not the price you hope to get.", + "s": "optimization-guide.mdx" + }, + { + "t": "when the hosting software detects an error your machine is automatically but temporarily deverified. it will appear as unverified in search results until the underlying issue is resolved.", + "s": "verification-stages.mdx" + }, + { + "t": "if your machine is rejected for not meeting requirements but you still want to check its rentability or run the pressure tests you can rerun the test with the --ignore-requirements flag:", + "s": "how-to-self-test.mdx" + }, + { + "t": "duration controls how long a rental contract can last. it s one of the most impactful settings because it affects both the type of customer you attract and the stability of your revenue.", + "s": "optimization-guide.mdx" + }, + { + "t": "think of your listing as a product on a shelf. price is only one factor other factors like availability duration terms and configuration determine whether customers even see it. duration", + "s": "optimization-guide.mdx" + }, + { + "t": "ensure you have the latest nvidia drivers installed at the time of listing. outdated drivers can cause compatibility issues with customer workloads and result in failed rentals. testing", + "s": "optimization-guide.mdx" + }, + { + "t": "once vast.ai submits the payout to your selected payout provider the invoice status will change to paid. can vast.ai send my payout via direct bank transfer ach swift wire transfer etc.", + "s": "payment.mdx" + }, + { + "t": "click on the 257 cpuram<258 is a decently constrained search that will most likely include a given machine you are looking for that fits these filters amongst others that are similar.", + "s": "hosting-overview.mdx" + }, + { + "t": "your listing competes with others for customer attention and your goal is to find the combination of price availability and configuration that maximizes your total revenue over time.", + "s": "optimization-guide.mdx" + }, + { + "t": "consider your hardware s relative performance your verification status and your reliability track record as these all affect how customers evaluate your listing against alternatives.", + "s": "optimization-guide.mdx" + }, + { + "t": "note: vast.ai is not responsible for delays restrictions compliance reviews account limitations or rejected payments imposed by wise paypal stripe or any other financial institution.", + "s": "payment.mdx" + }, + { + "t": "the paid status reflects the status of the payout within vast.ai s billing system only. it does not indicate whether the funds have completed processing within wise paypal or stripe.", + "s": "payment.mdx" + }, + { + "t": "vms require more disk space than docker containers as they do not share components with the host os. hosts with vms enabled may want to set higher disk and internet bandwidth prices.", + "s": "vms.mdx" + }, + { + "t": "if your network has qos controls or internal metering set a reasonable bandwidth price to prevent any single client from saturating your connection and degrading service for others.", + "s": "optimization-guide.mdx" + }, + { + "t": "definition: estimated gpu performance on typical deep-learning tasks e.g. cnn/transformer training for cross-hardware comparison. higher dlperf improves verification odds. read more", + "s": "understanding-verification.mdx" + }, + { + "t": "do verify gpu pcie connections provide full bandwidth and are not throttled. keep the latest drivers/cuda aligned with workloads. confirm required ports and end-to-end reachability.", + "s": "understanding-verification.mdx" + }, + { + "t": "this process may take some time as the system ensures that the issue is fully resolved before restoring verification. most error messages are cleared within 1-2 hours of resolution.", + "s": "verification-stages.mdx" + }, + { + "t": "read through this documentation to understand the minimum requirements for becoming a datacenter partner and the specific verification steps that we will take to ensure compliance.", + "s": "datacenter-status.mdx" + }, + { + "t": "current balance: this is the amount you ve earned so far from your referred users but haven t been paid out yet. x49 t keeps growing as your referrals continue to use the platform.", + "s": "earning.mdx" + }, + { + "t": "hosts are responsible for: setup: installing ubuntu creating disk partitions installing nvidia drivers opening network ports on the router and installing the vast hosting software.", + "s": "hosting-overview.mdx" + }, + { + "t": "if you have confirmed your payout account is in good standing and still have not received your funds after a reasonable processing period please contact support for further review.", + "s": "payment.mdx" + }, + { + "t": "how should i begin fixing it a red error indicator will appear on your machine in the machines tab. use this message to identify and investigate the issue in your logs or metrics.", + "s": "verification-stages.mdx" + }, + { + "t": "do investigate red error indicators quickly review logs and metrics. validate thermal/power headroom and bandwidth under load. re-check health after changes to confirm resolution.", + "s": "verification-stages.mdx" + }, + { + "t": "we will need to ensure iommu a technology that secures and isolates communication between pcie devices is set up along with disabling all driver features that interfere with vms.", + "s": "vms.mdx" + }, + { + "t": "the rental contract locks in all of the offer s terms at the time of rental including pricing the rental end date and hardware specs and those terms cannot be changed afterward.", + "s": "hosting-overview.mdx" + }, + { + "t": "think of your listing as a product on a shelf. price is only one factor other factors like availability duration terms and configuration determine whether customers even see it.", + "s": "optimization-guide.mdx" + }, + { + "t": "ensure you have the latest nvidia drivers installed at the time of listing. outdated drivers can cause compatibility issues with customer workloads and result in failed rentals.", + "s": "optimization-guide.mdx" + }, + { + "t": "when a client rents an instance from your offer all of the offer s terms at that moment the offer end date the pricing and the hardware specs are locked into a rental contract.", + "s": "hosting-overview.mdx" + }, + { + "t": "data center hosts: do not set a duration longer than you can reliably honor. breaking a contract early carries a serious penalty. only commit to what you can guarantee. pricing", + "s": "optimization-guide.mdx" + }, + { + "t": "note that default configuration settings for most machines will not support vms and we can detect that so most hosts who do not want vms enabled do not need to take any action.", + "s": "vms.mdx" + }, + { + "t": "settings alone won t help if your machines aren t reliable and up to date. a few operational basics make a significant difference in your listing s performance. driver updates", + "s": "optimization-guide.mdx" + }, + { + "t": "the paid status only reflects the payout status within vast.ai s billing system. it does not indicate whether the funds have completed processing within wise paypal or stripe.", + "s": "payment.mdx" + }, + { + "t": "to generate an invoice: you must have a valid payout method connected to your vast.ai account. your account balance must meet the 20 minimum payout threshold. payment timeline", + "s": "payment.mdx" + }, + { + "t": "on new machines the tests will be run on install for machines configured before the vm-feature release testing for vm-compatability will happen when the machine is unoccupied.", + "s": "vms.mdx" + }, + { + "t": "the on-demand price is the price per hour for the gpu rental. on demand rentals are the highest priority and if met will stop interruptibles. interruptible min price optional", + "s": "hosting-overview.mdx" + }, + { + "t": "the space allocated for volume offers is in the same pool of space as that for gpu offers meaning that space will not be subtracted from available offers unless it is in use.", + "s": "hosting-overview.mdx" + }, + { + "t": "this guide explains how vast.ai host payouts work when invoices are generated when payments are sent and what to do if you experience a payout issue. available payout methods", + "s": "payment.mdx" + }, + { + "t": "verification is one of the most common filters customers apply when searching. ensuring your machines are verified significantly increases your visibility in search results.", + "s": "optimization-guide.mdx" + }, + { + "t": "conversely all-8x can work if competitors in your gpu class are highly fragmented and there s strong demand for full nodes but it s generally not the default recommendation.", + "s": "optimization-guide.mdx" + }, + { + "t": "vm support will allow your machine to take advantage of demand for use cases that docker cannot easily support in addition to demand for conventional docker-based instances.", + "s": "vms.mdx" + }, + { + "t": "equipment that is in a certified datacenter on vast.ai is eligible to be included in the secure cloud offering and receive other benefits such as the blue datacenter label.", + "s": "datacenter-status.mdx" + }, + { + "t": "if your machine has multiple gpus and you ve set mingpu to allow slicing multiple clients can rent from the same offer each creating their own independent rental contract.", + "s": "hosting-overview.mdx" + }, + { + "t": "each rental contract is independent you may have multiple active rental contracts from different clients on the same machine each with its own rental end date and pricing.", + "s": "hosting-overview.mdx" + }, + { + "t": "each endpoint allows up to 5 requests per second per user. for large historical queries the backend automatically adjusts the resolution to keep response sizes reasonable.", + "s": "market-metrics.mdx" + }, + { + "t": "ensure that your internet power source and heat dissipation systems are all functioning and that you have thought through how hosting will affect each one of those items.", + "s": "hosting-overview.mdx" + }, + { + "t": "parameter applies to description --- --- --- verified current history yes no or all hostingtype current history securecloud community or all gpuname history gpu name e.g.", + "s": "market-metrics.mdx" + }, + { + "t": "open /etc/default/grub and add to the grubcmdlinelinux the following: amdiommu on or inteliommu on depending on whether you have an amd or intel cpu. nvidiadrm.modeset 0", + "s": "vms.mdx" + }, + { + "t": "data center hosts: do not set a duration longer than you can reliably honor. breaking a contract early carries a serious penalty. only commit to what you can guarantee.", + "s": "optimization-guide.mdx" + }, + { + "t": "if stored instances are only taking up 400 gb the volume offer will not update as there is still enough space on the machine to cover the volume offer. listing volumes", + "s": "hosting-overview.mdx" + }, + { + "t": "invoices are generated weekly on fridays. once an invoice is generated it enters a pending state and is scheduled for payment during the following friday payout cycle.", + "s": "payment.mdx" + }, + { + "t": "we will check/test your configuration when your machine is idle and enable vms by default if your machine is capable of supporting vms and you have not set vms to off.", + "s": "vms.mdx" + }, + { + "t": "machines that do not have vm support enabled will be hidden in the search page for clients who have vm-based templates selected. vm support benefits/drawbacks benefits", + "s": "vms.mdx" + }, + { + "t": "you can generate earnings by gaining vast credit through template creation via our referral program. you can find more information about vast s referral program here.", + "s": "earning.mdx" + }, + { + "t": "interruptibles work in a bidding system: clients set a bid price for their instance the current highest bid is the instance that runs the others are paused. more info", + "s": "hosting-overview.mdx" + }, + { + "t": "to qualify a machine must pass minimum baseline and health/stability checks. beyond that the system evaluates four primary criteria order not indicative of priority :", + "s": "understanding-verification.mdx" + }, + { + "t": "total earnings: this shows your lifetime earnings x74 he total amount you ve earned from all your referrals since you joined the earnings program or started hosting.", + "s": "earning.mdx" + }, + { + "t": "vm support is currently an optional feature for hosts as it usually requires additional configuration steps on top of those needed to support docker-based instances.", + "s": "vms.mdx" + }, + { + "t": "managing your offers including pricing and offer end dates planning maintenance so that no active rental contracts are disrupted account setup and hosting agreement", + "s": "hosting-overview.mdx" + }, + { + "t": "you must be signed in as a host with at least one registered machine to access this page. alternatively check out gpu market prices or the host earnings calculator.", + "s": "payment.mdx" + }, + { + "t": "verification is entirely automated by proprietary algorithms that assess each machine s operational health and performance incorporating supply-and-demand dynamics.", + "s": "verification-stages.mdx" + }, + { + "t": "tip: meeting these minimum requirements makes your machine eligible for verification but does not automatically guarantee verification. read more about verification", + "s": "verification-stages.mdx" + }, + { + "t": "we also generally recommend multi-gpu hosts with rtx 40x0 series gpus try enabling vms especially if they have plentiful disk space and fast 500mbps+ internet speed", + "s": "vms.mdx" + }, + { + "t": "for windows users we suggest setting up wsl which will require you to install ubuntu on your windows machine and change your bios settings to allow virtualization.", + "s": "hosting-overview.mdx" + }, + { + "t": "host machines are not required to be vm compatible the vast hosting software will automatically test and enable the feature on machines on which vms are supported.", + "s": "vms.mdx" + }, + { + "t": "you can set the offer end date in the hosting interface by clicking on the date field under expiration or via the end date field in the cli list machine command.", + "s": "hosting-overview.mdx" + }, + { + "t": "we do not recommend multi-gpu hosts with datacenter gpus enable vms until we can ensure better gpu p2p communication support in vms including support for nvlink.", + "s": "vms.mdx" + }, + { + "t": "settings alone won t help if your machines aren t reliable and up to date. a few operational basics make a significant difference in your listing s performance.", + "s": "optimization-guide.mdx" + }, + { + "t": "this page in the console allows you to manage your earnings from referrals. you can find more information about vast s referral program here. pages walkthrough", + "s": "earning.mdx" + }, + { + "t": "please verify that your payout method has been connected correctly in your account settings. can i generate an invoice manually customizing invoice information", + "s": "payment.mdx" + }, + { + "t": "if you operate multiple machines distribute your min gpu settings across them rather than using the same value everywhere. a healthy mix might look like this:", + "s": "optimization-guide.mdx" + }, + { + "t": "if they create a volume offer of 500 gb and it is not rented the machine will be available for rent with 2 offers of 1xgpu 500gb and 1 offer of 2xgpu 1000gb.", + "s": "hosting-overview.mdx" + }, + { + "t": "note: meeting these minimum requirements makes your machine eligible for verification but does not automatically guarantee verification. about the self-test", + "s": "how-to-self-test.mdx" + }, + { + "t": "if you are an international host receiving payouts via wise please refer to the international hosts section above. common questions does vast.ai handle vat", + "s": "guide-to-taxes.mdx" + }, + { + "t": "do monitor health uptime thermals power and respond to alerts. keep drivers/cuda on compatible latest stable versions. maintain stable symmetric bandwidth.", + "s": "verification-stages.mdx" + }, + { + "t": "once verified a machine will remain verified unless issues arise such as failing health checks or reliability standards which could lead to deverification.", + "s": "verification-stages.mdx" + }, + { + "t": "currently no other peer-to-peer gpu rental marketplace offers full vms instead full vms are only available from traditional providers at much higher costs.", + "s": "vms.mdx" + }, + { + "t": "market data suggests there is meaningful demand for both 1x and 8x configurations with approximately twice as much search volume for 8x rentals as for 1x.", + "s": "optimization-guide.mdx" + }, + { + "t": "setup: installing ubuntu creating disk partitions installing nvidia drivers opening network ports on the router and installing the vast hosting software.", + "s": "hosting-overview.mdx" + }, + { + "t": "this will automatically remove expired/deleted rental contracts from the machine and available storage will update on offers. extending rental contracts", + "s": "hosting-overview.mdx" + }, + { + "t": "a machine that appears available but fails when rented wastes a customer s time and yours so you lose the rental and risk a negative reliability signal.", + "s": "optimization-guide.mdx" + }, + { + "t": "hosts are responsible for ensuring they can receive business-to-business b2b payments through their selected payout provider in their country or region.", + "s": "payment.mdx" + }, + { + "t": "10-series nvidia gpu or mi25 or newer radeon instinct series gpu or radeon vii or radeon pro vii or radeon rx 7900 gre/xt/xtx or radeon pro w7900/w7800.", + "s": "verification-stages.mdx" + }, + { + "t": "if stored instances are only taking up 400 gb the volume offer will not update as there is still enough space on the machine to cover the volume offer.", + "s": "hosting-overview.mdx" + }, + { + "t": "note: meeting the minimum requirements makes your machine eligible for verification but it does not guarantee that verification will occur immediately.", + "s": "understanding-verification.mdx" + }, + { + "t": "tip: ensure no other jobs or instances are running during the self-test for the most accurate results. step-by-step guide step 0: install the vast cli", + "s": "how-to-self-test.mdx" + }, + { + "t": "a red error indicator will appear on your machine in the machines tab. use this message to identify and investigate the issue in your logs or metrics.", + "s": "verification-stages.mdx" + }, + { + "t": "this guide explains how vast.ai host payouts work when invoices are generated when payments are sent and what to do if you experience a payout issue.", + "s": "payment.mdx" + }, + { + "t": "host earnings depend on several factors including: hardware specifications pricing uptime and reliability geographic location current customer demand", + "s": "payment.mdx" + }, + { + "t": "if you have vms set to off and you d like to retry enabling vms run sudo python3 /var/lib/vastaikaalia/enablevms.py on -f while your machine is idle.", + "s": "vms.mdx" + }, + { + "t": "individual certifications will eventually be highlighted so users can understand if a given host is compliant with hipaa gdpr tier 2/3 or iso 27001.", + "s": "datacenter-status.mdx" + }, + { + "t": "wise if you are a us-based host receiving payouts via wise vast.ai is required to collect your tax information directly. please submit your w9 here:", + "s": "guide-to-taxes.mdx" + }, + { + "t": "to prevent vms from being enabled on your machine or to disable vms after they have been enabled run python3 /var/lib/vastaikaalia/enablevms.py off.", + "s": "vms.mdx" + }, + { + "t": "the latest rental end date across all active rental contracts on a machine is shown in the ui. you must keep the machine available until this date.", + "s": "hosting-overview.mdx" + }, + { + "t": "this discount is not static but rather scales over time that the user rents the machine for. these values are determined by the individual host s .", + "s": "hosting-overview.mdx" + }, + { + "t": "to extend the current rental contracts for all clients on a given machine change the offer end date to a later time with the same or lower pricing.", + "s": "hosting-overview.mdx" + }, + { + "t": "funds are then processed by wise paypal or stripe and may take additional time to appear in your account depending on the provider and your region.", + "s": "payment.mdx" + }, + { + "t": "total referral count: this number represents the total users you ve referred x77 ho have successfully created accounts through your referral link.", + "s": "earning.mdx" + }, + { + "t": "hosts can create offers sometimes called listings through the cli command list machine or the machine control panel gui on the host machines page.", + "s": "hosting-overview.mdx" + }, + { + "t": "once created a rental contract s terms cannot be changed not by modifying the offer not by unlisting the machine and not by any other host action.", + "s": "hosting-overview.mdx" + }, + { + "t": "if you operate out of a data center consider highlighting any certifications you hold e.g. tier 4 data center hipaa compliance as differentiators.", + "s": "optimization-guide.mdx" + }, + { + "t": "disclaimer: as an independent contractor you are solely responsible for tracking your earnings and accurately reporting them in your tax filings.", + "s": "guide-to-taxes.mdx" + }, + { + "t": "invoices are only generated when: a payout method is connected to your vast.ai account. your balance has reached the 20 minimum payout threshold.", + "s": "payment.mdx" + }, + { + "t": "on february 1 client b rents the other 2 gpus from the new offer. a rental contract is created at 2.50/gpu/hr with a rental end date of june 30.", + "s": "hosting-overview.mdx" + }, + { + "t": "to rent your own machine you will need to first search the offers with your machine id to find the id and then create an instance using that id.", + "s": "hosting-overview.mdx" + }, + { + "t": "the earnings x70 age gives you a transparent view of your referral program performance and accumulated rewards. here s what each section means:", + "s": "earning.mdx" + }, + { + "t": "depending on your payout method your payment provider may issue a tax form if you meet their reporting threshold. it is your responsibility to:", + "s": "guide-to-taxes.mdx" + }, + { + "t": "recovery: fix the issue and restore stability the system will automatically transition back to verified once system confirms healthy operation.", + "s": "verification-stages.mdx" + }, + { + "t": "this page in the console allows you to manage your earnings from referrals. you can find more information about vast s referral program here.", + "s": "earning.mdx" + }, + { + "t": "the on-demand price is the price per hour for the gpu rental. on demand rentals are the highest priority and if met will stop interruptibles.", + "s": "hosting-overview.mdx" + }, + { + "t": "once clients rent your machine it is very important to honor the terms of each rental contract until its rental end date. the rental contract", + "s": "hosting-overview.mdx" + }, + { + "t": "connect your vast host account to our discord to access our host-only discord channels to chat or seek help from other hosts on the platform.", + "s": "hosting-overview.mdx" + }, + { + "t": "the optimal mix depends on current market conditions so be sure to consider what your competitors are offering and where unmet demand exists.", + "s": "optimization-guide.mdx" + }, + { + "t": "check that virtualization is enabled in your bios. on most machines this should be enabled by default. configure kernel commandline arguments", + "s": "vms.mdx" + }, + { + "t": "the host must have at least 5 gpu servers listed on vast.ai or otherwise show they have a significant 5+ servers amount of equipment to list", + "s": "datacenter-status.mdx" + }, + { + "t": "rtx 4090 start history unix timestamp for range start end history unix timestamp for range end step history seconds between data points e.g.", + "s": "market-metrics.mdx" + }, + { + "t": "total rental earnings host only : x54 his shows the total lifetime amount you ve earned from your machine being rented out on the platform.", + "s": "earning.mdx" + }, + { + "t": "keep in mind our auto sort that search offers defaults to is comprised of both ranking various factors as well as an element of randomness.", + "s": "hosting-overview.mdx" + }, + { + "t": "different customer types have very different duration preferences. understanding this helps you target the right segment for your hardware:", + "s": "optimization-guide.mdx" + }, + { + "t": "set disk pricing higher than you might expect. this prevents stopped instances from consuming all your storage and starving active rentals.", + "s": "optimization-guide.mdx" + }, + { + "t": "short duration to long duration :-- :-: --: flexibility lower commitment higher expected value price lock-in customer segments by duration", + "s": "optimization-guide.mdx" + }, + { + "t": "you may not run any background gpu processes for vms to work nvidia-persitenced is ok it is managed by our hosting software . enabling vms", + "s": "vms.mdx" + }, + { + "t": "on january 20 you decide to raise the price. you unlist the current offer and relist at 2.50/gpu/hr with a new offer end date of june 30.", + "s": "hosting-overview.mdx" + }, + { + "t": "once you are ready to list your machine come back to this guide to understand pricing and the rental contract lifecycle. general concepts", + "s": "hosting-overview.mdx" + }, + { + "t": "the offer end date becomes the contract s rental end date shown in the ui as client end date and the pricing becomes the contract s rate.", + "s": "hosting-overview.mdx" + }, + { + "t": "customer type typical duration need notes :-- :-- :-- serverless / automated inference short hours to days these workloads are transient.", + "s": "optimization-guide.mdx" + }, + { + "t": "note: meeting these minimum requirements makes your machine eligible for verification but does not automatically guarantee verification.", + "s": "how-to-self-test.mdx" + }, + { + "t": "reserved instance discounts are a feature for clients which allows them to rent machines over a long period of time at a reduced price.", + "s": "hosting-overview.mdx" + }, + { + "t": "market metrics data is updated every 5 minutes. location data is cached for up to 2 hours since it changes less frequently. rate limits", + "s": "market-metrics.mdx" + }, + { + "t": "tip: meeting these minimum requirements makes your machine eligible for verification but does not automatically guarantee verification.", + "s": "verification-stages.mdx" + }, + { + "t": "unlisting the machine prevents new rental contracts entirely but existing ones continue at their original pricing and rental end dates", + "s": "hosting-overview.mdx" + }, + { + "t": "when you set a min gpu value the platform creates listings at all powers of two from your minimum up to the total gpus in the machine.", + "s": "optimization-guide.mdx" + }, + { + "t": "do offer in-demand gpu models with adequate vram and balanced resources. maintain strong reliability to remain attractive once listed.", + "s": "understanding-verification.mdx" + }, + { + "t": "what it means: a previously verified machine no longer meets requirements. system continuous monitoring detects sustained degradation.", + "s": "verification-stages.mdx" + }, + { + "t": "other 6000 series or newer radeon rx/pro w series gpus may be supported but may not be searchable using standard filters for amd rocm.", + "s": "verification-stages.mdx" + }, + { + "t": "important: even with --ignore-requirements your machine must have at least three direct open ports otherwise the self-test will fail.", + "s": "how-to-self-test.mdx" + }, + { + "t": "fix the issue and restore stability the system will automatically transition back to verified once system confirms healthy operation.", + "s": "verification-stages.mdx" + }, + { + "t": "avoid downgrading hardware capacity e.g. reducing gpu count disk or ram . allowing thermal power or bandwidth instability under load.", + "s": "verification-stages.mdx" + }, + { + "t": "either you disabled vms or our previous tests failed. pending: vms are not disabled but will try to enable once the machine is idle.", + "s": "vms.mdx" + }, + { + "t": "it s one of the most impactful settings because it affects both the type of customer you attract and the stability of your revenue.", + "s": "optimization-guide.mdx" + }, + { + "t": "if you have fast unmetered upstream internet you can price bandwidth low or even at zero as this is a strong competitive advantage.", + "s": "optimization-guide.mdx" + }, + { + "t": "this guide covers the configuration steps needed to enable support for vast vms on most setups but is not and cannot be exhausitve.", + "s": "vms.mdx" + }, + { + "t": "price is only one factor other factors like availability duration terms and configuration determine whether customers even see it.", + "s": "optimization-guide.mdx" + }, + { + "t": "please refer to your payout provider s documentation for regional availability account requirements and verification requirements.", + "s": "payment.mdx" + }, + { + "t": "after a payout has been submitted your payout provider may require additional processing time before funds appear in your account.", + "s": "payment.mdx" + }, + { + "t": "> note: higher reliability greatly improves verification likelihood. sustained 99.99% up to 99.9999%+ uptime is typically favored.", + "s": "understanding-verification.mdx" + }, + { + "t": "you can view your payout history for a selected date range. here you can generate and download invoices for your earning payouts.", + "s": "earning.mdx" + }, + { + "t": "machine min gpu available listings :-- :-- :-- machine a 1 1x 2x 4x 8x machine b 2 2x 4x 8x machine c 4 4x 8x machine d 8 8x only", + "s": "optimization-guide.mdx" + }, + { + "t": "definition: estimated gpu performance on typical deep-learning tasks e.g. cnn/transformer training for cross-hardware comparison.", + "s": "understanding-verification.mdx" + }, + { + "t": "users typically are willing to pay more for the security and reliability that comes with equipment that is in a proper facility.", + "s": "datacenter-status.mdx" + }, + { + "t": "the core tradeoff: smaller minimums e.g. 1x let you serve more customers and fill individual gpu slots but create fragmentation.", + "s": "optimization-guide.mdx" + }, + { + "t": "machines that do not have vm support enabled will be hidden in the search page for clients who have vm-based templates selected.", + "s": "vms.mdx" + }, + { + "t": "the min gpu field allows you to set the smallest grouping of gpu rentals available on your machine in powers of 2 or down to 1.", + "s": "hosting-overview.mdx" + }, + { + "t": "by default volume offers will be listed with gpu offers at the same disk price for half of the available space on the machine.", + "s": "hosting-overview.mdx" + }, + { + "t": "after the payout is submitted your payout provider may require additional processing time before funds appear in your account.", + "s": "payment.mdx" + }, + { + "t": "direct bank transfers ach payments wire transfers and swift payments are not available. my account is not generating invoices.", + "s": "payment.mdx" + }, + { + "t": "this will automatically remove expired/deleted rental contracts from the machine and available storage will update on offers.", + "s": "hosting-overview.mdx" + }, + { + "t": "you can use this data to make informed decisions about pricing your machines and understanding demand for specific gpu types.", + "s": "market-metrics.mdx" + }, + { + "t": "once an invoice is generated it enters a pending state and is scheduled for payment during the following friday payout cycle.", + "s": "payment.mdx" + }, + { + "t": "we recommend all hosts with single-gpu rigs to try to ensure vm support as the drawbacks for single-gpu machines are minimal.", + "s": "vms.mdx" + }, + { + "t": "you may not run any background gpu processes for vms to work nvidia-persitenced is ok it is managed by our hosting software .", + "s": "vms.mdx" + }, + { + "t": "shortening the offer end date limits the commitment window for new clients but does not shorten any existing rental end date", + "s": "hosting-overview.mdx" + }, + { + "t": "vast provides real-time and historical data on gpu supply demand pricing and geographic distribution across the marketplace.", + "s": "market-metrics.mdx" + }, + { + "t": "this guide covers the economic decisions that is the settings and strategies that affect your ranking occupancy and revenue.", + "s": "optimization-guide.mdx" + }, + { + "t": "it automatically evaluates key system aspects and simulates real workloads to validate both hardware and network readiness.", + "s": "how-to-self-test.mdx" + }, + { + "t": "market metrics data is updated every 5 minutes. location data is cached for up to 2 hours since it changes less frequently.", + "s": "market-metrics.mdx" + }, + { + "t": "the core tradeoff: longer durations tend to increase expected earnings because customers value the guaranteed availability.", + "s": "optimization-guide.mdx" + }, + { + "t": "the host setup guide is the official documentation for setting up a machine on vast.ai. read through each section closely.", + "s": "hosting-overview.mdx" + }, + { + "t": "it is vital to test your own machine to ensure the ports and software is running smoothly. setup a separate client account", + "s": "hosting-overview.mdx" + }, + { + "t": "vastai metrics gpu all gpu types vastai metrics gpu --verified true --datacenter true vastai metrics gpu --raw json output", + "s": "market-metrics.mdx" + }, + { + "t": "if you operate multiple machines distribute your min gpu settings across them rather than using the same value everywhere.", + "s": "optimization-guide.mdx" + }, + { + "t": "once clients rent your machine it is very important to honor the terms of each rental contract until its rental end date.", + "s": "hosting-overview.mdx" + }, + { + "t": "customers filter and sort listings by a variety of criteria most commonly by verification status duration and disk space.", + "s": "optimization-guide.mdx" + }, + { + "t": "if your listing doesn t pass these filters it won t appear in search results regardless of how competitive your price is.", + "s": "optimization-guide.mdx" + }, + { + "t": "internet download speed must scale with total machine vram at 2.6 mbps per gib with a 100 mbps floor and 500 mbps ceiling", + "s": "verification-stages.mdx" + }, + { + "t": "wise if you are a us-based host receiving payouts via wise vast.ai is required to collect your tax information directly.", + "s": "guide-to-taxes.mdx" + }, + { + "t": "once you are ready to list your machine come back to this guide to understand pricing and the rental contract lifecycle.", + "s": "hosting-overview.mdx" + }, + { + "t": "this process involves no manual intervention ensuring consistent scalable and objective verification across all systems.", + "s": "understanding-verification.mdx" + }, + { + "t": "what it means: the machine passed automated checks for reliability network stability operational health and performance.", + "s": "verification-stages.mdx" + }, + { + "t": "this prevents stopped instances from consuming all your storage and starving active rentals. internet bandwidth pricing", + "s": "optimization-guide.mdx" + }, + { + "t": "definition: ongoing evaluation of market trends and renter behavior to surface configurations most likely to be rented.", + "s": "understanding-verification.mdx" + }, + { + "t": "internet upload speed must scale with total machine vram at 2.6 mbps per gib with a 100 mbps floor and 500 mbps ceiling", + "s": "verification-stages.mdx" + }, + { + "t": "a previously verified machine no longer meets requirements. system continuous monitoring detects sustained degradation.", + "s": "verification-stages.mdx" + }, + { + "t": "in the payout account section you can set up a payout account. common questions how can i have earnings as a vast user", + "s": "earning.mdx" + }, + { + "t": "gpu: type memory and count matter. newer datacenter/workstation gpus are prioritized e.g. b200 > h200 >> 5090 > 4070 .", + "s": "understanding-verification.mdx" + }, + { + "t": "testing and troubleshooting all issues that can arise such as driver conflicts errors bad gpus and bad network ports.", + "s": "hosting-overview.mdx" + }, + { + "t": "do use the latest compatible drivers/cuda. eliminate pcie thermal and power bottlenecks to maintain sustained clocks.", + "s": "understanding-verification.mdx" + }, + { + "t": "this process may take some time as the system ensures that the issue is fully resolved before restoring verification.", + "s": "verification-stages.mdx" + }, + { + "t": "vast now supports vm instances running on kernel virtual machine kvm in addition to docker container based instances.", + "s": "vms.mdx" + }, + { + "t": "for example on a machine with 1000gb of disk available and 2 gpus a host can create a volume offer of up to 1000 gb.", + "s": "hosting-overview.mdx" + }, + { + "t": "if 200 gb of the volume offer are rented the gpu offers will reduce to 2 1xgpu 400gb offers and 1 2xgpu 800gb offer.", + "s": "hosting-overview.mdx" + }, + { + "t": "only machines that meet the platform s defined reliability and performance thresholds are eligible for verification.", + "s": "understanding-verification.mdx" + }, + { + "t": "on january 5 client a rents 2 gpus. a rental contract is created at 2.00/gpu/hr with a rental end date of march 31.", + "s": "hosting-overview.mdx" + }, + { + "t": "if the test fails: the cli will display detailed reasons for failure. apply the suggested fixes and rerun the test.", + "s": "how-to-self-test.mdx" + }, + { + "t": "if you are an international host receiving payouts via wise please refer to the international hosts section above.", + "s": "guide-to-taxes.mdx" + }, + { + "t": "new rental contracts will be created at the new terms while old rental contracts continue at their original terms.", + "s": "hosting-overview.mdx" + }, + { + "t": "the reserved discount pricing factor represents the maximum possible discount a user can achieve on your machines.", + "s": "hosting-overview.mdx" + }, + { + "t": "when a client rents a volume offer they rent a subset of the total space set for the offer up to the total amount.", + "s": "hosting-overview.mdx" + }, + { + "t": "the self-test helps confirm that your machine satisfies vast.ai s minimum performance and configuration standards.", + "s": "how-to-self-test.mdx" + }, + { + "t": "before running the test make sure: your machine has been listed. there are no active clients currently renting it.", + "s": "how-to-self-test.mdx" + }, + { + "t": "returns time-series data for supply demand and pricing. defaults to rtx 5090 4090 and 3090 over the last 24 hours.", + "s": "market-metrics.mdx" + }, + { + "t": "as rendering/gaming users will benefit from those as well as users who need multi-application orchestration tools.", + "s": "vms.mdx" + }, + { + "t": "depending on your payout method your payment provider may issue a tax form if you meet their reporting threshold.", + "s": "guide-to-taxes.mdx" + }, + { + "t": "min gpu 1 to min gpu 8 :-- :-: --: more renters more fragmentation fewer renters cleaner utilization how it works", + "s": "optimization-guide.mdx" + }, + { + "t": "it s the product of your price per hour and your occupancy rate the percentage of time your machines are rented .", + "s": "optimization-guide.mdx" + }, + { + "t": "avoid pairing high-end gpus with under-provisioned cpu/ram. letting hidden background services consume resources.", + "s": "understanding-verification.mdx" + }, + { + "t": "volume offers will be unlisted when the machine is unlisted. they can additionally be unlisted with the command:", + "s": "hosting-overview.mdx" + }, + { + "t": "./vastai create instance --image pytorch/pytorch:latest --jupyter --direct --env -e tz pdt -p 22:22 -p 8080:8080", + "s": "hosting-overview.mdx" + }, + { + "t": "this means a single machine may have active rental contracts at different prices and different rental end dates.", + "s": "hosting-overview.mdx" + }, + { + "t": "you now have two active rental contracts on the same machine at different prices and different rental end dates.", + "s": "hosting-overview.mdx" + }, + { + "t": "you can control the amount of space listed with the -v cli option and the price of the space with the -z option.", + "s": "hosting-overview.mdx" + }, + { + "t": "for large historical queries the backend automatically adjusts the resolution to keep response sizes reasonable.", + "s": "market-metrics.mdx" + }, + { + "t": "the bidding mechanism will bring the price up so you set the minimum you d accept not the price you hope to get.", + "s": "optimization-guide.mdx" + }, + { + "t": "storage is not your bottleneck. you are under-provisioned on disk set disk pricing higher than you might expect.", + "s": "optimization-guide.mdx" + }, + { + "t": "balances below 20 usd will automatically roll forward until the minimum threshold is reached. invoice generation", + "s": "payment.mdx" + }, + { + "t": "total referral earnings host only : this shows the total lifetime amount you ve earned from all your referrals.", + "s": "earning.mdx" + }, + { + "t": "the earnings x70 age gives you a transparent view of your referral program performance and accumulated rewards.", + "s": "earning.mdx" + }, + { + "t": "additionally there is the earning chart section that provides a clear visual overview of your earning history.", + "s": "earning.mdx" + }, + { + "t": "make sure to test the networking. clients require open ports to directly connect to the machine for most jobs.", + "s": "hosting-overview.mdx" + }, + { + "t": "if the test says the machine is not found or not rentable : try un-listing your machine then listing it again.", + "s": "how-to-self-test.mdx" + }, + { + "t": "who this is for: hosts who have already completed the technical setup process and have machines ready to list.", + "s": "optimization-guide.mdx" + }, + { + "t": "avoid ignoring warnings or allowing instability to persist. reducing hardware below the created specification.", + "s": "verification-stages.mdx" + }, + { + "t": "some hosts may also need to add the following settings: rd.driver.blacklist nouveau modprobe.blacklist nouveau", + "s": "vms.mdx" + }, + { + "t": "only rented space will impact the amount of space available for gpu offers not the space in the offer itself.", + "s": "hosting-overview.mdx" + }, + { + "t": "if for some reason this is not working or if you want to free the space automatically you can run the command", + "s": "hosting-overview.mdx" + }, + { + "t": "you can then look at your instance tab to make sure that pytorch loaded correctly along with jupyter and ssh.", + "s": "hosting-overview.mdx" + }, + { + "t": "verification confirms that your machine is stable performant and properly configured to run client workloads.", + "s": "how-to-self-test.mdx" + }, + { + "t": "ensure your machine has no missing data in your machines page such as upload and download speed ram or ports.", + "s": "how-to-self-test.mdx" + }, + { + "t": "only machines that meet the platform s reliability and performance thresholds are eligible for verification.", + "s": "verification-stages.mdx" + }, + { + "t": "vast.ai cannot provide tax advice and we cannot verify the accuracy of any publicly available tax guidance.", + "s": "guide-to-taxes.mdx" + }, + { + "t": "before your machine can be verified on vast.ai it must meet all minimum quality and reliability benchmarks.", + "s": "how-to-self-test.mdx" + }, + { + "t": "for example on an 8-gpu machine with min gpu set to 2 listings are created for 2x 4x and 8x configurations.", + "s": "optimization-guide.mdx" + }, + { + "t": "avoid unnecessary reboots or configuration changes. unrelated background workloads that consume gpu/cpu/io.", + "s": "verification-stages.mdx" + }, + { + "t": "the name and address of the datacenter where the equipment is located along with the relevant certificates", + "s": "datacenter-status.mdx" + }, + { + "t": "the discount schedule param which determines the price difference between on-demand and reserved instances", + "s": "hosting-overview.mdx" + }, + { + "t": "make sure to set an offer end date before listing your machine or the offer will remain open indefinitely.", + "s": "hosting-overview.mdx" + }, + { + "t": "larger minimums e.g. 8x eliminate fragmentation but limit your audience to customers who need a full node.", + "s": "optimization-guide.mdx" + }, + { + "t": "this approach lets you capture demand across all configuration sizes while keeping fragmentation in check.", + "s": "optimization-guide.mdx" + }, + { + "t": "yes but changes only affect future rental contracts. existing rental contracts keep their original terms:", + "s": "hosting-overview.mdx" + }, + { + "t": "gpu count: for the same gpu type more gpus increase verification likelihood e.g. 85090 >> 25090 > 15090 .", + "s": "understanding-verification.mdx" + }, + { + "t": "system optimization upgrades balanced scaling matters cpu/ram/pcie/bandwidth commensurate with gpu tier .", + "s": "understanding-verification.mdx" + }, + { + "t": "in order for your unverified machine to be verified it must also meet the following minimum requirements:", + "s": "verification-stages.mdx" + }, + { + "t": "lifecycle: machines automatically move between these states based on performance and reliability factors.", + "s": "verification-stages.mdx" + }, + { + "t": "the offer end date is your commitment to how long you will keep the machine online and fully functional.", + "s": "hosting-overview.mdx" + }, + { + "t": "for example if you have an 8x 3090 and set min gpu to 2 clients can create instances with 2 4 or 8 gpus.", + "s": "hosting-overview.mdx" + }, + { + "t": "the interruptible price allows for the host to set the minimum interruptible price for a client to rent.", + "s": "hosting-overview.mdx" + }, + { + "t": "the website gui stacks similar offers and so it is not easy to see all the listings for a given machine.", + "s": "hosting-overview.mdx" + }, + { + "t": "situation approach :-- :-- you have excess disk capacity set disk pricing closer to your amortized cost.", + "s": "optimization-guide.mdx" + }, + { + "t": "once vast.ai submits the payout to your selected payout provider the invoice status will change to paid.", + "s": "payment.mdx" + }, + { + "t": "if you have a display manager e.g. gdm or display server xorg wayland etc running you must disable them.", + "s": "vms.mdx" + }, + { + "t": "similarly if stored instances on the machine are taking up 800gb the volume offer will reduce to 200gb.", + "s": "hosting-overview.mdx" + }, + { + "t": "if you have raised the pricing you cannot extend the current rental contracts. testing your own machine", + "s": "hosting-overview.mdx" + }, + { + "t": "follow the official setup guide to install the vast cli: vast cli: get started step 1: set your api key", + "s": "how-to-self-test.mdx" + }, + { + "t": "avoid setting all machines to 1x as this leads to severe fragmentation and reduced overall utilization.", + "s": "optimization-guide.mdx" + }, + { + "t": "testing the recommended pytorch template is vital to ensure that ssh and jupyter are working properly.", + "s": "hosting-overview.mdx" + }, + { + "t": "tip: ensure no other jobs or instances are running during the self-test for the most accurate results.", + "s": "how-to-self-test.mdx" + }, + { + "t": "even if the test passes in this mode your machine does not meet the minimum verification requirements.", + "s": "how-to-self-test.mdx" + }, + { + "t": "before tuning any individual setting it helps to understand where your supply sits relative to demand.", + "s": "optimization-guide.mdx" + }, + { + "t": "check that virtualization is enabled in your bios. on most machines this should be enabled by default.", + "s": "vms.mdx" + }, + { + "t": "international hosts are responsible for understanding and complying with their local tax obligations.", + "s": "guide-to-taxes.mdx" + }, + { + "t": "as a host you can set this number yourself to 0 if you wish to opt out of this feature. volume offers", + "s": "hosting-overview.mdx" + }, + { + "t": "the original vs. the updated price will be shown as denoted by a stikethrough in the original amount:", + "s": "hosting-overview.mdx" + }, + { + "t": "outdated drivers can cause compatibility issues with customer workloads and result in failed rentals.", + "s": "optimization-guide.mdx" + }, + { + "t": "blue datacenter label on all gpu offers in the web interface for equipment that is in the datacenter", + "s": "datacenter-status.mdx" + }, + { + "t": "you can generate earnings by gaining vast credit through template creation via our referral program.", + "s": "earning.mdx" + }, + { + "t": "vast.ai is based in california and does not currently collect or remit vat. is vat shown on invoices", + "s": "guide-to-taxes.mdx" + }, + { + "t": "make sure to disable auto-updates so that your machine doesn t drop a client job to update a driver.", + "s": "hosting-overview.mdx" + }, + { + "t": "take the id number from the first column and use that to create a free instance on your own machine.", + "s": "hosting-overview.mdx" + }, + { + "t": "recommended strategy: set your min bid price close to your cost of power when the gpu is under load.", + "s": "optimization-guide.mdx" + }, + { + "t": "an invoice is marked as paid once vast.ai has submitted the payout to your selected payout provider.", + "s": "payment.mdx" + }, + { + "t": "pcie bandwidth: adequate throughput is essential bottlenecks depress dlperf and overall performance.", + "s": "understanding-verification.mdx" + }, + { + "t": "when the hosting software detects an error your machine is automatically but temporarily deverified.", + "s": "verification-stages.mdx" + }, + { + "t": "vms require more disk space than docker containers as they do not share components with the host os.", + "s": "vms.mdx" + }, + { + "t": "a high price with low occupancy can easily earn less than a moderate price with strong utilization.", + "s": "optimization-guide.mdx" + }, + { + "t": "invoices are generated every friday and are generally scheduled to be paid on the following friday.", + "s": "payment.mdx" + }, + { + "t": "definition: stable uninterrupted operation over time uptime resilience under continuous workloads .", + "s": "understanding-verification.mdx" + }, + { + "t": "vast is a gpu marketplace. hosts sell gpu resources on the marketplace. hosts are responsible for:", + "s": "hosting-overview.mdx" + }, + { + "t": "lower price to higher price :-- :-: --: higher occupancy higher per-hour revenue on-demand pricing", + "s": "optimization-guide.mdx" + }, + { + "t": "many hosts set their interruptible floor too high because they treat it like their on-demand rate.", + "s": "optimization-guide.mdx" + }, + { + "t": "avoid frequent restarts or unplanned outages. overheating undervolting or unstable power delivery.", + "s": "understanding-verification.mdx" + }, + { + "t": "vast.ai does not provide tax documents or tax advice to hosts residing outside the united states.", + "s": "guide-to-taxes.mdx" + }, + { + "t": "the paid status indicates that vast.ai has submitted the payout to your selected payout provider.", + "s": "payment.mdx" + }, + { + "t": "possible results are: on: vms are enabled on your machine. off: vms are disabled on your machine.", + "s": "vms.mdx" + }, + { + "t": "contact your payment provider directly with any questions about your tax forms. by payout method", + "s": "guide-to-taxes.mdx" + }, + { + "t": "you will notice there is now a link to machines in the navigation along with some other changes.", + "s": "hosting-overview.mdx" + }, + { + "t": "this example loads the latest pytorch image along with both jupyter and ssh direct launch modes.", + "s": "hosting-overview.mdx" + }, + { + "t": "you can also query the data directly via the rest api. pass your host api key as a bearer token.", + "s": "market-metrics.mdx" + }, + { + "t": "customers bid above this floor and competition among bidders will drive the actual price higher.", + "s": "optimization-guide.mdx" + }, + { + "t": "bidders will typically pay above this floor so your actual interruptible revenue will be higher.", + "s": "optimization-guide.mdx" + }, + { + "t": "the volume offer will still remain as there is still available space and update to offer 300gb.", + "s": "hosting-overview.mdx" + }, + { + "t": "a pending invoice has been generated and is scheduled for payment during the next payout cycle.", + "s": "payment.mdx" + }, + { + "t": "the latest rental end date across all active rental contracts on a machine is shown in the ui.", + "s": "hosting-overview.mdx" + }, + { + "t": "you must keep the machine online and fully functional through june 30 to honor both contracts.", + "s": "hosting-overview.mdx" + }, + { + "t": "ensuring your machines are verified significantly increases your visibility in search results.", + "s": "optimization-guide.mdx" + }, + { + "t": "it does not indicate whether the funds have completed processing within wise paypal or stripe.", + "s": "payment.mdx" + }, + { + "t": "to generate an invoice: you must have a valid payout method connected to your vast.ai account.", + "s": "payment.mdx" + }, + { + "t": "when a client rents an instance on your machine a rental contract is created from your offer.", + "s": "hosting-overview.mdx" + }, + { + "t": "if you intend to encourage a long term rental this is a factor that you may want to research.", + "s": "hosting-overview.mdx" + }, + { + "t": "balances below 20 usd will automatically roll forward until the minimum threshold is reached.", + "s": "payment.mdx" + }, + { + "t": "invoices generated on friday are generally scheduled to be paid on the following friday. paid", + "s": "payment.mdx" + }, + { + "t": "software drivers/cuda must be correctly installed and compatible use stable latest releases .", + "s": "understanding-verification.mdx" + }, + { + "t": "thus we believe that hosts who have vms enabled can expect to command a substantial preumium.", + "s": "vms.mdx" + }, + { + "t": "log in to stripe express to confirm your tax information name address ssn or ein is current.", + "s": "guide-to-taxes.mdx" + }, + { + "t": "you unlist the current offer and relist at 2.50/gpu/hr with a new offer end date of june 30.", + "s": "hosting-overview.mdx" + }, + { + "t": "this discount is not static but rather scales over time that the user rents the machine for.", + "s": "hosting-overview.mdx" + }, + { + "t": "a well-set interruptible floor ensures your gpus are working even during low-demand periods.", + "s": "optimization-guide.mdx" + }, + { + "t": "this prevents stopped instances from consuming all your storage and starving active rentals.", + "s": "optimization-guide.mdx" + }, + { + "t": "please verify that your payout method has been connected correctly in your account settings.", + "s": "payment.mdx" + }, + { + "t": "off: vms are disabled on your machine. either you disabled vms or our previous tests failed.", + "s": "vms.mdx" + }, + { + "t": "note: the --ignore-requirements flag runs the test in a relaxed mode bypassing some checks.", + "s": "how-to-self-test.mdx" + }, + { + "t": "availability pricing - historical supply/demand counts and p10/median/p90 pricing over time", + "s": "market-metrics.mdx" + }, + { + "t": "it is vital to test your own machine to ensure the ports and software is running smoothly.", + "s": "hosting-overview.mdx" + }, + { + "t": "a single client and hosting account is not supported and you will quickly run into issues.", + "s": "hosting-overview.mdx" + }, + { + "t": "a rental contract is created each time a client accepts your offer by renting an instance.", + "s": "hosting-overview.mdx" + }, + { + "t": "a volume offer is an offer for storage space and can be priced separately from gpu offers.", + "s": "hosting-overview.mdx" + }, + { + "t": "all three require a host api key. regular client keys will receive a 401 error. dashboards", + "s": "market-metrics.mdx" + }, + { + "t": "for an 8-gpu machine this determines whether customers can rent 1 2 4 or 8 gpus at a time.", + "s": "optimization-guide.mdx" + }, + { + "t": "before contacting support please verify: your payout account is active and fully verified.", + "s": "payment.mdx" + }, + { + "t": "--- host responsibilities always keep systems stable well-cooled and correctly configured.", + "s": "verification-stages.mdx" + }, + { + "t": "if the machine is offline at this time there is a job that runs hourly to free the space.", + "s": "hosting-overview.mdx" + }, + { + "t": "these can be meaningful selling points for enterprise and compliance-sensitive customers.", + "s": "optimization-guide.mdx" + }, + { + "t": "you must be signed in as a host with at least one registered machine to access this page.", + "s": "payment.mdx" + }, + { + "t": "do not reduce hardware after creation e.g. fewer gpus/ram - this will trigger deverified.", + "s": "understanding-verification.mdx" + }, + { + "t": "beyond that the system evaluates four primary criteria order not indicative of priority :", + "s": "understanding-verification.mdx" + }, + { + "t": "the client s data must be isolated and protected according to the data protection policy", + "s": "hosting-overview.mdx" + }, + { + "t": "if no one bids consider running your own background jobs on the otherwise-idle hardware.", + "s": "optimization-guide.mdx" + }, + { + "t": "invoices generated on friday are generally scheduled to be paid on the following friday.", + "s": "payment.mdx" + }, + { + "t": "to understand current market pricing and utilization trends visit the market stats page.", + "s": "payment.mdx" + }, + { + "t": "then run sudo update-grub and reboot. disable display managers/background gpu processes.", + "s": "vms.mdx" + }, + { + "t": "as a host you can set this number yourself to 0 if you wish to opt out of this feature.", + "s": "hosting-overview.mdx" + }, + { + "t": "the host setup guide is the official documentation for setting up a machine on vast.ai.", + "s": "hosting-overview.mdx" + }, + { + "t": "expect that the gpu is going to be used at close to max capacity for the rental period.", + "s": "hosting-overview.mdx" + }, + { + "t": "vastai metrics gpu-locations --verified true --datacenter true datacenter-verified only", + "s": "market-metrics.mdx" + }, + { + "t": "the core tradeoff: higher prices increase revenue per rental hour but reduce occupancy.", + "s": "optimization-guide.mdx" + }, + { + "t": "direct bank transfers ach payments wire transfers and swift payments are not available.", + "s": "payment.mdx" + }, + { + "t": "the paid status reflects the status of the payout within vast.ai s billing system only.", + "s": "payment.mdx" + }, + { + "t": "before selecting a payout method verify that: the service is available in your country.", + "s": "payment.mdx" + }, + { + "t": "invoices are only generated when: a payout method is connected to your vast.ai account.", + "s": "payment.mdx" + }, + { + "t": "multi-application server tooling and devops e.g. docker compose kubernetes docker build", + "s": "vms.mdx" + }, + { + "t": "you can also directly create a volume offer by running the vastai list volume command.", + "s": "hosting-overview.mdx" + }, + { + "t": "once that filter is selected hosts who offer that discount will become easily visible.", + "s": "hosting-overview.mdx" + }, + { + "t": "you can see the number of available listings as well as information about the machine.", + "s": "hosting-overview.mdx" + }, + { + "t": "customers often prefer very long durations or no maximum. stable high-value contracts.", + "s": "optimization-guide.mdx" + }, + { + "t": "upgrades adding gpus/ram are allowed but may take time to reflect across the platform.", + "s": "understanding-verification.mdx" + }, + { + "t": "it will appear as unverified in search results until the underlying issue is resolved.", + "s": "verification-stages.mdx" + }, + { + "t": "you will require a cpu and a chipset that support intel vt-d or amd-vi. configure bios", + "s": "vms.mdx" + }, + { + "t": "the owners of the business must be listed on the registration or otherwise verifiable", + "s": "datacenter-status.mdx" + }, + { + "t": "the advertised services must be provided until each rental contract s rental end date", + "s": "hosting-overview.mdx" + }, + { + "t": "you can also unlist and relist with entirely new terms new price new offer end date .", + "s": "hosting-overview.mdx" + }, + { + "t": "a few operational basics make a significant difference in your listing s performance.", + "s": "optimization-guide.mdx" + }, + { + "t": "storage: both capacity and bandwidth e.g. nvme impact responsiveness and reliability.", + "s": "understanding-verification.mdx" + }, + { + "t": "offers are included in the secure cloud searches in the cli and in the web interface", + "s": "datacenter-status.mdx" + }, + { + "t": "the template performance chart displays the earnings history from templates. payouts", + "s": "earning.mdx" + }, + { + "t": "drivers/cuda must be correctly installed and compatible use stable latest releases .", + "s": "understanding-verification.mdx" + }, + { + "t": "if you have questions about your tax obligations please consult a tax professional.", + "s": "guide-to-taxes.mdx" + }, + { + "t": "paypal paypal issues tax forms to qualifying users directly through their platform.", + "s": "guide-to-taxes.mdx" + }, + { + "t": "the offer end date which determines how long the offer accepts new rental contracts", + "s": "hosting-overview.mdx" + }, + { + "t": "as the host you are committing to provide the services as advertised in your offer:", + "s": "hosting-overview.mdx" + }, + { + "t": "newer datacenter/workstation gpus are prioritized e.g. b200 > h200 >> 5090 > 4070 .", + "s": "understanding-verification.mdx" + }, + { + "t": "business information such as a certificate of good standing or other recent record", + "s": "datacenter-status.mdx" + }, + { + "t": "setting an end date on a volume will not update if there is an existing gpu offer.", + "s": "hosting-overview.mdx" + }, + { + "t": "vastai metrics gpu-trends rtx 4090 --start 1773298800 --end 1773817200 --step 3600", + "s": "market-metrics.mdx" + }, + { + "t": "at this floor you re at least covering your electricity costs during idle periods.", + "s": "optimization-guide.mdx" + }, + { + "t": "it s a critical lever for balancing demand capture against utilization efficiency.", + "s": "optimization-guide.mdx" + }, + { + "t": "definition: hardware network and software readiness to meet operational standards.", + "s": "understanding-verification.mdx" + }, + { + "t": "virtualization enabling vm support significantly improves verification likelihood.", + "s": "understanding-verification.mdx" + }, + { + "t": "in order to be listed on vast.ai the machine must follow these minimum guidelines:", + "s": "verification-stages.mdx" + }, + { + "t": "the host must provide the hardware/services according to all the advertised specs", + "s": "hosting-overview.mdx" + }, + { + "t": "dedicated machines only - the machine shouldn t be doing other stuff while rented", + "s": "verification-stages.mdx" + }, + { + "t": "there is no manual intervention ensuring consistency scalability and objectivity.", + "s": "verification-stages.mdx" + }, + { + "t": "hosts with vms enabled may want to set higher disk and internet bandwidth prices.", + "s": "vms.mdx" + }, + { + "t": "as a result of a few factors generally higher search rankings in the marketplace", + "s": "datacenter-status.mdx" + }, + { + "t": "for information on thresholds and delivery refer to paypal s tax help resources.", + "s": "guide-to-taxes.mdx" + }, + { + "t": "disk pricing depends on how much storage you have relative to what clients need:", + "s": "optimization-guide.mdx" + }, + { + "t": "partial rentals can leave awkward hard-to-fill gaps leading to underutilization.", + "s": "optimization-guide.mdx" + }, + { + "t": "your account must accumulate at least 20 usd before an invoice can be generated.", + "s": "payment.mdx" + }, + { + "t": "can vast.ai send my payout via direct bank transfer ach swift wire transfer etc.", + "s": "payment.mdx" + }, + { + "t": "the paid status only reflects the payout status within vast.ai s billing system.", + "s": "payment.mdx" + }, + { + "t": "vms support the following features/use-cases that docker-based instances do not:", + "s": "vms.mdx" + }, + { + "t": "contact your payment provider directly with any questions about your tax forms.", + "s": "guide-to-taxes.mdx" + }, + { + "t": "a rental contract is created at 2.00/gpu/hr with a rental end date of march 31.", + "s": "hosting-overview.mdx" + }, + { + "t": "on demand rentals are the highest priority and if met will stop interruptibles.", + "s": "hosting-overview.mdx" + }, + { + "t": "when a client deletes a volume the space is automatically freed on the machine.", + "s": "hosting-overview.mdx" + }, + { + "t": "all three require a host api key. regular client keys will receive a 401 error.", + "s": "market-metrics.mdx" + }, + { + "t": "gpu overview - current supply/demand counts pricing and stats for each gpu type", + "s": "market-metrics.mdx" + }, + { + "t": "set disk pricing closer to your amortized cost. storage is not your bottleneck.", + "s": "optimization-guide.mdx" + }, + { + "t": "a pending invoice has been generated but has not yet entered the payment phase.", + "s": "payment.mdx" + }, + { + "t": "your cpu must support avx instruction set not all lower end cpus support this .", + "s": "verification-stages.mdx" + }, + { + "t": "a verified machine consistently delivers server services to platform standards.", + "s": "verification-stages.mdx" + }, + { + "t": "use this message to identify and investigate the issue in your logs or metrics.", + "s": "verification-stages.mdx" + }, + { + "t": "amdiommu on or inteliommu on depending on whether you have an amd or intel cpu.", + "s": "vms.mdx" + }, + { + "t": "warning: vms interface much more directly with hardware than docker containers.", + "s": "vms.mdx" + }, + { + "t": "confirm whether you qualify for a tax form based on your earnings and location", + "s": "guide-to-taxes.mdx" + }, + { + "t": "if you have raised the pricing you cannot extend the current rental contracts.", + "s": "hosting-overview.mdx" + }, + { + "t": "as a host plan to offer 100% uptime for your machine during the rental period.", + "s": "hosting-overview.mdx" + }, + { + "t": "a rental contract is created at 2.50/gpu/hr with a rental end date of june 30.", + "s": "hosting-overview.mdx" + }, + { + "t": "if you set min gpus to 1 then clients can make instances with 1 2 4 or 8 gpus.", + "s": "hosting-overview.mdx" + }, + { + "t": "this is the fastest way to also see all the offers listed for a given machine.", + "s": "hosting-overview.mdx" + }, + { + "t": "it reduces churn without requiring you to commit to a longer maximum duration.", + "s": "optimization-guide.mdx" + }, + { + "t": "verification is one of the most common filters customers apply when searching.", + "s": "optimization-guide.mdx" + }, + { + "t": "hosts may customize the information that appears on invoices by navigating to:", + "s": "payment.mdx" + }, + { + "t": "pending: vms are not disabled but will try to enable once the machine is idle.", + "s": "vms.mdx" + }, + { + "t": "important: vast.ai does not automatically withhold taxes. international hosts", + "s": "guide-to-taxes.mdx" + }, + { + "t": "states: unverified to verified to potentially deverified to unverified to ...", + "s": "verification-stages.mdx" + }, + { + "t": "the system hasn t yet completed enough testing to confirm platform standards.", + "s": "verification-stages.mdx" + }, + { + "t": "this is not a judgment of quality-only that no platform guarantee exists yet.", + "s": "verification-stages.mdx" + }, + { + "t": "the template performance chart displays the earnings history from templates.", + "s": "earning.mdx" + }, + { + "t": "clients require open ports to directly connect to the machine for most jobs.", + "s": "hosting-overview.mdx" + }, + { + "t": "a short test workload will be executed to assess actual runtime performance.", + "s": "how-to-self-test.mdx" + }, + { + "t": "however you are locked into your pricing terms for the full contract length.", + "s": "optimization-guide.mdx" + }, + { + "t": "data center hosts: do not set a duration longer than you can reliably honor.", + "s": "optimization-guide.mdx" + }, + { + "t": "balanced scaling matters cpu/ram/pcie/bandwidth commensurate with gpu tier .", + "s": "understanding-verification.mdx" + }, + { + "t": "to qualify a machine must pass minimum baseline and health/stability checks.", + "s": "understanding-verification.mdx" + }, + { + "t": "do verify gpu pcie connections provide full bandwidth and are not throttled.", + "s": "understanding-verification.mdx" + }, + { + "t": "in order to apply you will need to first gather the required documentation:", + "s": "datacenter-status.mdx" + }, + { + "t": "this page in the console allows you to manage your earnings from referrals.", + "s": "earning.mdx" + }, + { + "t": "vast.ai is based in california and does not currently collect or remit vat.", + "s": "guide-to-taxes.mdx" + }, + { + "t": "changing the price does not change the rate on any existing rental contract", + "s": "hosting-overview.mdx" + }, + { + "t": "extending the offer end date allows new clients to rent for a longer period", + "s": "hosting-overview.mdx" + }, + { + "t": "you list a 4a100 machine at 2.00/gpu/hr with an offer end date of march 31.", + "s": "hosting-overview.mdx" + }, + { + "t": "location data is cached for up to 2 hours since it changes less frequently.", + "s": "market-metrics.mdx" + }, + { + "t": "the optimum sits somewhere in the middle and shifts with supply and demand.", + "s": "optimization-guide.mdx" + }, + { + "t": "the min bid price is a floor for the bidding system not an on-demand price.", + "s": "optimization-guide.mdx" + }, + { + "t": "ensure you have the latest nvidia drivers installed at the time of listing.", + "s": "optimization-guide.mdx" + }, + { + "t": "then for each machine id you will need to find the available instance ids.", + "s": "hosting-overview.mdx" + }, + { + "t": "during the self-test the following components and conditions are verified:", + "s": "how-to-self-test.mdx" + }, + { + "t": "your floor price should not be close to your expected actual rental price.", + "s": "optimization-guide.mdx" + }, + { + "t": "settings alone won t help if your machines aren t reliable and up to date.", + "s": "optimization-guide.mdx" + }, + { + "t": "there are no restrictions limitations or compliance holds on your account.", + "s": "payment.mdx" + }, + { + "t": "there are no account limitations restrictions compliance reviews or holds.", + "s": "payment.mdx" + }, + { + "t": "alternatively check out gpu market prices or the host earnings calculator.", + "s": "payment.mdx" + }, + { + "t": "eliminate pcie thermal and power bottlenecks to maintain sustained clocks.", + "s": "understanding-verification.mdx" + }, + { + "t": "what it means: a previously verified machine no longer meets requirements.", + "s": "verification-stages.mdx" + }, + { + "t": "once you accept your account will then be converted to a hosting account.", + "s": "hosting-overview.mdx" + }, + { + "t": "by listing your machine you create an offer visible to potential clients.", + "s": "hosting-overview.mdx" + }, + { + "t": "these workloads are transient. use short-term instances for this segment.", + "s": "optimization-guide.mdx" + }, + { + "t": "researchers and developers testing models before committing to long runs.", + "s": "optimization-guide.mdx" + }, + { + "t": "verify gpu pcie connections provide full bandwidth and are not throttled.", + "s": "understanding-verification.mdx" + }, + { + "t": "the final verification outcome still depends on the factors listed below.", + "s": "understanding-verification.mdx" + }, + { + "t": "ensure drivers/cuda and networking are correctly installed and reachable.", + "s": "verification-stages.mdx" + }, + { + "t": "hardware/system errors e.g. failing storage insufficient pcie bandwidth .", + "s": "verification-stages.mdx" + }, + { + "t": "avoid downgrading hardware capacity e.g. reducing gpu count disk or ram .", + "s": "verification-stages.mdx" + }, + { + "t": "program analysis for cuda-performance optimization e.g. via nvidia nsight", + "s": "vms.mdx" + }, + { + "t": "your account can now list machines that are running the daemon software.", + "s": "hosting-overview.mdx" + }, + { + "t": "hover over the rental button to see the discount rates that are offered.", + "s": "hosting-overview.mdx" + }, + { + "t": "understanding this helps you target the right segment for your hardware:", + "s": "optimization-guide.mdx" + }, + { + "t": "this allows rentals to automatically continue beyond their initial term.", + "s": "optimization-guide.mdx" + }, + { + "t": "cpu: favor strong server-grade cpus actual measured performance matters.", + "s": "understanding-verification.mdx" + }, + { + "t": "do offer in-demand gpu models with adequate vram and balanced resources.", + "s": "understanding-verification.mdx" + }, + { + "t": "vastai metrics gpu-trends rtx 4090 --full all data points vs sampled 20", + "s": "market-metrics.mdx" + }, + { + "t": "over-committing especially data centers price lock-in on long contracts", + "s": "optimization-guide.mdx" + }, + { + "t": "gpu issues e.g. nvidia-smi/nvml failures container device init errors .", + "s": "verification-stages.mdx" + }, + { + "t": "you will require a cpu and a chipset that support intel vt-d or amd-vi.", + "s": "vms.mdx" + }, + { + "t": "make sure to read the section on iommu if you have an amd epyc system.", + "s": "hosting-overview.mdx" + }, + { + "t": "cli via vastai metrics subcommands requires pip install vastai v1.0.4+", + "s": "market-metrics.mdx" + }, + { + "t": "vastai metrics gpu-locations --gpu rtx 4090 h100sxm specific gpu types", + "s": "market-metrics.mdx" + }, + { + "t": "test your machines before listing and after any configuration changes.", + "s": "optimization-guide.mdx" + }, + { + "t": "any required identity tax or business verification has been completed.", + "s": "payment.mdx" + }, + { + "t": "you must have a valid payout method connected to your vast.ai account.", + "s": "payment.mdx" + }, + { + "t": "when issues arise fix them promptly-the automation will update status.", + "s": "verification-stages.mdx" + }, + { + "t": "a red error indicator will appear on your machine in the machines tab.", + "s": "verification-stages.mdx" + }, + { + "t": "vms interface much more directly with hardware than docker containers.", + "s": "vms.mdx" + }, + { + "t": "here you can generate and download invoices for your earning payouts.", + "s": "earning.mdx" + }, + { + "t": "planning maintenance so that no active rental contracts are disrupted", + "s": "hosting-overview.mdx" + }, + { + "t": "in addition to gpu offers hosts can create volume offers on machines.", + "s": "hosting-overview.mdx" + }, + { + "t": "if the test fails: the cli will display detailed reasons for failure.", + "s": "how-to-self-test.mdx" + }, + { + "t": "week 2 friday: payment is submitted to your selected payout provider.", + "s": "payment.mdx" + }, + { + "t": "offer in-demand gpu models with adequate vram and balanced resources.", + "s": "understanding-verification.mdx" + }, + { + "t": "favor dc/workstation gpus ensure pcie lanes match cpu/ram to gpu tier", + "s": "understanding-verification.mdx" + }, + { + "t": "maintain compatible drivers/cuda and dependable symmetric networking.", + "s": "verification-stages.mdx" + }, + { + "t": "open /etc/default/grub and add to the grubcmdlinelinux the following:", + "s": "vms.mdx" + }, + { + "t": "ensure your tax information is up to date with your payment provider", + "s": "guide-to-taxes.mdx" + }, + { + "t": "market conditions change over time so earnings cannot be guaranteed.", + "s": "payment.mdx" + }, + { + "t": "> note: higher reliability greatly improves verification likelihood.", + "s": "understanding-verification.mdx" + }, + { + "t": "do investigate red error indicators quickly review logs and metrics.", + "s": "verification-stages.mdx" + }, + { + "t": "stripe connect stripe manages tax form delivery via stripe express.", + "s": "guide-to-taxes.mdx" + }, + { + "t": "the pricing you set is the rate you ll be paid for that commitment.", + "s": "hosting-overview.mdx" + }, + { + "t": "the ui shows june 30 as the latest rental end date on this machine.", + "s": "hosting-overview.mdx" + }, + { + "t": "the preferred method of testing your own machine is to run the cli.", + "s": "hosting-overview.mdx" + }, + { + "t": "gpu locations - geographic distribution of gpus across the platform", + "s": "market-metrics.mdx" + }, + { + "t": "why does my invoice show paid when i haven t received the funds yet", + "s": "payment.mdx" + }, + { + "t": "enabling vm support significantly improves verification likelihood.", + "s": "understanding-verification.mdx" + }, + { + "t": "downgrading hardware capacity e.g. reducing gpu count disk or ram .", + "s": "verification-stages.mdx" + }, + { + "t": "pip install --upgrade vastai current snapshot - vastai metrics gpu", + "s": "market-metrics.mdx" + }, + { + "t": "different customer types have very different duration preferences.", + "s": "optimization-guide.mdx" + }, + { + "t": "use market data and your competitors pricing as a reference point.", + "s": "optimization-guide.mdx" + }, + { + "t": "the min gpu setting controls the smallest gpu partition you offer.", + "s": "optimization-guide.mdx" + }, + { + "t": "if either requirement is not met an invoice will not be generated.", + "s": "payment.mdx" + }, + { + "t": "government issued ids such as a passport for the business owner s", + "s": "datacenter-status.mdx" + }, + { + "t": "once you have the requiremed documentation to apply please visit:", + "s": "datacenter-status.mdx" + }, + { + "t": "you can find more information about vast s referral program here.", + "s": "earning.mdx" + }, + { + "t": "if you are using vast.ai as a client do not use the same account.", + "s": "hosting-overview.mdx" + }, + { + "t": "on february 1 client b rents the other 2 gpus from the new offer.", + "s": "hosting-overview.mdx" + }, + { + "t": "when clicking on the set pricing button there is a min gpu field.", + "s": "hosting-overview.mdx" + }, + { + "t": "this has the benefit of showing you the entire client experience.", + "s": "hosting-overview.mdx" + }, + { + "t": "see full reference. historical trends - vastai metrics gpu-trends", + "s": "market-metrics.mdx" + }, + { + "t": "your account can receive business payments for services provided.", + "s": "payment.mdx" + }, + { + "t": "run jobs only through the jobs tab or the create job cli command.", + "s": "verification-stages.mdx" + }, + { + "t": "investigate red error indicators quickly review logs and metrics.", + "s": "verification-stages.mdx" + }, + { + "t": "what it means: newly added machines or machines under evaluation.", + "s": "verification-stages.mdx" + }, + { + "t": "there is a link in the first paragraph to the hosting agreement.", + "s": "hosting-overview.mdx" + }, + { + "t": "setting a gpu offer end date will update volume offer end dates.", + "s": "hosting-overview.mdx" + }, + { + "t": "before running the test make sure: your machine has been listed.", + "s": "how-to-self-test.mdx" + }, + { + "t": "see full reference. location data - vastai metrics gpu-locations", + "s": "market-metrics.mdx" + }, + { + "t": "lower prices fill your machines faster but each hour earns less.", + "s": "optimization-guide.mdx" + }, + { + "t": "it typically takes up to two weeks to receive your first payout.", + "s": "payment.mdx" + }, + { + "t": "your payout provider is not requesting additional documentation.", + "s": "payment.mdx" + }, + { + "t": "ensure required ports are open and accessible a static ip helps.", + "s": "understanding-verification.mdx" + }, + { + "t": "common causes network instability closed ports or low bandwidth.", + "s": "verification-stages.mdx" + }, + { + "t": "if you qualify for a form stripe will issue it directly to you.", + "s": "guide-to-taxes.mdx" + }, + { + "t": "the show machine command will show all your connected machines.", + "s": "hosting-overview.mdx" + }, + { + "t": "for example if market rates rise you can t adjust mid-contract.", + "s": "optimization-guide.mdx" + }, + { + "t": "your account balance must meet the 20 minimum payout threshold.", + "s": "payment.mdx" + }, + { + "t": "avoid niche/mismatched configurations with low renter interest.", + "s": "understanding-verification.mdx" + }, + { + "t": "most error messages are cleared within 1-2 hours of resolution.", + "s": "verification-stages.mdx" + }, + { + "t": "do pass the self-test maintain steady uptime during evaluation.", + "s": "verification-stages.mdx" + }, + { + "t": "a contract or invoice from the datacenter linking the business", + "s": "datacenter-status.mdx" + }, + { + "t": "in the payout account section you can set up a payout account.", + "s": "earning.mdx" + }, + { + "t": "vast.ai currently supports payouts through: wise paypal stripe", + "s": "payment.mdx" + }, + { + "t": "do monitor health uptime thermals power and respond to alerts.", + "s": "verification-stages.mdx" + }, + { + "t": "configuring vms on your machine checking vm enablement status.", + "s": "vms.mdx" + }, + { + "t": "one of the following third party certificates must be active:", + "s": "datacenter-status.mdx" + }, + { + "t": "the business must be registered and up to date on all filings", + "s": "datacenter-status.mdx" + }, + { + "t": "vast does not offer support for getting your machine working.", + "s": "hosting-overview.mdx" + }, + { + "t": "the on-demand price is the price per hour for the gpu rental.", + "s": "hosting-overview.mdx" + }, + { + "t": "maintain strong reliability to remain attractive once listed.", + "s": "understanding-verification.mdx" + }, + { + "t": "install latest stable compatible versions use create job only", + "s": "understanding-verification.mdx" + }, + { + "t": "sustained 99.99% up to 99.9999%+ uptime is typically favored.", + "s": "understanding-verification.mdx" + }, + { + "t": "keep the environment clean schedule work via create job only.", + "s": "verification-stages.mdx" + }, + { + "t": "volume offers will be unlisted when the machine is unlisted.", + "s": "hosting-overview.mdx" + }, + { + "t": "vastai set api-key 123123123123123 step 2: run the self-test", + "s": "how-to-self-test.mdx" + }, + { + "t": "returns current supply demand and pricing for all gpu types.", + "s": "market-metrics.mdx" + }, + { + "t": "setting it like an on-demand price leaving gpus idle instead", + "s": "optimization-guide.mdx" + }, + { + "t": "proactively monitor hardware health and perform maintenance.", + "s": "understanding-verification.mdx" + }, + { + "t": "proactive monitoring steady power/thermals minimize restarts", + "s": "understanding-verification.mdx" + }, + { + "t": "fix pcie/thermal bottlenecks maintain clocks correct drivers", + "s": "understanding-verification.mdx" + }, + { + "t": "scale up add gpus/ram avoid reductions that cause deverified", + "s": "understanding-verification.mdx" + }, + { + "t": "avoid misconfigurations that suppress benchmark performance.", + "s": "understanding-verification.mdx" + }, + { + "t": "you can view your payout history for a selected date range.", + "s": "earning.mdx" + }, + { + "t": "volume offer end dates must align with gpu offer end dates.", + "s": "hosting-overview.mdx" + }, + { + "t": "if the test says the machine is not found or not rentable :", + "s": "how-to-self-test.mdx" + }, + { + "t": "if the test passes you ll see: test completed successfully.", + "s": "how-to-self-test.mdx" + }, + { + "t": "all machines at 1x fragmentation or all at 8x missed demand", + "s": "optimization-guide.mdx" + }, + { + "t": "choose popular gpus/vram balance specs maintain reliability", + "s": "understanding-verification.mdx" + }, + { + "t": "avoid pairing high-end gpus with under-provisioned cpu/ram.", + "s": "understanding-verification.mdx" + }, + { + "t": "monitor health uptime thermals power and respond to alerts.", + "s": "verification-stages.mdx" + }, + { + "t": "allowing thermal power or bandwidth instability under load.", + "s": "verification-stages.mdx" + }, + { + "t": "a previously verified machine no longer meets requirements.", + "s": "verification-stages.mdx" + }, + { + "t": "system continuous monitoring detects sustained degradation.", + "s": "verification-stages.mdx" + }, + { + "t": "avoid ignoring warnings or allowing instability to persist.", + "s": "verification-stages.mdx" + }, + { + "t": "managing your offers including pricing and offer end dates", + "s": "hosting-overview.mdx" + }, + { + "t": "for full details see the hosting agreement. offer end date", + "s": "hosting-overview.mdx" + }, + { + "t": "defaults to rtx 5090 4090 and 3090 over the last 24 hours.", + "s": "market-metrics.mdx" + }, + { + "t": "each endpoint allows up to 5 requests per second per user.", + "s": "market-metrics.mdx" + }, + { + "t": "i see my invoice is marked as pending. what does this mean", + "s": "payment.mdx" + }, + { + "t": "other billing details you would like displayed on invoices", + "s": "payment.mdx" + }, + { + "t": "important: vast.ai does not automatically withhold taxes.", + "s": "guide-to-taxes.mdx" + }, + { + "t": "the reserved discount pricing is determined by the hosts.", + "s": "hosting-overview.mdx" + }, + { + "t": "common issues to check: make sure to test the networking.", + "s": "hosting-overview.mdx" + }, + { + "t": "vastai self-test machine 12345 step 3: review the results", + "s": "how-to-self-test.mdx" + }, + { + "t": "vastai metrics gpu-locations --rented false only unrented", + "s": "market-metrics.mdx" + }, + { + "t": "customers often prefer very long durations or no maximum.", + "s": "optimization-guide.mdx" + }, + { + "t": "review your utilization patterns and adjust periodically.", + "s": "optimization-guide.mdx" + }, + { + "t": "your balance has reached the 20 minimum payout threshold.", + "s": "payment.mdx" + }, + { + "t": "vast.ai only supports payouts through: wise paypal stripe", + "s": "payment.mdx" + }, + { + "t": "niche/mismatched configurations with low renter interest.", + "s": "understanding-verification.mdx" + }, + { + "t": "network high-speed symmetric stable bandwidth is favored.", + "s": "understanding-verification.mdx" + }, + { + "t": "keep systems stable well-cooled and correctly configured.", + "s": "verification-stages.mdx" + }, + { + "t": "at least 1x pcie for every 2.5 tflops of gpu performance.", + "s": "verification-stages.mdx" + }, + { + "t": "container launch failures or repeated runtime exceptions.", + "s": "verification-stages.mdx" + }, + { + "t": "validate thermal/power headroom and bandwidth under load.", + "s": "verification-stages.mdx" + }, + { + "t": "example: multiple rental contracts from different offers", + "s": "hosting-overview.mdx" + }, + { + "t": "follow the official setup guide to install the vast cli:", + "s": "how-to-self-test.mdx" + }, + { + "t": "three views are available at cloud.vast.ai/host/market/:", + "s": "market-metrics.mdx" + }, + { + "t": "vastai metrics gpu-trends rtx 4090 h100sxm multiple gpus", + "s": "market-metrics.mdx" + }, + { + "t": "this is one of the most commonly misconfigured settings.", + "s": "optimization-guide.mdx" + }, + { + "t": "keep network connectivity stable avoid jitter and drops.", + "s": "understanding-verification.mdx" + }, + { + "t": "common questions how can i have earnings as a vast user", + "s": "earning.mdx" + }, + { + "t": "vastai list machine -v -z -g .5 -e 12/23/2027 -r 0 -m 1", + "s": "hosting-overview.mdx" + }, + { + "t": "once your account is created open the host setup guide.", + "s": "hosting-overview.mdx" + }, + { + "t": "the offer accepts new rentals until the offer end date.", + "s": "hosting-overview.mdx" + }, + { + "t": "returns time-series data for supply demand and pricing.", + "s": "market-metrics.mdx" + }, + { + "t": "unrelated background workloads that consume gpu/cpu/io.", + "s": "verification-stages.mdx" + }, + { + "t": "keep drivers/cuda on compatible latest stable versions.", + "s": "verification-stages.mdx" + }, + { + "t": "some hosts may also need to add the following settings:", + "s": "vms.mdx" + }, + { + "t": "direct discord or slack channel to vast.ai for support", + "s": "datacenter-status.mdx" + }, + { + "t": "the company must sign the datacenter hosting agreement", + "s": "datacenter-status.mdx" + }, + { + "t": "it s a great way to track how your outreach is growing", + "s": "earning.mdx" + }, + { + "t": "clients have high expectations coming from aws or gcp.", + "s": "hosting-overview.mdx" + }, + { + "t": "these values are determined by the individual host s .", + "s": "hosting-overview.mdx" + }, + { + "t": "there are two supported ways to test your own machine.", + "s": "hosting-overview.mdx" + }, + { + "t": "then you can start an ubuntu terminal and run the cli.", + "s": "hosting-overview.mdx" + }, + { + "t": "replace 12345 with your actual machine id in question.", + "s": "hosting-overview.mdx" + }, + { + "t": "you can also query the data directly via the rest api.", + "s": "market-metrics.mdx" + }, + { + "t": "duration controls how long a rental contract can last.", + "s": "optimization-guide.mdx" + }, + { + "t": "upgrade links verify routing/ports monitor jitter/loss", + "s": "understanding-verification.mdx" + }, + { + "t": "proper vm support is very sensitive to hardware setup.", + "s": "vms.mdx" + }, + { + "t": "overall machine reliability under simulated workloads", + "s": "how-to-self-test.mdx" + }, + { + "t": "a payout method is connected to your vast.ai account.", + "s": "payment.mdx" + }, + { + "t": "keep systems clean run workloads via create job only.", + "s": "understanding-verification.mdx" + }, + { + "t": "pairing high-end gpus with under-provisioned cpu/ram.", + "s": "understanding-verification.mdx" + }, + { + "t": "letting hidden background services consume resources.", + "s": "understanding-verification.mdx" + }, + { + "t": "ignoring warnings or allowing instability to persist.", + "s": "verification-stages.mdx" + }, + { + "t": "> note: high-end gpus are more likely to be verified.", + "s": "verification-stages.mdx" + }, + { + "t": "either you disabled vms or our previous tests failed.", + "s": "vms.mdx" + }, + { + "t": "the mingpu param controlling slicing explained below", + "s": "hosting-overview.mdx" + }, + { + "t": "space is listed in gigabytes and price in /gb/month.", + "s": "hosting-overview.mdx" + }, + { + "t": "yes but changes only affect future rental contracts.", + "s": "hosting-overview.mdx" + }, + { + "t": "existing rental contracts keep their original terms:", + "s": "hosting-overview.mdx" + }, + { + "t": "you must keep the machine available until this date.", + "s": "hosting-overview.mdx" + }, + { + "t": "1.2 authenticate your cli with your vast.ai account:", + "s": "how-to-self-test.mdx" + }, + { + "t": "vastai metrics gpu --verified true --datacenter true", + "s": "market-metrics.mdx" + }, + { + "t": "vastai metrics gpu-trends rtx 4090 --raw json output", + "s": "market-metrics.mdx" + }, + { + "t": "breaking a contract early carries a serious penalty.", + "s": "optimization-guide.mdx" + }, + { + "t": "overheating undervolting or unstable power delivery.", + "s": "understanding-verification.mdx" + }, + { + "t": "keep the latest drivers/cuda aligned with workloads.", + "s": "understanding-verification.mdx" + }, + { + "t": "prefer nvme monitor smart ensure sustained bandwidth", + "s": "understanding-verification.mdx" + }, + { + "t": "do maintain consistent uptime with minimal downtime.", + "s": "understanding-verification.mdx" + }, + { + "t": "fast reliable internet: at least 10mbps per machine.", + "s": "verification-stages.mdx" + }, + { + "t": "at least 1 physical cpu core 2 hyperthreads per gpu.", + "s": "verification-stages.mdx" + }, + { + "t": "re-check health after changes to confirm resolution.", + "s": "verification-stages.mdx" + }, + { + "t": "vat is not currently specified on vast.ai invoices.", + "s": "guide-to-taxes.mdx" + }, + { + "t": "the hardware can not be used for any other purposes", + "s": "hosting-overview.mdx" + }, + { + "t": "./vastai search offers machineid 12345 verified any", + "s": "hosting-overview.mdx" + }, + { + "t": "client a s contract stays at 2.00 through march 31.", + "s": "hosting-overview.mdx" + }, + { + "t": "they can additionally be unlisted with the command:", + "s": "hosting-overview.mdx" + }, + { + "t": "friday: invoice is generated and marked as pending.", + "s": "payment.mdx" + }, + { + "t": "--- frequently asked questions when will i get paid", + "s": "payment.mdx" + }, + { + "t": "confirm required ports and end-to-end reachability.", + "s": "understanding-verification.mdx" + }, + { + "t": "avoid unnecessary reboots or configuration changes.", + "s": "verification-stages.mdx" + }, + { + "t": "windows graphics e.g. for rendering or cloud gaming", + "s": "vms.mdx" + }, + { + "t": "for further reference refer to preparing the iommu.", + "s": "vms.mdx" + }, + { + "t": "on most machines this should be enabled by default.", + "s": "vms.mdx" + }, + { + "t": "client b s contract stays at 2.50 through june 30.", + "s": "hosting-overview.mdx" + }, + { + "t": "the cli will display detailed reasons for failure.", + "s": "how-to-self-test.mdx" + }, + { + "t": "try un-listing your machine then listing it again.", + "s": "how-to-self-test.mdx" + }, + { + "t": "host earnings depend on several factors including:", + "s": "payment.mdx" + }, + { + "t": "network instability closed ports or low bandwidth.", + "s": "verification-stages.mdx" + }, + { + "t": "reducing hardware below the created specification.", + "s": "verification-stages.mdx" + }, + { + "t": "check that virtualization is enabled in your bios.", + "s": "vms.mdx" + }, + { + "t": "vastai unlist volume out of sync rental contracts", + "s": "hosting-overview.mdx" + }, + { + "t": "there are no active clients currently renting it.", + "s": "how-to-self-test.mdx" + }, + { + "t": "what s the right fragmentation vs. demand balance", + "s": "optimization-guide.mdx" + }, + { + "t": "every setting in this guide affects that balance.", + "s": "optimization-guide.mdx" + }, + { + "t": "your payout account is active and fully verified.", + "s": "payment.mdx" + }, + { + "t": "maintain consistent uptime with minimal downtime.", + "s": "understanding-verification.mdx" + }, + { + "t": "high-speed symmetric stable bandwidth is favored.", + "s": "understanding-verification.mdx" + }, + { + "t": "all gpus on the machine must be of the same type.", + "s": "verification-stages.mdx" + }, + { + "t": "seconds between data points e.g. 3600 for hourly", + "s": "market-metrics.mdx" + }, + { + "t": "pricing in a vacuum without checking competitors", + "s": "optimization-guide.mdx" + }, + { + "t": "manage thermals and power to prevent throttling.", + "s": "understanding-verification.mdx" + }, + { + "t": "step-by-step guide step 0: install the vast cli", + "s": "how-to-self-test.mdx" + }, + { + "t": "market metrics data is updated every 5 minutes.", + "s": "market-metrics.mdx" + }, + { + "t": "set disk pricing closer to your amortized cost.", + "s": "optimization-guide.mdx" + }, + { + "t": "other due dilligence documentation as required", + "s": "datacenter-status.mdx" + }, + { + "t": "there are three ways to access market metrics:", + "s": "market-metrics.mdx" + }, + { + "t": "vastai metrics gpu-locations --raw json output", + "s": "market-metrics.mdx" + }, + { + "t": "think of your listing as a product on a shelf.", + "s": "optimization-guide.mdx" + }, + { + "t": "set disk pricing higher than you might expect.", + "s": "optimization-guide.mdx" + }, + { + "t": "vram: more vram improves performance profiles.", + "s": "understanding-verification.mdx" + }, + { + "t": "the min bid price for interruptible instances", + "s": "hosting-overview.mdx" + }, + { + "t": "use the filters in the ui to select reserved.", + "s": "hosting-overview.mdx" + }, + { + "t": "apply the suggested fixes and rerun the test.", + "s": "how-to-self-test.mdx" + }, + { + "t": "historical trends - vastai metrics gpu-trends", + "s": "market-metrics.mdx" + }, + { + "t": "vastai metrics gpu-trends rtx 4090 single gpu", + "s": "market-metrics.mdx" + }, + { + "t": "regular client keys will receive a 401 error.", + "s": "market-metrics.mdx" + }, + { + "t": "are you over- or under-provisioned on storage", + "s": "optimization-guide.mdx" + }, + { + "t": "when your machines are idle you earn nothing.", + "s": "optimization-guide.mdx" + }, + { + "t": "before selecting a payout method verify that:", + "s": "payment.mdx" + }, + { + "t": "avoid frequent restarts or unplanned outages.", + "s": "understanding-verification.mdx" + }, + { + "t": "fast ssd storage with at least 128gb per gpu.", + "s": "verification-stages.mdx" + }, + { + "t": "at least 3 open ports per gpu 100 recommended", + "s": "verification-stages.mdx" + }, + { + "t": "--- minimum guidelines for listing on vast.ai", + "s": "verification-stages.mdx" + }, + { + "t": "the owner must undergo identity verification", + "s": "datacenter-status.mdx" + }, + { + "t": "hosts sell gpu resources on the marketplace.", + "s": "hosting-overview.mdx" + }, + { + "t": "together these form the terms of your offer.", + "s": "hosting-overview.mdx" + }, + { + "t": "on january 20 you decide to raise the price.", + "s": "hosting-overview.mdx" + }, + { + "t": "1.1 get your api key: api keys documentation", + "s": "how-to-self-test.mdx" + }, + { + "t": "location data - vastai metrics gpu-locations", + "s": "market-metrics.mdx" + }, + { + "t": "this depends entirely on your network setup.", + "s": "optimization-guide.mdx" + }, + { + "t": "--- payout schedule minimum payout threshold", + "s": "payment.mdx" + }, + { + "t": "for full details see the hosting agreement.", + "s": "hosting-overview.mdx" + }, + { + "t": "vastai metrics gpu-trends all all gpu types", + "s": "market-metrics.mdx" + }, + { + "t": "current snapshot - verified datacenter gpus", + "s": "market-metrics.mdx" + }, + { + "t": "your account can receive business payments.", + "s": "payment.mdx" + }, + { + "t": "hardware gpu: type memory and count matter.", + "s": "understanding-verification.mdx" + }, + { + "t": "you must create a new account for hosting.", + "s": "hosting-overview.mdx" + }, + { + "t": "rest api endpoints see api reference below", + "s": "market-metrics.mdx" + }, + { + "t": "use short-term instances for this segment.", + "s": "optimization-guide.mdx" + }, + { + "t": "to view and download invoices navigate to:", + "s": "payment.mdx" + }, + { + "t": "do use the latest compatible drivers/cuda.", + "s": "understanding-verification.mdx" + }, + { + "t": "an open port range mapped to each machine.", + "s": "verification-stages.mdx" + }, + { + "t": "cuda version greater than or equal to 12.0", + "s": "verification-stages.mdx" + }, + { + "t": "the equipment must be owned by a business", + "s": "datacenter-status.mdx" + }, + { + "t": "it includes both paid and unpaid amounts.", + "s": "earning.mdx" + }, + { + "t": "historical trends - rtx 4090 hourly steps", + "s": "market-metrics.mdx" + }, + { + "t": "pass your host api key as a bearer token.", + "s": "market-metrics.mdx" + }, + { + "t": "--- quick reference: settings at a glance", + "s": "optimization-guide.mdx" + }, + { + "t": "the service is available in your country.", + "s": "payment.mdx" + }, + { + "t": "invoices are generated weekly on fridays.", + "s": "payment.mdx" + }, + { + "t": "minimum guidelines for listing on vast.ai", + "s": "verification-stages.mdx" + }, + { + "t": "common questions does vast.ai handle vat", + "s": "guide-to-taxes.mdx" + }, + { + "t": "what rate balances occupancy and revenue", + "s": "optimization-guide.mdx" + }, + { + "t": "what s your absolute floor cost of power", + "s": "optimization-guide.mdx" + }, + { + "t": "from the payout history section you can:", + "s": "payment.mdx" + }, + { + "t": "configuring your machine to support vms.", + "s": "vms.mdx" + }, + { + "t": "how the offer becomes a rental contract", + "s": "hosting-overview.mdx" + }, + { + "t": "how can i have earnings as a vast user", + "s": "earning.mdx" + }, + { + "t": "file your taxes accurately and on time", + "s": "guide-to-taxes.mdx" + }, + { + "t": "are drivers current at time of listing", + "s": "optimization-guide.mdx" + }, + { + "t": "only commit to what you can guarantee.", + "s": "optimization-guide.mdx" + }, + { + "t": "my account is not generating invoices.", + "s": "payment.mdx" + }, + { + "t": "how much can i make hosting on vast.ai", + "s": "payment.mdx" + }, + { + "t": "i see my invoice is marked as pending.", + "s": "payment.mdx" + }, + { + "t": "off: vms are disabled on your machine.", + "s": "vms.mdx" + } +]; + const OLD_DOC_ASSETS = [ + { + "src": "/images/console-earning.webp", + "s": "earning.mdx" + }, + { + "src": "/images/console-earning-2.webp", + "s": "earning.mdx" + }, + { + "src": "/images/console-earning-3.webp", + "s": "earning.mdx" + }, + { + "src": "/images/console-earning-4.webp", + "s": "earning.mdx" + }, + { + "src": "/images/offer-contract-lifecycle.png", + "s": "hosting-overview.mdx" + }, + { + "src": "/images/hosting-overview.webp", + "s": "hosting-overview.mdx" + }, + { + "src": "/images/hosting-overview-2.webp", + "s": "hosting-overview.mdx" + } +]; + const MOVED_OLD_DOC_GUIDANCE = [ + { + "path": "/host/account-hosting-agreement", + "t": "Use this page when a host account, hosting agreement, or Machines tab is not behaving as expected.", + "s": "hosting-overview.mdx" + }, + { + "path": "/host/account-hosting-agreement", + "t": "Yes. Use a dedicated account for hosting. Do not use the same account for both client rentals and host operations, because that setup is unsupported and can cause account and machine-management issues.", + "s": "hosting-overview.mdx" + }, + { + "path": "/host/account-hosting-agreement", + "t": "Once your host account is created, open the host setup guide. There is a link in the first paragraph to the hosting agreement. Read through the agreement. Once you accept, your account is converted to a hosting account, and a Machines link appears in the navigation.", + "s": "hosting-overview.mdx" + }, + { + "path": "/host/account-hosting-agreement", + "t": "Your account must be enabled for hosting and the hosting agreement must be accepted. After the account is converted to a host account, the Machines navigation and other host features should become available.", + "s": "hosting-overview.mdx" + }, + { + "path": "/host/hardware-prep", + "t": "Prepare the host machine before installing the Vast host software, including OS, BIOS, driver, power, thermal, and stability checks.", + "s": "hosting-overview.mdx" + }, + { + "path": "/host/hardware-prep", + "t": "Before installing, make sure the host has supported same-type GPUs, native Ubuntu/Linux, an AVX-capable CPU, at least one physical CPU core per listed GPU, adequate RAM, fast SSD/NVMe storage, compatible GPU drivers, stable public networking, and enough direct ports.", + "s": "verification-stages.mdx" + }, + { + "path": "/host/hardware-prep", + "t": "For verification, the self-test preflight enforces the current minimum thresholds (CUDA support, reliability gate, direct ports, PCIe bandwidth, internet bandwidth, VRAM, system RAM).", + "s": "how-to-self-test.mdx" + }, + { + "path": "/host/hardware-prep", + "t": "Current listing guidance requires Ubuntu 24.04 LTS. Confirm it works with your GPU driver, Docker, storage setup, and the Vast host installer before listing a production host.", + "s": "verification-stages.mdx" + }, + { + "path": "/host/hardware-prep", + "t": "Use a stable NVIDIA driver that supports your GPU and a CUDA runtime compatible with the Vast self-test image family.", + "s": "understanding-verification.mdx" + }, + { + "path": "/host/hardware-prep", + "t": "Enable virtualization and IOMMU in BIOS if you plan to support VMs; check IOMMU guidance especially on AMD EPYC systems.", + "s": "vms.mdx" + }, + { + "path": "/host/hardware-prep", + "t": "Disable unattended kernel and driver updates; plan updates through Maintenance Windows instead.", + "s": "hosting-overview.mdx" + }, + { + "path": "/host/installing-host-software", + "t": "Install the Vast host software from the official setup flow, then verify that the daemon, Docker, storage, and GPU runtime are healthy.", + "s": "hosting-overview.mdx" + }, + { + "path": "/host/installing-host-software", + "t": "Copy the current install command from the official Vast host setup page after your account is host-enabled.", + "s": "hosting-overview.mdx" + }, + { + "path": "/host/storage-setup", + "t": "Use fast SSD/NVMe storage mounted predictably for Docker and Vast workloads. Current listing guidance expects at least 128 GB of fast SSD storage per GPU.", + "s": "verification-stages.mdx" + }, + { + "path": "/host/storage-setup", + "t": "Space allocated to rented volume offers is subtracted from the storage available to GPU offers.", + "s": "hosting-overview.mdx" + }, + { + "path": "/host/network-ports", + "t": "Configure public networking, direct ports, firewalls, and router forwarding before verification.", + "s": "hosting-overview.mdx" + }, + { + "path": "/host/network-ports", + "t": "The self-test requires at least 3 direct ports per listed GPU.", + "s": "verification-stages.mdx" + }, + { + "path": "/host/supported-hardware", + "t": "Use this page before buying hardware, installing the host software, or listing a machine.", + "s": "verification-stages.mdx" + }, + { + "path": "/host/supported-hardware", + "t": "Passing the minimum requirements makes a machine eligible for verification. It does not guarantee verification, search placement, rentals, or earnings.", + "s": "how-to-self-test.mdx" + }, + { + "path": "/host/supported-hardware", + "t": "These are baseline expectations for listing a machine:", + "s": "verification-stages.mdx" + }, + { + "path": "/host/supported-hardware", + "t": "Do not size the rest of the machine as an afterthought. A high-end GPU host with weak CPU, low RAM, poor PCIe layout, slow storage, or unstable networking is less likely to pass verification or deliver good renter experience.", + "s": "understanding-verification.mdx" + }, + { + "path": "/host/supported-hardware", + "t": "VM support is optional, but it can affect search visibility and demand for some renters. VM support depends on CPU, chipset, BIOS, IOMMU, kernel, and GPU behavior.", + "s": "vms.mdx" + }, + { + "path": "/host/maintenance-windows", + "t": "Wait until active rental contracts have ended or there are no running instances before planned maintenance. Unlisting prevents new rental contracts, but it does not end existing contracts.", + "s": "hosting-overview.mdx" + }, + { + "path": "/host/reliability-uptime", + "t": "Reliability can drop when the platform observes instability, failed starts, disconnections, downtime, network failures, driver or GPU failures, thermal or power events, or active rental disruption.", + "s": "understanding-verification.mdx" + }, + { + "path": "/host/reliability-uptime", + "t": "Reliability greater than 0.90 is a self-test preflight gate.", + "s": "how-to-self-test.mdx" + } +]; + const PAGE_PARENT_SOURCES = { + "/host/account-hosting-agreement": ["hosting-overview.mdx"], + "/host/common-errors-diagnostics": ["how-to-self-test.mdx", "verification-stages.mdx", "vms.mdx"], + "/host/common-host-questions": ["hosting-overview.mdx", "how-to-self-test.mdx", "verification-stages.mdx", "payment.mdx", "optimization-guide.mdx"], + "/host/community": ["hosting-overview.mdx"], + "/host/first-24-hours": ["hosting-overview.mdx", "how-to-self-test.mdx"], + "/host/fleet-operations": ["hosting-overview.mdx", "optimization-guide.mdx", "market-metrics.mdx"], + "/host/glossary": ["hosting-overview.mdx", "how-to-self-test.mdx", "optimization-guide.mdx", "verification-stages.mdx", "understanding-verification.mdx"], + "/host/hardware-prep": ["hosting-overview.mdx", "verification-stages.mdx", "understanding-verification.mdx", "how-to-self-test.mdx", "vms.mdx"], + "/host/headless-install": ["hosting-overview.mdx", "how-to-self-test.mdx", "vms.mdx"], + "/host/hosting-agreement": ["hosting-overview.mdx"], + "/host/installing-host-software": ["hosting-overview.mdx"], + "/host/maintenance-windows": ["hosting-overview.mdx"], + "/host/network-ports": ["hosting-overview.mdx", "how-to-self-test.mdx", "verification-stages.mdx"], + "/host/not-in-search": ["hosting-overview.mdx", "verification-stages.mdx", "optimization-guide.mdx"], + "/host/persona-decision-guide": ["hosting-overview.mdx", "understanding-verification.mdx", "verification-stages.mdx"], + "/host/pricing-your-listing": ["optimization-guide.mdx", "hosting-overview.mdx"], + "/host/quickstart": ["hosting-overview.mdx", "how-to-self-test.mdx"], + "/host/reliability-uptime": ["understanding-verification.mdx", "verification-stages.mdx", "how-to-self-test.mdx"], + "/host/removing-recreating-machines": ["hosting-overview.mdx", "verification-stages.mdx"], + "/host/self-test-reference": ["how-to-self-test.mdx"], + "/host/storage-setup": ["verification-stages.mdx", "hosting-overview.mdx"], + "/host/supported-hardware": ["verification-stages.mdx", "understanding-verification.mdx", "how-to-self-test.mdx", "vms.mdx"], + "/host/workload-policy": ["hosting-overview.mdx"] + }; + const STATE_KEY = 'vast-old-docs-highlight-enabled'; + let active = false; + let lastPath = ''; + let observer = null; + + function normalize(text) { + return String(text || '') + .toLowerCase() + .replace(/[\u2018\u2019\u201A\u201B]/g, "'") + .replace(/[\u201C\u201D\u201E\u201F]/g, '"') + .replace(/[\u2013\u2014]/g, '-') + .replace(/https?:\/\/\S+/g, ' ') + .replace(/\$+/g, '') + .replace(/[^a-z0-9./:+_<>%$ -]+/g, ' ') + .replace(/\s+/g, ' ') + .trim(); + } + + function hostLikePath() { + return location.pathname === '/host/docs-change-review' || location.pathname.startsWith('/host/'); + } + + function normalizeAssetPath(value) { + if (!value) return ''; + const raw = String(value).trim(); + try { + const url = new URL(raw, location.origin); + const proxied = url.searchParams.get('url'); + if (proxied && url.pathname.includes('/_next/image')) { + return normalizeAssetPath(proxied); + } + return decodeURIComponent(url.pathname).replace(/\/+$/, ''); + } catch { + return raw.split(/[?#]/)[0].replace(/\/+$/, ''); + } + } + + function assetPathsFromSrcset(srcset) { + return String(srcset || '') + .split(',') + .map((part) => normalizeAssetPath(part.trim().split(/\s+/)[0])) + .filter(Boolean); + } + + function ensureStyle() { + if (document.getElementById('vast-old-docs-highlight-style')) return; + const style = document.createElement('style'); + style.id = 'vast-old-docs-highlight-style'; + style.textContent = ` + .vast-old-docs-toggle { + position: fixed; + right: 18px; + bottom: 88px; + z-index: 2147483000; + display: none; + align-items: center; + gap: 8px; + border: 1px solid rgba(245, 158, 11, 0.75); + border-radius: 999px; + padding: 8px 12px; + background: rgba(24, 24, 27, 0.94); + color: #fff7ed; + font: 600 12px/1.1 ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; + box-shadow: 0 12px 30px rgba(0, 0, 0, 0.25); + cursor: pointer; + } + .vast-old-docs-toggle[data-visible="true"] { display: inline-flex; } + .vast-old-docs-toggle[data-active="true"] { background: #7c2d12; color: #fff7ed; } + .vast-old-docs-toggle-count { + display: inline-flex; + min-width: 20px; + height: 20px; + align-items: center; + justify-content: center; + border-radius: 999px; + background: rgba(255, 255, 255, 0.16); + font-size: 11px; + } + .vast-old-docs-reused { + outline: 1px solid rgba(245, 158, 11, 0.75) !important; + background: rgba(245, 158, 11, 0.20) !important; + box-shadow: inset 0 -0.55em rgba(245, 158, 11, 0.20) !important; + border-radius: 4px; + } + .vast-old-docs-reused:hover { + outline-color: rgba(251, 191, 36, 1) !important; + } + .vast-old-docs-reused::selection { background: rgba(245, 158, 11, 0.45); } + .vast-old-docs-reused-media { + position: relative; + outline: 3px solid rgba(14, 165, 233, 0.9) !important; + outline-offset: 3px; + background: rgba(14, 165, 233, 0.10) !important; + border-radius: 6px; + } + .vast-old-docs-reused-media img, + img.vast-old-docs-reused-media { + outline: 3px solid rgba(14, 165, 233, 0.9) !important; + outline-offset: 3px; + border-radius: 6px; + } + .vast-old-docs-reused-media::after { + content: attr(data-vast-old-doc-kind); + position: absolute; + top: 8px; + left: 8px; + z-index: 3; + padding: 4px 7px; + border-radius: 999px; + background: rgba(2, 132, 199, 0.94); + color: #f0f9ff; + font: 700 11px/1 ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; + letter-spacing: 0; + pointer-events: none; + } + .vast-old-docs-parent-badge { + display: inline-flex; + align-items: center; + max-width: 100%; + margin: 0 0 1rem 0; + padding: 0.45rem 0.65rem; + border: 1px solid rgba(14, 165, 233, 0.55); + border-radius: 6px; + background: rgba(14, 165, 233, 0.10); + color: #075985; + font: 600 12px/1.35 ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; + letter-spacing: 0; + overflow-wrap: anywhere; + } + .dark .vast-old-docs-parent-badge { + color: #bae6fd; + background: rgba(14, 165, 233, 0.18); + border-color: rgba(125, 211, 252, 0.50); + } + `; + document.head.appendChild(style); + } + + function ensureButton() { + ensureStyle(); + let btn = document.getElementById('vast-old-docs-highlight-toggle'); + if (btn) return btn; + btn = document.createElement('button'); + btn.id = 'vast-old-docs-highlight-toggle'; + btn.className = 'vast-old-docs-toggle'; + btn.type = 'button'; + btn.title = 'Demo helper: highlight content reused from the old host docs, including text blocks and images. Remove old-docs-highlight-demo.js before PR.'; + btn.innerHTML = 'Old content0'; + btn.addEventListener('click', () => { + active = !active; + localStorage.setItem(STATE_KEY, active ? '1' : '0'); + applyHighlights(); + }); + document.body.appendChild(btn); + return btn; + } + + function contentRoot() { + return document.querySelector('[data-page-href]') || + document.querySelector('main article') || + document.querySelector('main [data-page-content]') || + document.querySelector('main') || + document.body; + } + + function candidateElements() { + const root = contentRoot(); + return Array.from(root.querySelectorAll('p, [data-as="p"], li, td, th, h1, h2, h3, h4, blockquote, code, pre')) + .filter((el) => { + if (el.closest('#vast-old-docs-highlight-toggle')) return false; + if (el.closest('nav, header, footer, aside, button')) return false; + const text = normalize(el.textContent); + return text.length >= 38; + }); + } + + function mediaElements() { + const root = contentRoot(); + return Array.from(root.querySelectorAll('img, source, video, object, embed')) + .filter((el) => { + if (el.closest('#vast-old-docs-highlight-toggle')) return false; + if (el.closest('nav, header, footer, aside, button')) return false; + return true; + }); + } + + function mediaPaths(el) { + const paths = [ + el.currentSrc, + el.getAttribute('src'), + el.getAttribute('data-src'), + el.getAttribute('poster'), + el.getAttribute('data-poster') + ].map(normalizeAssetPath).filter(Boolean); + + paths.push(...assetPathsFromSrcset(el.getAttribute('srcset'))); + return Array.from(new Set(paths)); + } + + function findAssetMatch(el) { + const paths = mediaPaths(el); + for (const path of paths) { + for (const asset of OLD_DOC_ASSETS) { + const oldPath = normalizeAssetPath(asset.src); + if (path === oldPath || path.endsWith(oldPath)) return asset; + } + } + return null; + } + + function mediaHighlightTarget(el) { + const linked = el.closest('a'); + if (linked && linked.querySelectorAll('img, source, video, object, embed').length === 1) return linked; + const picture = el.closest('picture'); + if (picture) return picture; + const figure = el.closest('figure'); + if (figure) return figure; + const parent = el.parentElement; + if (parent && ['P', 'DIV'].includes(parent.tagName) && parent.querySelectorAll('img, source, video, object, embed').length === 1) { + return parent; + } + return el; + } + + function findMatch(text) { + if (!text) return null; + for (const phrase of OLD_DOC_PHRASES) { + if (text.includes(phrase.t)) return phrase; + if (text.length >= 50 && phrase.t.length >= 70 && phrase.t.includes(text)) return phrase; + } + return null; + } + + function findMovedGuidanceMatch(text) { + if (!text) return null; + for (const item of MOVED_OLD_DOC_GUIDANCE) { + if (item.path && item.path !== location.pathname) continue; + const movedText = normalize(item.t); + if (text.includes(movedText)) { + return { + s: item.s, + moved: true + }; + } + } + return null; + } + + function currentParentSources() { + return PAGE_PARENT_SOURCES[location.pathname] || []; + } + + function clearHighlights() { + document.querySelectorAll('.vast-old-docs-parent-badge').forEach((el) => el.remove()); + document.querySelectorAll('.vast-old-docs-reused, .vast-old-docs-reused-media').forEach((el) => { + el.classList.remove('vast-old-docs-reused'); + el.classList.remove('vast-old-docs-reused-media'); + el.removeAttribute('data-vast-old-doc-source'); + el.removeAttribute('data-vast-old-doc-kind'); + if (el.getAttribute('title') === el.dataset.vastOldTitle) el.removeAttribute('title'); + delete el.dataset.vastOldTitle; + }); + } + + function markOldContent(el, className, source, title, kind) { + el.classList.add(className); + el.dataset.vastOldDocSource = source; + el.dataset.vastOldTitle = title; + if (kind) el.dataset.vastOldDocKind = kind; + el.title = el.dataset.vastOldTitle; + } + + function addParentBadge() { + const sources = currentParentSources(); + if (!sources.length) return; + const root = contentRoot(); + const badge = document.createElement('div'); + badge.className = 'vast-old-docs-parent-badge'; + badge.textContent = 'Old parent docs: ' + sources.join(', '); + + const persona = root.querySelector(':scope > .persona-chips'); + if (persona && persona.nextSibling) { + persona.parentNode.insertBefore(badge, persona.nextSibling); + } else if (persona) { + persona.parentNode.appendChild(badge); + } else { + root.insertBefore(badge, root.firstChild); + } + } + + function applyHighlights() { + const btn = ensureButton(); + btn.dataset.visible = hostLikePath() ? 'true' : 'false'; + btn.dataset.active = active ? 'true' : 'false'; + const label = btn.querySelector('.vast-old-docs-toggle-label'); + const count = btn.querySelector('.vast-old-docs-toggle-count'); + clearHighlights(); + + let matches = 0; + const highlighted = new Set(); + if (active && hostLikePath()) { + addParentBadge(); + for (const el of candidateElements()) { + const normalizedText = normalize(el.textContent); + const match = findMatch(normalizedText) || findMovedGuidanceMatch(normalizedText); + if (!match) continue; + if (!highlighted.has(el)) { + matches += 1; + highlighted.add(el); + } + const title = match.moved + ? 'Old docs moved/reworked guidance from ' + match.s + : 'Old docs reused text from ' + match.s; + markOldContent(el, 'vast-old-docs-reused', match.s, title); + } + for (const el of mediaElements()) { + const match = findAssetMatch(el); + if (!match) continue; + const target = mediaHighlightTarget(el); + if (!highlighted.has(target)) { + matches += 1; + highlighted.add(target); + } + markOldContent(target, 'vast-old-docs-reused-media', match.s, 'Old docs reused image from ' + match.s, 'old image'); + } + } + + label.textContent = active ? 'Old content on' : 'Old content off'; + count.textContent = String(matches); + } + + function scheduleApply() { + window.clearTimeout(window.__vastOldDocsHighlightTimer); + window.__vastOldDocsHighlightTimer = window.setTimeout(applyHighlights, 180); + } + + function boot() { + active = localStorage.getItem(STATE_KEY) === '1'; + ensureButton(); + applyHighlights(); + observer = new MutationObserver(scheduleApply); + observer.observe(document.body, { childList: true, subtree: true }); + window.addEventListener('popstate', scheduleApply); + document.addEventListener('click', () => { + window.setTimeout(() => { + if (location.pathname !== lastPath) { + lastPath = location.pathname; + scheduleApply(); + } + }, 250); + }, true); + window.setInterval(() => { + if (location.pathname !== lastPath) { + lastPath = location.pathname; + scheduleApply(); + } + }, 700); + } + + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', boot, { once: true }); + } else { + boot(); + } +})(); diff --git a/persona-chips.css b/persona-chips.css new file mode 100644 index 00000000..21ad54a8 --- /dev/null +++ b/persona-chips.css @@ -0,0 +1,23 @@ +/* Persona tag chips — rendered top-right of host doc pages. + Mintlify applies any .css file in the repo automatically. */ + +.persona-chips { + display: flex; + justify-content: flex-end; + flex-wrap: wrap; + gap: 0.4rem; + margin: 0 0 1.25rem 0; +} + +.persona-chip { + font-size: 0.72rem; + font-weight: 500; + line-height: 1; + letter-spacing: 0.02em; + padding: 0.32rem 0.7rem; + border-radius: 9999px; + border: 1px solid rgba(128, 128, 128, 0.35); + background: rgba(128, 128, 128, 0.08); + opacity: 0.9; + white-space: nowrap; +} From 5840dde511f94e7ac847138b37410ed2f8800c74 Mon Sep 17 00:00:00 2001 From: Hannes Zietsman Date: Wed, 17 Jun 2026 15:48:35 +0200 Subject: [PATCH 03/20] Refine CON-1518 host docs mockup --- host/common-errors-diagnostics.mdx | 20 +++-------- host/common-host-questions.mdx | 5 +-- host/community.mdx | 4 +-- host/first-24-hours.mdx | 10 ++---- host/fleet-operations.mdx | 29 ++++++---------- host/glossary.mdx | 12 +++---- host/hardware-prep.mdx | 4 +-- host/headless-install.mdx | 10 +++--- host/hosting-overview.mdx | 22 +++--------- host/how-to-self-test.mdx | 33 +++--------------- host/installing-host-software.mdx | 46 ++++++++++++++++++++++---- host/network-ports.mdx | 4 ++- host/not-in-search.mdx | 8 ++--- host/pricing-your-listing.mdx | 7 ++-- host/quickstart.mdx | 2 +- host/reliability-uptime.mdx | 6 ++-- host/removing-recreating-machines.mdx | 4 +-- host/self-test-reference.mdx | 16 ++++----- host/storage-setup.mdx | 6 ++-- host/supported-hardware.mdx | 8 ++--- host/understanding-verification.mdx | 14 +++----- host/verification-stages.mdx | 12 +++---- host/workload-policy.mdx | 2 +- images/host-installer-wizard-tui.png | Bin 0 -> 240185 bytes 24 files changed, 125 insertions(+), 159 deletions(-) create mode 100644 images/host-installer-wizard-tui.png diff --git a/host/common-errors-diagnostics.mdx b/host/common-errors-diagnostics.mdx index 49cab4a5..be7936d9 100644 --- a/host/common-errors-diagnostics.mdx +++ b/host/common-errors-diagnostics.mdx @@ -28,17 +28,9 @@ Runtime failures can also include: - `instance/container.log` - `instance/daemon.log` -You can also create a manual bundle with: +You can also create a manual diagnostic bundle with the Vast CLI. Use the current CLI reference for the exact command and run it from the host-enabled account that owns the machine. -```bash -vastai dump-logs -``` - -If you run the helper on the actual host, this can include host-local artifacts such as kaalia logs, `dmesg`, `journalctl`, Docker daemon config, and mount information: - -```bash -vastai dump-logs --include-local-host-artifacts -``` +If you run diagnostics on the actual host, the bundle can include host-local artifacts such as kaalia logs, `dmesg`, `journalctl`, Docker daemon config, and mount information. ## What is this red error message on my machine? @@ -73,16 +65,12 @@ Treat this as a hardware, power, thermal, PCIe, or driver stability issue. Check ## What should I do for failed to inject CDI devices? -If logs or machine status mention failed CDI device injection, treat it as a container GPU device injection or runtime problem. Current self-test output may surface the same underlying issue as a startup or runtime failure instead of using the literal CDI text. Gather a diagnostic bundle, check Docker and NVIDIA container runtime/CDI configuration, confirm GPUs are visible on the host, inspect daemon and container logs, and check for related machine errors. If the configuration looks correct but containers still cannot receive GPU devices, escalate with the machine ID and logs. +If logs or machine status mention failed CDI device injection, treat it as a container GPU device injection or runtime problem. Current self-test output may surface the same underlying issue as a startup or runtime failure instead of using the literal CDI text. Gather a diagnostic bundle, check Docker and NVIDIA container runtime/CDI configuration, confirm GPUs are visible on the host, inspect daemon and container logs, and check for related machine errors. If the configuration looks correct but containers still cannot receive GPU devices, escalate with logs and the machine details requested by support. ## What logs should I collect before asking for help? -Include the machine ID, account context, exact command, timestamps, screenshots or CLI output, tested external IP:port for network failures, and the self-test support bundle when available. If running on the host, include local host artifacts with: - -```bash -vastai dump-logs --include-local-host-artifacts -``` +Include the account context, exact command, timestamps, screenshots or CLI output, tested external IP:port for network failures, and the self-test support bundle when available. If support asks for machine-specific details, share them in the support channel rather than a public community thread. Review bundles before sharing them. diff --git a/host/common-host-questions.mdx b/host/common-host-questions.mdx index 94fc834d..f3eb4951 100644 --- a/host/common-host-questions.mdx +++ b/host/common-host-questions.mdx @@ -35,6 +35,7 @@ Requirements and platform behavior can change as host software, verification, an | Question | Answer | | --- | --- | | What should be ready before I run the host installer? | [Hardware Prep](/host/hardware-prep#install-prerequisites) | +| What is the Host Installer Wizard (TUI)? | [Installing Host Software: Host Installer Wizard](/host/installing-host-software#host-installer-wizard) | | Where should I copy the install command from? | [Installing Host Software](/host/installing-host-software#install-command) | | Why did the install script fail? | [Installing Host Software](/host/installing-host-software#install-failures) | | Where are installer, daemon, and self-test logs? | [Common Errors & Diagnostics](/host/common-errors-diagnostics#logs) | @@ -66,8 +67,8 @@ Requirements and platform behavior can change as host software, verification, an | What should I do for No response for 120s? | [Self-Test Failures](/host/self-test-reference#no-response-120s) | | What should I do for bad bandwidthtest2? | [Common Errors & Diagnostics](/host/common-errors-diagnostics#bad-bandwidthtest2) | | What should I do for failed to inject CDI devices? | [Common Errors & Diagnostics](/host/common-errors-diagnostics#failed-cdi) | -| What should I do for Machine ID not found or not rentable? | [Self-Test Failures](/host/self-test-reference#machine-not-rentable) | -| What should I do when reliability is at or below 0.90? | [Reliability & Uptime](/host/reliability-uptime#reliability-threshold) | +| What should I do when self-test says the machine is not found or not rentable? | [Self-Test Failures](/host/self-test-reference#machine-not-rentable) | +| What should I do when reliability is at or below 0.9? | [Reliability & Uptime](/host/reliability-uptime#reliability-threshold) | | How long can verification take? | [Understanding Verification](/host/understanding-verification#verification-time) | | Can you verify my machine? | [Understanding Verification](/host/understanding-verification#can-support-verify-my-machine) | | How does verification work? | [Understanding Verification](/host/understanding-verification#how-verification-works) | diff --git a/host/community.mdx b/host/community.mdx index 6785cc4e..d885d5ea 100644 --- a/host/community.mdx +++ b/host/community.mdx @@ -28,12 +28,12 @@ The hosting channels are the quickest way to learn more about a specific red mac You will get faster, better answers if your first message includes: -- The machine ID and the exact error string or symptom. +- The exact error string or symptom shown in the console, CLI, or self-test output. - What you have already checked or tried. - Relevant log excerpts or the self-test diagnostic bundle — see [what logs to collect](/host/common-errors-diagnostics#collect-logs). - For network problems, the tested external IP:port the CLI reported. -Review logs and bundles before posting, and never share API keys or install commands — they can contain account-specific token material. +Review logs and bundles before posting, and never share API keys, install commands, sensitive account details, or account-specific token material in public channels. ## What to expect diff --git a/host/first-24-hours.mdx b/host/first-24-hours.mdx index 24ea250e..3a94d9fc 100644 --- a/host/first-24-hours.mdx +++ b/host/first-24-hours.mdx @@ -35,19 +35,13 @@ If you want to use the website GUI, set up a new account on a different email ad The preferred method is the [CLI](https://cloud.vast.ai/cli/). For Windows users, we suggest setting up [WSL](https://learn.microsoft.com/en-us/windows/wsl/install), which requires installing Ubuntu on your Windows machine and enabling virtualization in BIOS. -First list your connected machines: +First review the machines and offers visible to your host account: ```text Text ./vastai show machines ``` -Then find the available offers for your machine ID: - -```text Text -./vastai search offers 'machine_id=12345 verified=any' -``` - -Replace 12345 with your actual machine ID. This is also the fastest way to see all the offers listed for a given machine — the website GUI stacks similar offers, so it is not easy to see all listings there. +Then use the CLI reference or console state to find one of your machine's available offer IDs. The website GUI can group similar offers, so the CLI can be useful for seeing the offer-level state. Do not post API keys, account-specific commands, or sensitive account details in public channels. Take the ID number from the first column and use it to create a free instance on your own machine. This example loads the latest PyTorch image along with both Jupyter and SSH direct launch modes: diff --git a/host/fleet-operations.mdx b/host/fleet-operations.mdx index 9ac9865a..0a6ef238 100644 --- a/host/fleet-operations.mdx +++ b/host/fleet-operations.mdx @@ -16,24 +16,21 @@ Operate many machines from one management box. Every workflow on this page compo Three CLI features make fleet scripting practical: -- `vastai show machines -q` prints **only the numeric machine IDs**, so it composes into other commands. -- `vastai list machines` (plural) accepts **multiple IDs** and applies the same listing arguments to all of them. +- Machine listing commands can return compact output for scripting. +- `vastai list machines` (plural) can apply the same listing arguments to multiple selected machines. - The global `--raw` flag returns machine-readable JSON, and `--retry N` retries flaky calls — use both in unattended scripts. ```bash -# All machine IDs in the fleet -vastai show machines -q - # Full fleet state as JSON for scripts and monitoring vastai show machines --raw ``` ## Bulk listing and pricing updates -Update the listings of every machine at once by feeding the ID list into `list machines`. For example, extending all offer end dates: +Update the listings of selected machines with `list machines`. For example, extending offer end dates across a prepared selection: ```bash -vastai list machines $(vastai show machines -q) -e 12/31/2026 --retry 6 +vastai list machines -e 12/31/2026 --retry 6 ``` The same pattern works for any listing argument — on-demand price (`-g`), min bid floor (`-b`), discount rate (`-r`), min chunk (`-m`), or a rolling end date (`--duration "2 weeks"`). See [vastai list machines](/host/cli/list-machines) for all options and [Pricing Your Listing](/host/pricing-your-listing) for how to choose the values. @@ -47,16 +44,14 @@ Price changes affect **new rental contracts only** — existing contracts keep t Schedule the same window across a rack or site, then audit what is scheduled: ```bash -# Schedule a 2-hour power maintenance for every machine -for id in $(vastai show machines -q); do - vastai schedule maint "$id" --sdate 1782950400 --duration 2 --maintenance_category power -done +# Schedule a 2-hour power maintenance window for a selected machine +vastai schedule maint --sdate 1782950400 --duration 2 --maintenance_category power # Review all scheduled windows -vastai show maints +vastai show maints # Cancel if plans change -vastai cancel maint +vastai cancel maint ``` `--sdate` is unix epoch seconds (UTC) and `--duration` is in hours; categories are `power`, `internet`, `disk`, `gpu`, `software`, or `other`. Clients on affected machines are notified so they can save their work. The policy rules — when to wait for contracts to end versus schedule a window — are in [Maintenance Windows](/host/maintenance-windows). @@ -87,9 +82,9 @@ See [vastai defrag machines](/host/cli/defrag-machines). A practical monitoring loop without a GUI: 1. Pull fleet state with `vastai show machines --raw` and watch for red machine errors, reliability drops, and missing offers. -2. Inspect a specific machine with `vastai show machine ` ([reference](/host/cli/show-machine)). +2. Inspect a selected machine with the console or [vastai show machine](/host/cli/show-machine). 3. After fixing an issue or finishing maintenance, rerun the self-test on the affected machine — see [How to Self-Test](/host/how-to-self-test). The self-test rents a temporary instance, so run it when the machine is idle. -4. Collect diagnostics for any failing machine with `vastai dump-logs ` — see [what to collect](/host/common-errors-diagnostics#collect-logs). +4. Collect diagnostics for any failing machine — see [what to collect](/host/common-errors-diagnostics#collect-logs). For market-wide pricing and demand signals to inform fleet pricing, use [GPU Market Metrics](/host/market-metrics) — the `vastai metrics` commands also support `--raw`. @@ -98,9 +93,7 @@ For market-wide pricing and demand signals to inform fleet pricing, use [GPU Mar Expired or deleted rental contracts occasionally fail to release storage. Clean up fleet-wide: ```bash -for id in $(vastai show machines -q); do - vastai cleanup machine "$id" -done +vastai cleanup machine ``` See [vastai cleanup machine](/host/cli/cleanup-machine). diff --git a/host/glossary.mdx b/host/glossary.mdx index e8854c35..9b3065a3 100644 --- a/host/glossary.mdx +++ b/host/glossary.mdx @@ -48,16 +48,12 @@ What a renter actually runs on your machine — a container (or VM) created from ### Interruptible rental -A lower-priority rental type that works as a bidding system: the highest bid runs and lower bids are paused. Hosts set the minimum bid they will accept. See [rental types](/guides/reference/faq/rental-types) +A lower-priority rental type that works as a bidding system: the highest bid runs and lower-priority instances are stopped while their container and data remain on the machine. Hosts set the minimum bid they will accept. See [rental types](/guides/reference/faq/rental-types) ### kaalia The Vast host daemon that runs on your machine as a systemd service. Its logs are the first place to look for daemon-side problems. See [Common Errors & Diagnostics](/host/common-errors-diagnostics#logs) -### Machine ID - -The backend identifier for a host machine, used in CLI commands like `vastai self-test machine `. Recreating a machine can produce a new ID, so confirm which one is active before reinstalling. See [Removing or Recreating Machines](/host/removing-recreating-machines) - ### Machines tab The host console page listing your machines. It appears in the navigation only after your account is converted to a host account. See [Account & Hosting Agreement](/host/account-hosting-agreement#host-features-tab) @@ -80,11 +76,11 @@ The offer end date is your commitment to keep the machine online and functional ### On-demand rental -The standard, highest-priority rental type at your listed price. Active on-demand rentals pause any interruptible rentals on the same resources. See [rental types](/guides/reference/faq/rental-types) +The standard, highest-priority rental type at your listed price. Active on-demand rentals can stop lower-priority interruptible rentals on the same resources while their container and data remain on the machine. See [rental types](/guides/reference/faq/rental-types) ### Reliability (score) -The platform's measure of a machine's stable operation over time. A score above 0.90 is an eligibility gate for self-test and verification — not a ranking factor — and sustained instability can deverify a verified machine. See [Reliability & Uptime](/host/reliability-uptime) +The platform's measure of a machine's stable operation over time. A score above 0.9 is an eligibility gate for self-test and verification, and higher reliability improves confidence in the machine. Sustained instability can deverify a verified machine. See [Reliability & Uptime](/host/reliability-uptime) ### Rental contract @@ -104,7 +100,7 @@ Unlisting stops new rental contracts but leaves existing ones running until thei ### Verification / verified -The process that marks a machine as meeting platform standards: an automated pre-scan plus vetting by Vast staff (datacenter partners get a dedicated manual process). Verified machines are more visible to renters. See [Verification Stages](/host/verification-stages) and [Understanding Verification](/host/understanding-verification) +The automated process that marks a machine as meeting platform standards. Verified machines are more visible to renters. See [Verification Stages](/host/verification-stages) and [Understanding Verification](/host/understanding-verification) ### vericode diff --git a/host/hardware-prep.mdx b/host/hardware-prep.mdx index 91f1674f..cc84d280 100644 --- a/host/hardware-prep.mdx +++ b/host/hardware-prep.mdx @@ -15,7 +15,7 @@ Prepare the host machine before installing the Vast host software, including OS, ## What should be ready before I run the host installer? -Before installing, make sure the host has supported same-type GPUs, native Ubuntu/Linux, an AVX-capable CPU, at least one physical CPU core per listed GPU, adequate RAM, fast SSD/NVMe storage, compatible GPU drivers, stable public networking, and enough direct ports. +Before installing, make sure the host has supported same-type GPUs, native Ubuntu/Linux, an AVX-capable CPU, at least one physical CPU core per listed GPU, adequate RAM, fast SSD/NVMe storage, compatible GPU drivers, stable public networking, and enough direct ports forwarded for both TCP and UDP. For verification, the self-test preflight enforces the current minimum thresholds (CUDA support, reliability gate, direct ports, PCIe bandwidth, internet bandwidth, VRAM, system RAM). The canonical list lives in [Verification Stages: requirements](/host/verification-stages#additional-requirements-for-verification). @@ -24,7 +24,7 @@ For CPU capacity, use the physical-core rule: the host should have at least one ## What Ubuntu versions should hosts use? -Current listing guidance requires **Ubuntu 24.04 LTS**. Confirm it works with your GPU driver, Docker, storage setup, and the Vast host installer before listing a production host. +Use **Ubuntu 24.04 LTS** for new installs when possible. **Ubuntu 22.04 LTS** also works and may be useful when a driver or operational constraint requires it. Confirm the OS works with your GPU driver, Docker, storage setup, and the Vast host installer before listing a production host. ## What NVIDIA driver version should I use? diff --git a/host/headless-install.mdx b/host/headless-install.mdx index 28d55d7b..80f29b85 100644 --- a/host/headless-install.mdx +++ b/host/headless-install.mdx @@ -175,13 +175,15 @@ sudo bash -c '(crontab -l; echo "@reboot nvidia-smi -pm 1" ) | crontab -' ## Step 7: Install the Vast host software +Use the same official Host Installer Wizard (TUI) for headless machines. Sign in to the host-enabled account, open the [Vast host setup page](https://cloud.vast.ai/host/setup/), copy the current installer command, and run it over SSH on the host machine. + +Keep the SSH session open until the wizard finishes. If the connection might drop, start a `tmux` or `screen` session first: + ```bash -sudo apt install python3 -y -sudo wget https://console.vast.ai/install -O install -sudo python3 install YourKey +tmux new -s vast-install ``` -Replace `YourKey` with your API key. Copy the current install command from the official setup page while signed into your host account — do not reuse commands from old notes or another account ([why](/host/installing-host-software#install-command)). +The wizard should validate account access, drivers, hardware, storage, ports, network speed, installation, and self-test readiness. Do not reuse old `wget`/`python3 install` commands from notes, screenshots, third-party guides, or another account ([why](/host/installing-host-software#install-command)). ## Step 8: Configure GRUB (optional) diff --git a/host/hosting-overview.mdx b/host/hosting-overview.mdx index 22800f30..720a7c32 100644 --- a/host/hosting-overview.mdx +++ b/host/hosting-overview.mdx @@ -110,7 +110,7 @@ The on-demand price is the price per hour for the GPU rental. On demand rentals ### Interruptible min price (optional) -The interruptible price allows for the host to set the minimum interruptible price for a client to rent. Interruptibles work in a bidding system: clients set a bid price for their instance; the current highest bid is the instance that runs, the others are paused. [more info](/guides/reference/faq/rental-types) +The interruptible price allows the host to set the minimum interruptible price a client can bid. Interruptible rentals work as a bidding system: the highest bid runs, and lower-priority instances are stopped while their container and data remain on the machine. [more info](/guides/reference/faq/rental-types) ### Reserved Discount Pricing Factor @@ -148,19 +148,11 @@ If stored instances are only taking up 400 Gb, the volume offer will not update, ### Listing Volumes -By default, volume offers will be listed with GPU offers at the same disk price for half of the available space on the machine. Only rented space will impact the amount of space available for GPU offers, not the space in the offer itself. You can control the amount of space listed with the -v CLI option, and the price of the space with the -z option. +By default, volume offers will be listed with GPU offers at the same disk price for half of the available space on the machine. Only rented space will impact the amount of space available for GPU offers, not the space in the offer itself. You can control the amount of space and price with the current console or CLI listing controls. Space is listed in Gigabytes, and price in \$/Gb/Month. -```text Text -vastai list machine -v -z -g .5 -e "12/23/2027" -r 0 -m 1 -``` - -You can also directly create a volume offer by running the `vastai list volume` command. - -```text Text -vastai list volume -s -p -``` +See [vastai list machine](/host/cli/list-machine) and [vastai list volume](/host/cli/list-volume) for the current CLI syntax. Volume offer end dates **must** align with GPU offer end dates. Setting an end date on a volume will not update if there is an existing GPU offer. Setting a GPU offer end date will update volume offer end dates. @@ -174,13 +166,7 @@ vastai unlist volume ### Out of Sync Rental Contracts -When a client deletes a volume, the space is automatically freed on the machine. If the machine is offline at this time, there is a job that runs hourly to free the space. If for some reason this is not working, or if you want to free the space automatically, you can run the command - -```text Text -vastai cleanup machine -``` - -This will automatically remove expired/deleted rental contracts from the machine, and available storage will update on offers. +When a client deletes a volume, the space is automatically freed on the machine. If the machine is offline at this time, there is a job that runs hourly to free the space. If cleanup is not happening as expected, use the normal cleanup action for that machine from the console or CLI reference so expired or deleted rental contracts can be removed and available storage can update on offers. ## Extending Rental Contracts diff --git a/host/how-to-self-test.mdx b/host/how-to-self-test.mdx index 87e6cb56..7cd9b4d7 100644 --- a/host/how-to-self-test.mdx +++ b/host/how-to-self-test.mdx @@ -76,17 +76,9 @@ Before running the test, make sure: * Your machine has been listed. * There are no active clients currently renting it. -Run the self-test command: +Run the self-test from any machine with the Vast CLI installed. For network checks, the most reliable place to run it is outside the host's LAN, such as a cloud VM, mobile connection, or another external network. Running from the host itself or from the same LAN can give confusing results when the router does not support NAT hairpinning. -``` -vastai self-test machine -``` - -Example: - -``` -vastai self-test machine 12345 -``` +Use the current CLI reference or the command shown in your host account for the exact syntax. Do not paste account-specific commands, API keys, or sensitive account details into public channels. ### Step 3: Review the Results @@ -101,28 +93,13 @@ If the test fails: If the test says the machine is "not found or not rentable": -* Check whether the machine is rented, offline/unlisted, below the reliability threshold, missing active offers, or hidden from your API key: - -``` -vastai search offers 'machine_id= rentable=any rented=any' -``` - +* Check the Machines page for listed state, active rentals, active offers, reliability, red machine errors, and missing machine details such as upload speed, download speed, RAM, or ports. +* Confirm that you are using the same host-enabled account that owns the machine. * See [Self-Test Failures: machine not found or not rentable](/host/self-test-reference#machine-not-rentable) for the possible root states and remediation path. -* Ensure your machine has no missing data in your machines page, such as upload and download speed, RAM, or ports. ### Optional: Ignore Requirements Mode -If your machine is rejected for not meeting requirements, but you still want to check its rentability or run the pressure tests, you can rerun the test with the `--ignore-requirements` flag: - -``` -vastai self-test machine --ignore-requirements -``` - -Example: - -``` -vastai self-test machine 12345 --ignore-requirements -``` +If your machine is rejected for not meeting requirements, but you still want to check rentability or run the pressure tests, the CLI supports an `--ignore-requirements` mode. Use it only as a diagnostic mode, not as a way to qualify a machine for verification. **Note:** The `--ignore-requirements` flag runs the test in a relaxed mode, bypassing some checks. diff --git a/host/installing-host-software.mdx b/host/installing-host-software.mdx index be0cef1c..cd90ac78 100644 --- a/host/installing-host-software.mdx +++ b/host/installing-host-software.mdx @@ -1,7 +1,7 @@ --- title: "Installing the Vast Host Software" sidebarTitle: "Install Host Software" -description: "Canonical install guide for the Vast host daemon and setup script." +description: "Canonical install guide for the Vast host installer wizard and daemon." "canonical": "/host/installing-host-software" personas: - pro-operator @@ -11,7 +11,7 @@ personas:
Pro OperatorHeadless / DCHobbyist
-Install the Vast host software from the official setup flow, then verify that the daemon, Docker, storage, and GPU runtime are healthy. +Install the Vast host software from the official setup flow, then verify that the daemon, Docker, storage, network, and GPU runtime are healthy. ## Before you install @@ -20,18 +20,52 @@ Work through [Hardware Prep](/host/hardware-prep#install-prerequisites) and [Sto
## Where should I copy the install command from? -Copy the current install command from the official Vast host setup page after your account is host-enabled. The command may include account-specific token or API-key material, so do not reuse commands from old notes, screenshots, third-party guides, or another account. +Copy the current installer command from the official [Vast host setup page](https://cloud.vast.ai/host/setup/) after your account is host-enabled. The setup page provides the current Host Installer Wizard for your account and machine. + +The command may include account-specific token or API-key material, so do not reuse commands from old notes, screenshots, third-party guides, or another account. + + +## What is the Host Installer Wizard (TUI)? + +The Host Installer Wizard is Vast's guided terminal user interface (TUI) for new host machines. It runs in the terminal on the host and walks through the install flow step by step instead of leaving you to diagnose a long script failure after the fact. + +![Host Installer Wizard terminal review screen](/images/host-installer-wizard-tui.png) + +The exact screens can change as the installer improves. Always follow the current instructions shown on the official host setup page. + +Use it as the primary install path for new hosts: + +1. Sign in to the host-enabled Vast account. +2. Open the official [host setup page](https://cloud.vast.ai/host/setup/). +3. Copy the current installer command shown there. +4. Run it on the host machine, either locally or over SSH. +5. Work through each wizard screen and fix any failed check before continuing. + +The wizard is intended to check the major issues that usually block a host from becoming rentable: + +| Area | What to expect | +| --- | --- | +| Account access | Validates that the API key or account-specific setup material is usable before the daemon is installed. | +| System readiness | Checks the operating system, NVIDIA driver, CUDA/GPU visibility, CPU/RAM, disk, and Docker-related prerequisites. | +| Network readiness | Tests the configured port range and network speed before install completion. | +| Installation | Installs the Vast host software and shows installer progress in the terminal. | +| Logs and recovery | Shows useful failure context and points to the install log instead of leaving only a raw stack trace. | +| Rentability | Runs or prompts for the host self-test so you can confirm the machine is actually ready to list. | + + +If you are running a headless server, use the same official setup flow over SSH. Keep the SSH session open until the wizard finishes or use a terminal multiplexer such as `tmux` when working over unstable remote links. + ## Why did the install script fail? -Common causes include an expired or stale setup command, a truncated token or API key, an account that has not fully converted to host mode, an interrupted binary download, a deprecated endpoint, an executable or service failure such as `203/EXEC`, Docker/cgroup issues, or storage quota/filesystem mismatch. +Common causes include an expired or stale setup command, a truncated token or API key, an account that has not fully converted to host mode, an interrupted installer download, a deprecated endpoint, an executable or service failure such as `203/EXEC`, Docker/cgroup issues, blocked ports, low upload speed, or storage quota/filesystem mismatch. -Re-copy the install command from the official setup page, confirm the account is host-enabled, then check the installer and daemon logs before retrying. +Re-copy the installer command from the official setup page, confirm the account is host-enabled, then rerun the Host Installer Wizard. If it fails again, use the wizard's displayed error, the installer log, and the daemon logs to decide what to fix before retrying. ## Logs and diagnostics -Check `vast_host_install.log` for installer output and the `kaalia` systemd service for daemon health. For log locations and diagnostic bundles, see [Common Errors & Diagnostics](/host/common-errors-diagnostics#logs). +Check `vast_host_install.log` for installer output and the `kaalia` systemd service for daemon health. The wizard may also show recent log output directly in the terminal when a step fails. For log locations and diagnostic bundles, see [Common Errors & Diagnostics](/host/common-errors-diagnostics#logs). ## After the install diff --git a/host/network-ports.mdx b/host/network-ports.mdx index 075fb30f..c09ccd50 100644 --- a/host/network-ports.mdx +++ b/host/network-ports.mdx @@ -22,7 +22,9 @@ Vast maps a maximum of **64 ports per instance**, so the useful ceiling scales w ## Do I need TCP and UDP forwarding? -The self-test progress service uses container port `5000/tcp`, and the CLI connects to the mapped external public IP and port. Keep TCP and UDP forwarding consistent for your direct port range where your network setup requires both protocols. +Yes. Forward both TCP and UDP for the configured direct port range. Treat this as a host networking requirement, not an optional optimization. + +Some checks and workflows use TCP, but renter workloads can require UDP. Keeping both protocols forwarded across the same direct port range avoids partial connectivity that only appears after a renter starts using the machine. ## What if I am behind CGNAT, Starlink, IPv6-only, or no public IP? diff --git a/host/not-in-search.mdx b/host/not-in-search.mdx index 074308ba..0fac53a9 100644 --- a/host/not-in-search.mdx +++ b/host/not-in-search.mdx @@ -21,13 +21,9 @@ Separate "listed" from "visible in a normal broad search." There are over 10,000 ## Check the machine directly -Inspect the machine with CLI filters such as `machine_id=MACHINE_ID`, and include states like `verified=any`, `rentable=any`, or `rented=any` where appropriate: +Start in the Machines page for the host account. Confirm that the machine is online, listed, has active offers, has no red machine errors, and is not currently rented in a way that hides the offer you expect to see. -```bash -vastai search offers 'machine_id=MACHINE_ID verified=any rentable=any rented=any' -``` - -If the CLI returns a result, the machine is properly listed. Then check whether the machine is rented, unverified or deverified, below the reliability threshold, has zero active offers, has offer-side errors, or is offline/unlisted. +If the machine looks healthy there but is hard to find in marketplace search, narrow the search by GPU model, region, verification state, price range, and rentable/rented state. The machine can be listed correctly but still not appear in a broad search because other machines rank higher, similar offers are grouped, or your filters exclude it. ## Comparing your ranking diff --git a/host/pricing-your-listing.mdx b/host/pricing-your-listing.mdx index 94944ac8..e936c7da 100644 --- a/host/pricing-your-listing.mdx +++ b/host/pricing-your-listing.mdx @@ -63,18 +63,17 @@ A 4-GPU machine has comparable 30-day market prices of P10 `$0.35`, median `$0.4 | Minimum GPU chunk | `1` | Lets renters take 1, 2, or 4 GPUs instead of requiring the whole machine. | | Offer end date | A known maintenance-safe date | Avoids open-ended commitments the host may not be able to honor. | -The matching CLI shape is: +The matching CLI options are: ```bash -vastai list machine \ - --price_gpu 0.45 \ +--price_gpu 0.45 \ --price_min_bid 0.25 \ --discount_rate 0.30 \ --min_chunk 1 \ --end_date 12/31/2026 ``` -Adjust the numbers for your market, operating costs, and risk tolerance. +Use those values through the console or the current [vastai list machine](/host/cli/list-machine) CLI syntax. Adjust the numbers for your market, operating costs, and risk tolerance. ## Changing Price Later diff --git a/host/quickstart.mdx b/host/quickstart.mdx index 2d51831a..f9ea3bcf 100644 --- a/host/quickstart.mdx +++ b/host/quickstart.mdx @@ -16,7 +16,7 @@ Follow this ordered path for a first-time Vast host setup. Each step links to th 1. **Decide whether Vast fits your hardware and expectations.** Read [Is Vast for Me?](/host/persona-decision-guide) and check your hardware against [Supported Hardware](/host/supported-hardware). 2. **Create a dedicated host account and accept the hosting agreement.** See [Account & Hosting Agreement](/host/account-hosting-agreement). 3. **Prepare the machine.** Set up Ubuntu, drivers, and BIOS with [Hardware Prep](/host/hardware-prep), disks with [Storage Setup](/host/storage-setup), and port forwarding with [Network & Ports](/host/network-ports). -4. **Install the Vast host software.** Follow [Installing Host Software](/host/installing-host-software). Running over SSH only? Use the [Headless Install Path](/host/headless-install). +4. **Install the Vast host software with the Host Installer Wizard (TUI).** Follow [Installing Host Software](/host/installing-host-software#host-installer-wizard). Running over SSH only? Use the [Headless Install Path](/host/headless-install). 5. **List the machine.** Set your price and terms with [Pricing Your Listing](/host/pricing-your-listing). 6. **Run the self-test.** Follow [How to Self-Test](/host/how-to-self-test), and decode any failures with the [Self-Test Reference](/host/self-test-reference). 7. **Understand verification and first-rental expectations.** Read [Understanding Verification](/host/understanding-verification) and [First 24 Hours After Install](/host/first-24-hours). diff --git a/host/reliability-uptime.mdx b/host/reliability-uptime.mdx index f57991b9..43d9d15c 100644 --- a/host/reliability-uptime.mdx +++ b/host/reliability-uptime.mdx @@ -25,11 +25,11 @@ If you must take the machine offline, minimize the offline time. The score also Reliability recovery depends on sustained stable operation and the machine's recent incident history. Some error messages can clear after the underlying issue is resolved, but reliability score recovery should not be treated as an instant reset. Keep the machine stable and error-free, then monitor the score over time. -## What should I do when reliability is at or below 0.90? +## What should I do when reliability is at or below 0.9? -Reliability greater than 0.90 is a self-test preflight gate. If the machine is at or below the threshold, the normal self-test can fail before renting the temporary instance. Keep the machine stable, resolve recent hardware, network, driver, daemon, thermal, power, or rental-disruption issues, then retry once the score recovers. +Reliability greater than 0.9 is a self-test and verification gate. If the machine is at or below the threshold, the normal self-test can fail before renting the temporary instance and the machine will not enter the verification pool. Keep the machine stable, resolve recent hardware, network, driver, daemon, thermal, power, or rental-disruption issues, then retry once the score recovers. -The gate exists so machines that have not been online for a sufficient amount of time are not put through verification testing. It is an eligibility gate, not a ranking factor: above the gate, a higher score does not by itself increase verification priority. Sustained instability after verification can, however, cause a verified machine to be deverified. +The gate exists so machines that have not been online for a sufficient amount of time are not put through verification testing. Above the gate, higher reliability can make verification more likely because the automated process has more confidence in the machine. Sustained instability after verification can cause a verified machine to be deverified. Do not use `--ignore-requirements` as a verification shortcut. It is only useful for dogfooding or runtime validation, and the machine still needs enough direct ports for the runtime test to work. diff --git a/host/removing-recreating-machines.mdx b/host/removing-recreating-machines.mdx index 449c3a6a..40d77358 100644 --- a/host/removing-recreating-machines.mdx +++ b/host/removing-recreating-machines.mdx @@ -17,7 +17,7 @@ Use this page when you need to unlist, delete, recreate, or replace a host machi ## How do I unlist, delete, or recreate a machine? -Unlisting stops new rental contracts from being created, but it does not end existing contracts. Deleting or recreating a machine should only happen after active commitments and stored workloads are understood. Recreating may be useful after a failed install, stale record, or major hardware change, but make sure you know which machine ID is active before reinstalling. +Unlisting stops new rental contracts from being created, but it does not end existing contracts. Deleting or recreating a machine should only happen after active commitments and stored workloads are understood. Recreating may be useful after a failed install, stale record, or major hardware change, but do not use undocumented reset or recovery flags unless Vast support specifically instructs you to do so. From the CLI, see [vastai unlist machine](/host/cli/unlist-machine), [vastai delete machine](/host/cli/delete-machine), and [vastai cleanup machine](/host/cli/cleanup-machine). @@ -34,7 +34,7 @@ To uninstall, use the Vast uninstall script located at [https://s3.amazonaws.com ## What should I do with a ghost machine? -First inspect whether the machine has active contracts, stored instances or volumes, visible offers, or backend state preventing deletion. Use the normal unlist/delete/cleanup path only when safe. If a stale backend record remains after normal cleanup, collect the machine ID, account, screenshots or CLI output, and relevant logs, then contact Vast support. +First inspect whether the machine has active contracts, stored instances or volumes, visible offers, or backend state preventing deletion. Use the normal unlist/delete/cleanup path only when safe. If a stale backend record remains after normal cleanup, collect the account context, screenshots or CLI output, and relevant logs, then contact Vast support. ## Related pages diff --git a/host/self-test-reference.mdx b/host/self-test-reference.mdx index 2825f3ef..54136701 100644 --- a/host/self-test-reference.mdx +++ b/host/self-test-reference.mdx @@ -34,17 +34,17 @@ A `no response` or progress timeout means the CLI could not get usable progress Other likely causes include container startup failure, Docker/NVIDIA runtime stalls, host daemon stalls, GPU or system hangs, or upload instability. -## Machine ID not found or not rentable +## Machine not found or not rentable -This can mean the machine is already rented, has zero active on-demand offers, is offline or unlisted, is not visible to the API account, is deverified or below a threshold, has offer-side error metadata, or the API key cannot inspect the host/offer state. +This can mean the machine is already rented, has zero active on-demand offers, is offline or unlisted, is not visible to the account running the test, is deverified or below a threshold, or has offer-side error metadata. Start with: -```bash -vastai search offers 'machine_id=MACHINE_ID rentable=any rented=any' -``` - -Then confirm the machine ID, API key/account, listed state, active offers, rental state, reliability, and any error metadata. +1. Open the Machines page for the host account. +2. Confirm the machine is listed, online, not currently rented, and has active offers. +3. Check reliability, verification state, red machine errors, and missing details such as ports, RAM, upload speed, and download speed. +4. Confirm the CLI is authenticated to the same host-enabled account. +5. If the console state looks wrong after refresh and rerun, collect logs and escalate to support. ## Which warnings can be ignored? @@ -53,7 +53,7 @@ Avoid ignoring warnings by default. One clear self-test advisory is that mapping ## Reliability below the preflight gate -Reliability greater than 0.90 is a self-test preflight gate; if the machine is at or below it, the self-test can fail before renting the temporary instance. See [Reliability & Uptime](/host/reliability-uptime#reliability-threshold). +Reliability greater than 0.9 is a self-test and verification gate; if the machine is at or below it, the self-test can fail before renting the temporary instance. See [Reliability & Uptime](/host/reliability-uptime#reliability-threshold). ## Errors not specific to the self-test diff --git a/host/storage-setup.mdx b/host/storage-setup.mdx index b693f3a8..b27677a4 100644 --- a/host/storage-setup.mdx +++ b/host/storage-setup.mdx @@ -31,7 +31,9 @@ Replace the UUID with the value from `blkid` for your XFS-formatted partition. T ## Is XFS with project quotas required? -XFS with project quota support is the preferred layout when Docker storage quotas are used. Some machines may appear to work with other layouts, but quota-backed Docker storage errors are much easier to avoid when Docker's data root is on an XFS filesystem with project quotas enabled. +Yes. Vast uses XFS project quotas to enforce per-container storage quotas. Put Docker's data root on an XFS filesystem mounted with project quota support. + +Do not fix quota errors by removing Docker storage quota configuration. If Docker reports a quota or pquota error, fix the filesystem and mount layout instead. ## How should I choose single NVMe vs RAID/NVMe? @@ -43,7 +45,7 @@ For one NVMe, use a stable mount with enough capacity and performance for Docker The error `--storage-opt is supported only for overlay over xfs with pquota` means Docker is being asked to use per-container storage quotas on a backing filesystem that is not mounted as XFS with project quota support. -Move Docker's data root to a correctly mounted XFS filesystem with project quotas, then restart Docker and the host software after verifying the mount. Back up or confirm the target disk before formatting or moving Docker data. +Move Docker's data root to a correctly mounted XFS filesystem with project quotas, then restart Docker and the host software after verifying the mount. Back up or confirm the target disk before formatting or moving Docker data. Do not disable storage quota enforcement as a workaround. ## Volume offers and host disk diff --git a/host/supported-hardware.mdx b/host/supported-hardware.mdx index a7078588..a03cb38a 100644 --- a/host/supported-hardware.mdx +++ b/host/supported-hardware.mdx @@ -38,7 +38,7 @@ Current listing guidance includes: | Vendor | Current guidance | | --- | --- | -| NVIDIA | 10-series NVIDIA GPUs or newer. Higher-demand datacenter, workstation, and recent consumer GPUs are more likely to be useful to renters. | +| NVIDIA | 10-series NVIDIA GPUs or newer. Older GPUs may depend on self-test image compatibility and are usually less attractive to renters. Higher-demand datacenter, workstation, and recent consumer GPUs are more likely to be useful. | | AMD | MI25 or newer Radeon Instinct, Radeon VII, Radeon Pro VII, Radeon RX 7900 GRE/XT/XTX, and Radeon Pro W7900/W7800. Other 6000-series or newer Radeon RX/Pro W GPUs may work, but may not be searchable with standard AMD ROCm filters. | All GPUs in the machine should be the same type. Avoid mixed GPU models in one listed machine unless Vast explicitly documents support for that setup. @@ -51,14 +51,14 @@ These are baseline expectations for listing a machine: | Area | Baseline | | --- | --- | -| Operating system | Ubuntu 24.04 LTS. Confirm the release works with your GPU driver, Docker, storage setup, and the Vast host installer — see [Ubuntu versions](/host/hardware-prep#ubuntu-versions). | +| Operating system | Ubuntu 24.04 LTS is preferred for new installs. Ubuntu 22.04 also works. See [Ubuntu versions](/host/hardware-prep#ubuntu-versions). | | Machine use | Dedicated host machine. Do not use the same machine for unrelated workloads while it is rented. | | GPU type | Supported same-type GPUs. | | CPU | AVX-capable CPU. At least one physical CPU core per listed GPU. Hyperthreads and logical CPUs do not count as physical cores. CPUs without hyperthreading are fine. | | System RAM | At least 4 GB system RAM per GPU as a listing baseline. Self-test can require much more, especially on high-VRAM machines. | | Storage | Fast SSD/NVMe storage with at least 128 GB per GPU. | | PCIe | At least 1x PCIe for every 2.5 TFLOPS of GPU performance. Avoid riser, lane, power, or BIOS layouts that throttle GPUs. | -| Network | Fast, reliable internet and an open direct port range mapped to the machine. | +| Network | Fast, reliable internet and an open direct port range mapped to the machine for both TCP and UDP. | ## Verification And Self-Test Requirements @@ -81,7 +81,7 @@ Use these rules of thumb: Use fast SSD/NVMe storage mounted predictably before Docker and the host daemon start. -For Docker storage quotas, XFS with project quota support is the preferred path. Storage problems often appear later as install failures, Docker quota errors, self-test failures, or poor renter performance. See [Storage Setup](/host/storage-setup). +For Docker storage quotas, Vast uses XFS with project quota support. Storage problems often appear later as install failures, Docker quota errors, self-test failures, or poor renter performance. See [Storage Setup](/host/storage-setup). ## Network diff --git a/host/understanding-verification.mdx b/host/understanding-verification.mdx index 26ba922f..95120974 100644 --- a/host/understanding-verification.mdx +++ b/host/understanding-verification.mdx @@ -16,14 +16,10 @@ personas: ## How Verification Works -Verification combines **automated screening** with **internal vetting**. Proprietary algorithms continuously evaluate each machine's operational health and performance, dynamically adjusting assessments based on real-time **supply and demand**. +Verification is fully automated. Proprietary algorithms continuously evaluate each machine's operational health and performance, dynamically adjusting assessments based on real-time **supply and demand**. Only machines that meet the platform's defined reliability and performance thresholds are eligible for verification. -Community machines that pass the automated pre-scan are then vetted by Vast staff before being marked verified. Large datacenter partners go through a dedicated manual verification process — see [Datacenter Status](/host/datacenter-status). - ---- - To qualify, a machine must pass [minimum baseline](/host/how-to-self-test), and health/stability checks. Beyond that, the system evaluates four primary criteria (order not indicative of priority): @@ -34,7 +30,7 @@ To qualify, a machine must pass [minimum baseline](/host/how-to-self-test), and **Definition:** Stable, uninterrupted operation over time (uptime, resilience under continuous workloads). -**How it affects verification:** The reliability score acts as an **eligibility gate, not a ranking factor**. Machines at or below 0.90 reliability are not tested — the gate exists so machines that have not been online for a sufficient amount of time are not put through verification. Above the gate, a higher score does not by itself increase verification priority. Sustained instability after verification can, however, cause a machine to be deverified. +**How it affects verification:** A machine enters the verification pool when reliability is greater than 0.9. Machines at or below the gate are not eligible for verification. Above the gate, higher reliability can improve the chance of verification, and sustained instability after verification can cause a machine to be deverified. **Do** @@ -132,12 +128,12 @@ To qualify, a machine must pass [minimum baseline](/host/how-to-self-test), and ## How Long Can Verification Take? -Passing self-test makes a machine eligible, but it does not guarantee immediate verification. Community machines are pre-scanned automatically and then vetted by Vast staff, so timing depends on machine health, supply and demand, platform policy, and the internal vetting queue. Support can help with account or backend anomalies, but ordinary host verification should not be treated as a manual support queue. +Passing self-test makes a machine eligible, but it does not guarantee immediate verification. Timing depends on automated checks, reliability, machine health, supply and demand, and platform policy. Support can help with account or backend anomalies, but ordinary host verification should not be treated as a manual support queue. ## Can support verify my machine? -Verification is primarily automated and queue-based for community hosts. Support can help with account issues, backend anomalies, or datacenter partner workflows, but ordinary verification should not be treated as a manual request queue. For most hosts, the useful action is to keep the machine healthy, eligible, and competitively listed while the automated process evaluates demand and readiness. +No. Verification is automated and does not require manual intervention. Support can help with account issues or backend anomalies, but ordinary verification should not be treated as a manual request queue. For most hosts, the useful action is to keep the machine healthy, eligible, and competitively listed while the automated process evaluates demand and readiness. --- @@ -145,7 +141,7 @@ Verification is primarily automated and queue-based for community hosts. Support | **Category** | **What Matters Most** | **How to Improve** | |---------------|------------------------|--------------------| -| Reliability | Staying above the 0.90 eligibility gate; stability after verification | Proactive monitoring; steady power/thermals; minimize restarts | +| Reliability | Staying above the 0.9 eligibility gate; higher reliability improves confidence | Proactive monitoring; steady power/thermals; minimize restarts | | Network | Symmetric, stable bandwidth; open ports | Upgrade links; verify routing/ports; monitor jitter/loss | | Hardware | Modern GPUs/CPUs; adequate PCIe & RAM | Favor DC/workstation GPUs; ensure PCIe lanes; match CPU/RAM to GPU tier | | Storage | Throughput and reliability | Prefer NVMe; monitor SMART; ensure sustained bandwidth | diff --git a/host/verification-stages.mdx b/host/verification-stages.mdx index 7c33e2a1..dc6058e1 100644 --- a/host/verification-stages.mdx +++ b/host/verification-stages.mdx @@ -23,7 +23,7 @@ personas: ## How It Works -Verification combines **automated screening** with **internal vetting**, incorporating [supply-and-demand](/host/understanding-verification#supply-demand) dynamics. Community machines are pre-scanned automatically and then vetted by Vast staff; large datacenter partners go through a dedicated manual verification process (see [Datacenter Status](/host/datacenter-status)). +Verification is fully automated and incorporates [supply-and-demand](/host/understanding-verification#supply-demand) dynamics. There is no manual step required for ordinary host verification. Only machines that meet the platform's reliability and [performance thresholds](/host/how-to-self-test) are eligible for verification. @@ -61,7 +61,7 @@ Only machines that meet the platform's reliability and [performance thresholds]( In order to be listed on Vast.ai, the machine must follow these minimum guidelines: ```text Text -- Ubuntu 24.04 LTS (required) +- Ubuntu 24.04 LTS preferred; Ubuntu 22.04 LTS also works - Dedicated machines only - the machine shouldn't be doing other stuff while rented - Fast, reliable internet: at least 10Mbps per machine. - 10-series Nvidia GPU or MI25 or newer Radeon Instinct series GPU or Radeon VII or Radeon Pro VII or Radeon RX 7900 (GRE/XT/XTX); or Radeon Pro W7900/W7800. Other 6000 series or newer Radeon RX/Pro W series GPUs may be supported; but may not be searchable using standard filters for AMD ROCm. @@ -81,8 +81,8 @@ In order for your unverified machine to be verified, it must also meet the follo ```text Text - CUDA version greater than or equal to 11.8 -- Reliability greater than 0.90 -- At least 3 open ports per GPU +- Reliability greater than 0.9 +- At least 3 open direct ports per GPU, forwarded for both TCP and UDP - Internet Download speed must scale with total machine VRAM at ~2.6 Mbps per GiB, with a 100 Mbps floor and 500 Mbps ceiling - Internet Upload speed must scale with total machine VRAM at ~2.6 Mbps per GiB, with a 100 Mbps floor and 500 Mbps ceiling - GPU RAM greater than 7 GB @@ -90,7 +90,7 @@ In order for your unverified machine to be verified, it must also meet the follo - Passing the Self-Test ``` -The reliability gate exists so machines that have not been online for a sufficient amount of time are not tested; it is an eligibility gate, not a ranking factor — see [Reliability & Uptime](/host/reliability-uptime#reliability-threshold). For port sizing beyond the minimum (per-instance limits and useful ceilings), see [Network & Ports](/host/network-ports#ports-per-gpu). +The reliability gate exists so machines that have not been online for a sufficient amount of time are not tested. A machine enters the verification pool when reliability is greater than 0.9, and higher reliability improves confidence — see [Reliability & Uptime](/host/reliability-uptime#reliability-threshold). For port sizing beyond the minimum (per-instance limits and useful ceilings), see [Network & Ports](/host/network-ports#ports-per-gpu). This list is the canonical home for verification requirements — other pages link here rather than restating the thresholds. > **Note:** High-end GPUs are more likely to be verified. Machines with datacenter GPUs such as B200, H200, H100, A100, etc., and those with premium GPUs such as RTX PRO 6000 WS, 8xRTX 5090, 8xRTX 4090, etc., receive prioritized verification processing due to their high demand and performance capabilities. @@ -146,4 +146,4 @@ This process may take some time, as the system ensures that the issue is fully r - Ignoring warnings or allowing instability to persist. - Reducing hardware below the created specification. -> **Note:** If you’ve fixed the issue but the system doesn’t automatically detect the resolution, a Vast.ai team member may need to manually check that your machine is functioning correctly and clear the error. +> **Note:** If you’ve fixed the issue but the system doesn’t automatically detect the resolution, wait for the platform to refresh state and collect diagnostics if the machine still looks wrong. Support can help with account or backend anomalies, but verification itself is automated. diff --git a/host/workload-policy.mdx b/host/workload-policy.mdx index 0667daca..a50130b4 100644 --- a/host/workload-policy.mdx +++ b/host/workload-policy.mdx @@ -75,7 +75,7 @@ For host docs, use this rule: - Treat Bittensor, validator/miner, subnet, and similar workloads as policy-sensitive when they involve token rewards, chain participation, proof-of-work, or credit-card-funded usage. - If a renter asks whether a specific crypto-adjacent workload is allowed, point them to the [Terms of Service](https://vast.ai/terms) or support rather than making a host-side policy decision. -If you suspect a renter is violating policy, collect the machine ID, instance ID if available, timestamps, and observable symptoms. Do not inspect private renter data to investigate. +If you suspect a renter is violating policy, collect timestamps, observable symptoms, relevant console screenshots, and the instance details available to your account. Do not inspect private renter data to investigate. ## What Hosts Should Do diff --git a/images/host-installer-wizard-tui.png b/images/host-installer-wizard-tui.png new file mode 100644 index 0000000000000000000000000000000000000000..0a7a45fd768d4ede15c360a7267f3e23616221f6 GIT binary patch literal 240185 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 X{Q!LRgZtI0fx-AMn)Cks1>cLxE#k$wZMioL2 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
UA& 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σ_oJdRUvpxl;S)En69)ICsiDo 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 Date: Fri, 19 Jun 2026 13:00:55 +0200 Subject: [PATCH 04/20] docs(host): human-review common host questions --- docs.json | 2 +- host/account-hosting-agreement.mdx | 2 +- host/common-errors-diagnostics.mdx | 136 +- host/common-host-questions.mdx | 134 +- host/community.mdx | 13 +- host/datacenter-status.mdx | 43 +- host/docs-change-review.mdx | 115 - host/earning.mdx | 161 +- host/first-24-hours.mdx | 80 +- host/fleet-operations.mdx | 77 +- host/glossary.mdx | 60 +- host/hardware-prep.mdx | 23 +- host/headless-install.mdx | 223 +- host/hosting-overview.mdx | 184 +- host/how-to-self-test.mdx | 127 +- host/installing-host-software.mdx | 119 +- host/market-metrics.mdx | 129 +- host/network-ports.mdx | 108 +- host/not-in-search.mdx | 28 +- host/optimization-guide.mdx | 179 +- host/payment.mdx | 174 +- host/persona-decision-guide.mdx | 97 +- host/pricing-your-listing.mdx | 106 +- host/reliability-uptime.mdx | 2 +- host/self-test-reference.mdx | 9 +- host/storage-setup.mdx | 117 +- host/supported-hardware.mdx | 123 +- host/understanding-verification.mdx | 153 +- host/verification-stages.mdx | 171 +- host/vms.mdx | 127 +- host/workload-policy.mdx | 94 +- old-docs-highlight-demo.js | 3628 ----------------------- snippets/host/cli/self-test-machine.mdx | 19 +- 33 files changed, 1397 insertions(+), 5366 deletions(-) delete mode 100644 host/docs-change-review.mdx delete mode 100644 old-docs-highlight-demo.js diff --git a/docs.json b/docs.json index 63a7e2db..c203841c 100644 --- a/docs.json +++ b/docs.json @@ -159,7 +159,7 @@ "group": "Teams", "icon": "users", "pages": [ - "guides/teams/overview", + "guides/teams/teams-overview", "guides/teams/managing-teams", "guides/teams/teams-roles", "guides/teams/legacy-teams" diff --git a/host/account-hosting-agreement.mdx b/host/account-hosting-agreement.mdx index 1715dfa1..ae14da5c 100644 --- a/host/account-hosting-agreement.mdx +++ b/host/account-hosting-agreement.mdx @@ -21,7 +21,7 @@ Yes. Use a dedicated account for hosting. Do not use the same account for both c ## How to accept the hosting agreement -Once your host account is created, open the [host setup guide](https://cloud.vast.ai/host/setup/). There is a link in the first paragraph to the hosting agreement. Read through the agreement. Once you accept, your account is converted to a hosting account, and a Machines link appears in the navigation. Your account can now list machines that are running the daemon software. +Once your host account is created, open the [host setup page](https://cloud.vast.ai/host/setup/). There is a link in the first paragraph to the hosting agreement. Read through the agreement. Once you accept, your account is converted to a hosting account, and a Machines link appears in the navigation. Your account can now list machines that are running the daemon software. ## What must happen before I can see host features or the Machines tab? diff --git a/host/common-errors-diagnostics.mdx b/host/common-errors-diagnostics.mdx index be7936d9..429d59de 100644 --- a/host/common-errors-diagnostics.mdx +++ b/host/common-errors-diagnostics.mdx @@ -10,81 +10,153 @@ personas:
Pro OperatorHeadless / DC
-Use this page for host errors that are not specific to install, networking, or self-test, and for collecting diagnostics before asking for help. +Use this page for host errors that are not covered by install, networking, or self-test pages.
-## Where are installer, daemon, and self-test logs? +## Logs -For self-test failures, the CLI can create a diagnostic bundle. Default self-test bundles include: +Installer logs are written to `vast_host_install.log` in the directory where you launched the installer, not under `/var/lib/vastai_kaalia`. + +```bash +cat vast_host_install.log +``` + +If the installer created a compressed log archive: + +```bash +tar -xzvf vastai_install_logs.tar.gz +cat vast_host_install.log +``` + +The host daemon log is: + +```bash +sudo tail -n 100 /var/lib/vastai_kaalia/kaalia.log +``` + +For self-test failures, the CLI can create a diagnostic bundle. The normal command is: + +```bash +vastai self-test machine +``` + +Failure bundles are saved by default under: + +```text +/tmp/vast_selftest__.tar.gz +``` + +You can override the output directory: + +```bash +vastai self-test machine \ + --support-bundle-dir /path/to/output +``` + +Bundles can include: - `self-test-output.log` - `self-test-result.json` - `manifest.json` - `collection-errors.json` - -Runtime failures can also include: - - `instance/show-instance.json` - `instance/container.log` - `instance/daemon.log` -You can also create a manual diagnostic bundle with the Vast CLI. Use the current CLI reference for the exact command and run it from the host-enabled account that owns the machine. +For a quick SSH check: + +```bash +systemctl is-active vastai.service vast_metrics.service docker nvidia-persistenced.service +sudo journalctl -u vastai.service -n 80 --no-pager +sudo journalctl -u vast_metrics.service -n 80 --no-pager +sudo tail -n 100 /var/lib/vastai_kaalia/kaalia.log +sudo cat /var/lib/vastai_kaalia/host_port_range +``` + +Services should be `active`, logs should not show restart loops or repeated fatal errors, and the configured port range should match the forwarded ports. + + +## GPU, PCIe, And AER Kernel Logs -If you run diagnostics on the actual host, the bundle can include host-local artifacts such as kaalia logs, `dmesg`, `journalctl`, Docker daemon config, and mount information. +Use kernel logs to distinguish a normal container/runtime error from a machine-health problem: + +- **NVRM**: NVIDIA kernel driver messages. +- **Xid**: NVIDIA GPU fault, reset, or error codes. +- **PCIe**: the bus/link between the GPU, motherboard, and CPU. +- **AER**: PCIe Advanced Error Reporting messages. Repeated AER messages can point to risers, slots, power, BIOS lane settings, cabling, motherboard, or GPU hardware issues. + +Check the current boot: + +```bash +sudo journalctl -k -b --no-pager | grep -Ei 'NVRM|Xid|AER|PCIe|fallen|GPU has fallen' +sudo dmesg -T | grep -Ei 'NVRM|Xid|AER|PCIe|fallen|GPU has fallen' +``` + +Treat repeated Xid, NVRM, PCIe, or AER errors as host hardware/driver health signals, not as isolated self-test messages. -## What is this red error message on my machine? +## Red Machine Error -If the hosting software detects an error, that error message is listed on your machine in the machines page. Once the cause of the error has been resolved, most error messages are automatically cleared after 1-2 hours. The quickest way to learn more about resolving specific error messages is the hosting channels in [our Discord](https://discord.gg/hSuEbSQ4X8). +The Machines page shows red errors detected by the host software. Fix the cause, then allow the platform to refresh. Many resolved errors clear automatically after 1-2 hours. -## My storage for clients is full of old stopped jobs — can I free up space? +## Full Client Storage -Try cleaning up the Docker build cache, as it sometimes frees up far more space than it claims. You can also clean up old unused images. For expired or deleted rental contracts that did not release their storage, run [vastai cleanup machine](/host/cli/cleanup-machine). +Try cleaning Docker build cache and old unused images. For expired or deleted rentals that did not release storage, run [vastai cleanup machine](/host/cli/cleanup-machine). -## What should I do when nvidia-smi fails? +## `nvidia-smi` Fails -Treat `nvidia-smi` failure as a host GPU or driver health problem. Check whether the NVIDIA driver is loaded, whether the GPU is visible on the PCIe bus, whether a reboot is needed after a driver or kernel update, whether there is an NVML driver/library mismatch, and whether system logs show NVRM, Xid, or PCIe errors. Do not keep a machine listed if it cannot reliably report GPU state. +Treat this as a GPU or driver health problem. Check driver load, PCIe visibility, reboot state after updates, NVML mismatch, and NVRM/Xid/PCIe logs. Do not list a machine that cannot reliably report GPU state. -## What should I do for NVML driver/library mismatch? +## NVML Driver/Library Mismatch -This usually means the NVIDIA userspace library and loaded kernel module are from different driver versions, often after an update. Plan downtime and reboot first. If the mismatch persists, clean up or reinstall the NVIDIA driver stack, then verify `nvidia-smi` before listing again. +This usually means the NVIDIA userspace library and loaded kernel module are different versions. Plan downtime, reboot first, then reinstall or repair the NVIDIA driver stack if needed. -## What should I do when a GPU falls off the PCIe bus? +## GPU Falls Off The PCIe Bus -Treat this as a hardware, power, thermal, PCIe, or driver stability issue. Check logs for NVRM, Xid, and PCIe/AER errors. Power-cycle the machine, then inspect PSU capacity, power cables, risers, slots, PCIe lane settings, thermals, and any overclock or undervolt. Repeated bus drops should be fixed before the machine is listed again. +Check NVRM, Xid, and PCIe/AER logs. Power-cycle, then inspect PSU capacity, cables, risers, slots, PCIe lane settings, thermals, and any overclock/undervolt. Fix repeated bus drops before listing again. -## What should I do for bad bandwidthtest2? +## `bad bandwidthtest2` -`bad bandwidthtest2` is best treated as a machine health or verification error. It usually points at a GPU, PCIe, driver/runtime, or data-transfer problem. Check PCIe bandwidth and lane configuration, GPU seating, thermals, power, driver and NVML health, Xid errors, Docker GPU runtime behavior, and self-test diagnostic output. Rerun self-test after fixing the hardware or driver issue. +Treat this as a machine health or verification error. Check PCIe bandwidth, lane configuration, GPU seating, thermals, power, driver/NVML health, Xid errors, Docker GPU runtime behavior, and self-test output. Rerun self-test after fixes. -## What should I do for failed to inject CDI devices? +## Failed To Inject CDI Devices -If logs or machine status mention failed CDI device injection, treat it as a container GPU device injection or runtime problem. Current self-test output may surface the same underlying issue as a startup or runtime failure instead of using the literal CDI text. Gather a diagnostic bundle, check Docker and NVIDIA container runtime/CDI configuration, confirm GPUs are visible on the host, inspect daemon and container logs, and check for related machine errors. If the configuration looks correct but containers still cannot receive GPU devices, escalate with logs and the machine details requested by support. +This points to GPU device injection or container runtime setup. Gather diagnostics, confirm GPUs are visible on the host, check Docker/NVIDIA runtime/CDI configuration, and inspect daemon/container logs. Do not assume regenerating CDI configuration fixes an unhealthy GPU, driver, or PCIe link. Escalate with logs if containers still cannot receive GPUs. -## What logs should I collect before asking for help? +## Before Asking For Help + +Include: -Include the account context, exact command, timestamps, screenshots or CLI output, tested external IP:port for network failures, and the self-test support bundle when available. If support asks for machine-specific details, share them in the support channel rather than a public community thread. +- Account context and exact command. +- Machine ID, offer ID if relevant, and whether the account is the host account. +- Exact timestamps with timezone. +- Exact error strings, screenshots, or CLI output. +- What changed recently: reboot, driver, kernel, Docker, BIOS, storage, router, or ISP. +- Host OS, GPU model/count, NVIDIA driver version, and Docker storage mount output. +- Tested external IP and port for networking issues. +- Self-test support bundle when available. +- Installer log, daemon log, and relevant kernel log excerpts. -Review bundles before sharing them. +Review bundles before sharing them. Share sensitive machine/account details only in the appropriate support channel. -## What should I escalate to Vast support? +## Escalate To Vast Support -Escalate account conversion or hosting agreement issues, payment/tax/payout provider issues that the docs cannot resolve, backend machine records or ghost machines that normal UI/CLI actions cannot remove, API permission or account-visibility problems, suspected backend bugs, and cases where self-test or diagnostics show a platform state mismatch after following documented steps. +Escalate account conversion, hosting agreement, payout, API permission, backend machine record, ghost machine, suspected backend bug, or platform-state mismatch issues. -Local Ubuntu, Docker, GPU driver, hardware, power, thermals, and consumer network setup are primarily host responsibilities. Bring logs and diagnostics when asking for help. +Local Ubuntu, Docker, GPU driver, hardware, power, thermals, and consumer networking are primarily host responsibilities. Vast hosting requires direct public inbound TCP/UDP reachability; CGNAT or double NAT without a real public forwarding path is not a supported hosting network setup. -## Related pages +## Related Pages | Topic | Read next | | --- | --- | -| Install-time failures | [Installing Host Software](/host/installing-host-software#install-failures) | -| Self-test error strings | [Self-Test Reference](/host/self-test-reference) | -| Connectivity problems | [Network & Ports](/host/network-ports) | +| Install failures | [Installing Host Software](/host/installing-host-software#install-failures) | +| Self-test errors | [Self-Test Reference](/host/self-test-reference) | +| Connectivity | [Network & Ports](/host/network-ports) | diff --git a/host/common-host-questions.mdx b/host/common-host-questions.mdx index f3eb4951..6e5bb4a6 100644 --- a/host/common-host-questions.mdx +++ b/host/common-host-questions.mdx @@ -1,7 +1,7 @@ --- title: "Common Host Questions" sidebarTitle: "Common Questions" -description: "Index of common questions for Vast.ai hosts, linking to the canonical answer on each topic page." +description: "Common questions for Vast.ai hosts, with links to the canonical answer pages." "canonical": "/host/common-host-questions" personas: - pro-operator @@ -12,104 +12,62 @@ personas:
All host personas
-This page is a question index. Each answer lives on exactly one topic page, so support replies, CLI errors, and search results can link to a single canonical home per topic. +Use this page to route common host questions to the page that owns the answer. - -Requirements and platform behavior can change as host software, verification, and marketplace policy evolve. For the current machine-specific result, run the host self-test and review the measured checks it reports. - +## Getting Started -## Getting started and account setup - -| Question | Answer | +| Question | Read | | --- | --- | -| What hardware is supported for hosting? | [Supported Hardware](/host/supported-hardware) | -| What hardware or OS combinations should I avoid? | [Supported Hardware: unsupported setups](/host/supported-hardware#unsupported-or-discouraged-setups) | -| What is the recommended first-time setup path? | [Hosting Quickstart](/host/quickstart) | -| How do I host my machine or rent my PC? | [Hosting Quickstart](/host/quickstart) | -| What must happen before I can see host features? | [Account & Hosting Agreement](/host/account-hosting-agreement#host-features-tab) | +| Is Vast a good fit for me? | [Is Vast for Me?](/host/persona-decision-guide) | +| What hardware is supported? | [Supported Hardware](/host/supported-hardware) | +| What setups should I avoid? | [Unsupported setups](/host/supported-hardware#unsupported-or-discouraged-setups) | +| What is the first-time setup path? | [Hosting Quickstart](/host/quickstart) | | Do I need a separate host account? | [Account & Hosting Agreement](/host/account-hosting-agreement#separate-host-account) | -| What if I accepted the agreement but still see a client account? | [Account & Hosting Agreement](/host/account-hosting-agreement#agreement-stuck) | +| Why do I not see host features or Machines? | [Account & Hosting Agreement](/host/account-hosting-agreement#host-features-tab) | -## Install, storage, drivers, and daemon health +## Install And Machine Health -| Question | Answer | +| Question | Read | | --- | --- | -| What should be ready before I run the host installer? | [Hardware Prep](/host/hardware-prep#install-prerequisites) | -| What is the Host Installer Wizard (TUI)? | [Installing Host Software: Host Installer Wizard](/host/installing-host-software#host-installer-wizard) | -| Where should I copy the install command from? | [Installing Host Software](/host/installing-host-software#install-command) | -| Why did the install script fail? | [Installing Host Software](/host/installing-host-software#install-failures) | -| Where are installer, daemon, and self-test logs? | [Common Errors & Diagnostics](/host/common-errors-diagnostics#logs) | -| What does a healthy host daemon look like? | [First 24 Hours](/host/first-24-hours#healthy-daemon) | -| How should I set up Docker storage? | [Storage Setup](/host/storage-setup#docker-storage-layout) | -| What should a normal NVMe or SSD fstab line look like? | [Storage Setup: fstab example](/host/storage-setup#fstab-example) | -| Is XFS with project quotas required? | [Storage Setup](/host/storage-setup#xfs-prjquota) | -| How should I choose single NVMe vs RAID/NVMe? | [Storage Setup](/host/storage-setup#nvme-raid) | -| What causes the Docker pquota storage error? | [Storage Setup](/host/storage-setup#pquota-error) | -| What Ubuntu versions should hosts use? | [Hardware Prep](/host/hardware-prep#ubuntu-versions) | -| What NVIDIA driver version should I use? | [Hardware Prep](/host/hardware-prep#nvidia-driver-version) | -| Should I disable automatic updates? | [Maintenance Windows](/host/maintenance-windows#automatic-updates) | -| What should I do when nvidia-smi fails? | [Common Errors & Diagnostics](/host/common-errors-diagnostics#nvidia-smi-fails) | -| What should I do for NVML driver/library mismatch? | [Common Errors & Diagnostics](/host/common-errors-diagnostics#nvml-mismatch) | -| What should I do when a GPU falls off the PCIe bus? | [Common Errors & Diagnostics](/host/common-errors-diagnostics#gpu-falls-off-bus) | -| What is this red error message on my machine? | [Common Errors & Diagnostics](/host/common-errors-diagnostics#red-error) | -| Can I remove old jobs or Docker data to free client storage? | [Common Errors & Diagnostics](/host/common-errors-diagnostics#docker-cache) | +| What should be ready before installing? | [Hardware Prep](/host/hardware-prep#install-prerequisites) | +| What is the Host Installer Wizard? | [Install Host Software](/host/installing-host-software#host-installer-wizard) | +| Why did install fail? | [Install failures](/host/installing-host-software#install-failures) | +| How should Docker storage be mounted? | [Storage Setup](/host/storage-setup#docker-storage-layout) | +| Is XFS project quota required? | [Storage Setup](/host/storage-setup#xfs-prjquota) | +| What Ubuntu and driver versions should I use? | [Hardware Prep](/host/hardware-prep#ubuntu-versions) | +| Where are logs and diagnostics? | [Errors & Diagnostics](/host/common-errors-diagnostics#logs) | +| What should I do for NVIDIA/NVML/CDI errors? | [Errors & Diagnostics](/host/common-errors-diagnostics) | -## Network, self-test, and verification +## Network, Self-Test, And Verification -| Question | Answer | +| Question | Read | | --- | --- | -| How many direct ports are required per GPU? | [Network & Ports](/host/network-ports#ports-per-gpu) | -| Do I need TCP and UDP forwarding? | [Network & Ports](/host/network-ports#tcp-udp) | +| How many direct ports do I need? | [Network & Ports](/host/network-ports#ports-per-gpu) | +| Do I need TCP and UDP? | [Network & Ports](/host/network-ports#tcp-udp) | | What if I am behind CGNAT, Starlink, IPv6-only, or no public IP? | [Network & Ports](/host/network-ports#cgnat-starlink-ipv6) | -| How should I test ports from outside my LAN? | [Network & Ports](/host/network-ports#test-ports-outside-lan) | -| What does [vericode=8](/host/glossary#vericode) or Port Networking Issues mean? | [Self-Test Failures](/host/self-test-reference#vericode-8) | -| What does the self-test check? | [How to Self-Test](/host/how-to-self-test#what-the-self-test-checks) | -| What should I do for No response for 120s? | [Self-Test Failures](/host/self-test-reference#no-response-120s) | -| What should I do for bad bandwidthtest2? | [Common Errors & Diagnostics](/host/common-errors-diagnostics#bad-bandwidthtest2) | -| What should I do for failed to inject CDI devices? | [Common Errors & Diagnostics](/host/common-errors-diagnostics#failed-cdi) | -| What should I do when self-test says the machine is not found or not rentable? | [Self-Test Failures](/host/self-test-reference#machine-not-rentable) | -| What should I do when reliability is at or below 0.9? | [Reliability & Uptime](/host/reliability-uptime#reliability-threshold) | -| How long can verification take? | [Understanding Verification](/host/understanding-verification#verification-time) | -| Can you verify my machine? | [Understanding Verification](/host/understanding-verification#can-support-verify-my-machine) | -| How does verification work? | [Understanding Verification](/host/understanding-verification#how-verification-works) | -| What factors affect verification? | [Understanding Verification](/host/understanding-verification) | -| How do I check if my machine is listed? | [Why Isn't My Machine in Search?: check directly](/host/not-in-search#check-machine-listed) | -| Why is my machine listed but not visible in search? | [Why Isn't My Machine in Search?](/host/not-in-search) | -| I can't find my machine. What should I check? | [Why Isn't My Machine in Search?](/host/not-in-search) | +| How do I test ports from outside my LAN? | [Network & Ports](/host/network-ports#test-ports-outside-lan) | +| What does self-test check? | [How to Self-Test](/host/how-to-self-test#what-the-self-test-checks) | +| What does `vericode=8` mean? | [Self-Test Reference](/host/self-test-reference#vericode-8) | +| Why is my machine not found, not rentable, or not in search? | [Why Isn't My Machine in Search?](/host/not-in-search) | +| How does verification work? | [Understanding Verification](/host/understanding-verification) | + +## Pricing, Payouts, And Operations + +| Question | Read | +| --- | --- | +| How should I estimate earnings? | [Earnings & Pricing Model](/host/earning) | +| How should I price listings? | [Pricing Your Listing](/host/pricing-your-listing) | +| Where is market price data? | [GPU Market Metrics](/host/market-metrics) | +| When will I get paid? | [Host Payouts](/host/payment#when-paid) | +| How do I get an invoice? | [Host Payouts](/host/payment#get-an-invoice) | +| What are tax/provider rules? | [Tax Guide](/host/guide-to-taxes) | +| Why did reliability drop? | [Reliability & Uptime](/host/reliability-uptime) | +| How do I handle maintenance, cleanup, or removal? | [Maintenance Windows](/host/maintenance-windows) and [Remove or Recreate](/host/removing-recreating-machines) | -## Pricing, payouts, and operations +## Support Boundary -| Question | Answer | +| Question | Read | | --- | --- | -| How should I price my listings? | [Pricing Your Listing](/host/pricing-your-listing) | -| What simple pricing model should I understand? | [Earnings & Pricing Model](/host/earning) | -| How much can I make hosting on Vast? | [Earnings & Pricing Model](/host/earning#hosting-earnings) | -| What should I know about min GPU, bids, and discounts? | [Pricing Your Listing: listing controls](/host/pricing-your-listing#listing-controls) | -| How do hosts get paid? | [Host Payouts](/host/payment) | -| When will I get paid? | [Host Payouts: timing](/host/payment#when-paid) | -| How do I get an invoice? | [Host Payouts: invoices](/host/payment#get-an-invoice) | -| Why does my invoice show Paid if funds have not arrived? | [Host Payouts: paid invoice](/host/payment#paid-invoice) | -| What does a Pending invoice mean? | [Host Payouts: pending invoice](/host/payment#pending-invoice) | -| Can Vast.ai send my payout by direct bank transfer? | [Host Payouts: payout methods](/host/payment#direct-bank-transfer) | -| Why is my account not generating invoices? | [Host Payouts: invoice generation](/host/payment#invoice-not-generating) | -| Can I generate an invoice manually? | [Host Payouts: manual invoice](/host/payment#manual-invoice) | -| How can I have earnings as a Vast user? | [Host Payouts: referral and template earnings](/host/payment#vast-user-earnings) | -| What are the Stripe, tax, and withdrawal rules? | [Tax Guide](/host/guide-to-taxes) | -| Does Vast.ai handle VAT? | [Tax Guide: VAT](/host/guide-to-taxes#does-vastai-handle-vat) | -| Is VAT shown on invoices? | [Tax Guide: invoices](/host/guide-to-taxes#is-vat-shown-on-invoices) | -| How do I gain datacenter status? | [Datacenter Status](/host/datacenter-status) | -| Why does reliability drop after rentals, reboots, or disconnects? | [Reliability & Uptime](/host/reliability-uptime#why-reliability-drops) | -| How quickly does reliability recover? | [Reliability & Uptime](/host/reliability-uptime#reliability-recovery) | -| Will restarting lower reliability or remove verification? | [Reliability & Uptime](/host/reliability-uptime#reliability-and-verification) | -| How do I minimize reliability dropping? | [Reliability & Uptime](/host/reliability-uptime#preventing-score-drops) | -| What should I monitor in the first 24 hours? | [First 24 Hours](/host/first-24-hours) | -| How should I handle maintenance windows? | [Maintenance Windows](/host/maintenance-windows) | -| How do I unlist, delete, or recreate a machine? | [Removing or Recreating Machines](/host/removing-recreating-machines) | -| How do I uninstall the Vast host software? | [Removing or Recreating Machines: uninstall](/host/removing-recreating-machines#uninstall) | -| What should I do with a ghost machine? | [Removing or Recreating Machines](/host/removing-recreating-machines#ghost-machine) | -| What changes when I swap GPUs? | [Removing or Recreating Machines](/host/removing-recreating-machines#gpu-swap) | -| Can I send a message to a client using my machine? | [Workload Policy: client messaging](/host/workload-policy#client-messaging) | -| Does Vast redownload images that were already used on my machine? | [Storage Setup: cached images](/host/storage-setup#cached-images) | -| What logs should I collect before asking for help? | [Common Errors & Diagnostics](/host/common-errors-diagnostics#collect-logs) | -| What warnings can be ignored? | [Self-Test Failures](/host/self-test-reference#warnings-ignore) | -| What should I escalate to Vast support? | [Common Errors & Diagnostics](/host/common-errors-diagnostics#escalate-support) | +| What should I collect before asking for help? | [Errors & Diagnostics: collect logs](/host/common-errors-diagnostics#collect-logs) | +| What should go to Vast support? | [Errors & Diagnostics: escalate support](/host/common-errors-diagnostics#escalate-support) | +| Where can I ask other hosts? | [Discord & Community](/host/community) | diff --git a/host/community.mdx b/host/community.mdx index d885d5ea..5f99bc2f 100644 --- a/host/community.mdx +++ b/host/community.mdx @@ -12,32 +12,31 @@ personas:
All host personas
-Use community channels for host discussion, peer help, and machine-specific setup questions that Vast support does not handle directly. +Use community channels for host discussion, peer help, and machine-specific setup questions. -Vast does not provide hands-on machine setup support. Your OS, drivers, BIOS, storage, power, thermals, and router are your responsibility — the community is where hosts help each other with exactly those problems. See [Is Vast for Me?](/host/persona-decision-guide#what-vast-does-and-does-not-do). +Vast does not provide hands-on machine setup support. Your OS, drivers, BIOS, storage, power, thermals, and router are host responsibilities. See [Is Vast for Me?](/host/persona-decision-guide). ## Joining the host Discord channels -Join the Vast Discord with this invite: [discord.gg/hSuEbSQ4X8](https://discord.gg/hSuEbSQ4X8). Connect your Vast host account to Discord to unlock the **host-only channels**, where you can chat with and get help from other hosts on the platform. - -The hosting channels are the quickest way to learn more about a specific red machine error message or an unfamiliar self-test failure. +Join [Discord](https://discord.gg/hSuEbSQ4X8), then connect your Vast host account to unlock the **host-only channels**. ## What to include when asking for help You will get faster, better answers if your first message includes: - The exact error string or symptom shown in the console, CLI, or self-test output. +- Machine ID and host context when safe to share in the channel. - What you have already checked or tried. - Relevant log excerpts or the self-test diagnostic bundle — see [what logs to collect](/host/common-errors-diagnostics#collect-logs). - For network problems, the tested external IP:port the CLI reported. -Review logs and bundles before posting, and never share API keys, install commands, sensitive account details, or account-specific token material in public channels. +Review logs and bundles before posting, and never share API keys, install commands, sensitive account details, account-specific token material, or renter data in public channels. ## What to expect -Community help is peer support from other hosts, with Vast staff reading along but not on a schedule. There is no response-time guarantee — useful answers often come within hours, but complex or niche questions can take longer or go unanswered. For issues only Vast can fix (account state, payouts, backend machine records), [escalate to support](/host/common-errors-diagnostics#escalate-support) instead. +Community help is peer support from other hosts. Vast staff may read along, but there is no response-time guarantee. For account state, payouts, backend machine records, and other platform-side issues, [escalate to support](/host/common-errors-diagnostics#escalate-support). ## Related pages diff --git a/host/datacenter-status.mdx b/host/datacenter-status.mdx index 6544f0ab..e907ac1e 100644 --- a/host/datacenter-status.mdx +++ b/host/datacenter-status.mdx @@ -10,37 +10,32 @@ personas:
Headless / DC
-Equipment that is in a certified datacenter on Vast.ai is eligible to be included in the "Secure Cloud" offering and receive other benefits, such as the blue datacenter label. Individual certifications will eventually be highlighted so users can understand if a given host is compliant with HIPAA, GDPR, TIER 2/3 or ISO 27001. Users typically are willing to pay more for the security and reliability that comes with equipment that is in a proper facility. - -Read through this documentation to understand the minimum requirements for becoming a datacenter partner and the specific verification steps that we will take to ensure compliance. +Datacenter status is for business-owned equipment in certified facilities. Approved machines can receive the blue datacenter label and appear in Secure Cloud searches. ## Benefits -- Blue datacenter label on all GPU offers in the web interface for equipment that is in the datacenter -- Offers are included in the "Secure Cloud" searches in the CLI and in the web interface -- Increased reliability scoring -- As a result of a few factors, generally higher search rankings in the marketplace -- Direct Discord or Slack channel to Vast.ai for support +- Blue datacenter label. +- Secure Cloud search eligibility. +- Better reliability/search signals. +- Direct Discord or Slack channel with Vast. ## Requirements -1. ONE of the following third party certificates must be active: - - ISO/IEC 27001 -2. The equipment must be owned by a business - - The business must be registered and up to date on all filings - - The owners of the business must be listed on the registration or otherwise verifiable -3. The company must sign the Datacenter Hosting Agreement -4. The owner must undergo identity verification -5. The host must have at least 5 GPU servers listed on Vast.ai or otherwise show they have a significant (5+ Servers) amount of equipment to list +- Active third-party certification, currently ISO/IEC 27001. +- Business-owned equipment. +- Business registration and ownership that can be verified. +- Signed Datacenter Hosting Agreement. +- Owner identity verification. +- At least 5 GPU servers listed, or evidence of significant equipment to list. -## Application Process +## Apply -In order to apply, you will need to first gather the required documentation: +Prepare: -- Government issued IDs such as a passport for the business owner(s) -- Business information such as a certificate of good standing or other recent record -- The name and address of the datacenter where the equipment is located along with the relevant certificates -- A contract or invoice from the datacenter linking the business -- Other due diligence documentation as required +- Government-issued ID for business owner(s). +- Business registration or certificate of good standing. +- Datacenter name, address, and certificates. +- Contract or invoice linking the business to the datacenter. +- Any additional due-diligence documents Vast requests. -Once you have the required documentation, apply at: [https://vast.ai/data-center-application](https://vast.ai/data-center-application) +Apply at [vast.ai/data-center-application](https://vast.ai/data-center-application). diff --git a/host/docs-change-review.mdx b/host/docs-change-review.mdx deleted file mode 100644 index 834e7184..00000000 --- a/host/docs-change-review.mdx +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: "Host Docs Change Review" -sidebarTitle: "Change Review" -description: "Review-only comparison page for the CON-1518 host docs mockup." -"canonical": "/host/docs-change-review" ---- - -This is a review-only page for checking the proposed Host docs restructure against the current docs. It is not linked from the Host sidebar. - -## Snapshot - -| Item | Current state | -| --- | --- | -| Local preview | [http://127.0.0.1:3001](http://127.0.0.1:3001) | -| Working branch | `CON-1518-host-docs-ia-mockup` | -| Compared against | `origin/main` at `c283475` | -| Current local commit | `56f39d2` plus uncommitted docs edits | -| Customer-facing top-level Host pages scanned | 33 | -| Scaffold marker matches | 0 | -| Changed top-level Host content pages | 34: 23 new, 10 modified, 1 removed/split | -| Review-only helper pages | This page and the old-content highlight toggle | - - -Use the floating **Old content** button while browsing the local Host pages to highlight blocks reused from the old docs. The small "Old parent docs" badge shows which `origin/main` page(s) the current page was split from or materially based on. Yellow highlight means the block contains exact old text or has been manually marked as moved/reworked guidance from `origin/main`; blue highlight means the image or diagram source is reused from `origin/main`. Unhighlighted content is new or materially rewritten. The helper is gated to local preview hosts, but still remove `old-docs-highlight-demo.js` before opening a production PR. - - -## Scaffold Check - -No customer-facing top-level Host pages currently contain the old scaffold markers: - -- `Status: mockup` -- `Personas:` -- `Stage:` -- `## Purpose` -- `## Proposed Content` -- `Crisp` -- `cryptolabs` -- obvious placeholder/scaffold wording - -Thin pages are not the same as scaffolded pages. These are intentionally short routing or troubleshooting pages, but they are worth reviewing for depth: - -| Page | Words | Review question | -| --- | ---: | --- | -| [Hosting Quickstart](/host/quickstart) | 179 | Is a linked journey enough, or should it include more setup detail? | -| [Installing Host Software](/host/installing-host-software) | 263 | Should installer failure examples and daemon commands be expanded here? | -| [Maintenance Windows](/host/maintenance-windows) | 288 | Should this include screenshots or exact UI steps? | -| [Not in Search](/host/not-in-search) | 228 | Should this include more CLI filters and search-ranking examples? | - -## Outstanding Review - -| Area | Status | What to decide | -| --- | --- | --- | -| Review helper page | Open | Remove this page before a production PR, or keep it only in the mockup branch. | -| Persona chips | Open | Decide whether visible persona chips belong in the final docs. `persona-chips.css` is currently an untracked local file that supports them. | -| Workload Policy | Needs source review | The page is now a summary and links to the Host Agreement and Terms as source of truth. Legal/support should confirm wording around mining, Bittensor, active rentals, and abuse escalation. | -| Payout timing | Needs source review | Confirm the 2-4 week timing, Friday 12:00 PM Pacific posting, and payout-provider settlement language. | -| Supported hardware | Needs source review | Confirm GPU/OS/VM/AMD wording and the physical CPU core requirement against the final CLI/self-test behavior. | -| Self-Test Reference | Needs regeneration check | Regenerate from the latest self-test/CLI source once those source PRs are final, then verify anchors used by common questions. | -| Deleted optimization guide | Needs redirect/link decision | `host/optimization-guide.mdx` is removed/split into Earnings Model, Pricing Your Listing, and Market Metrics. Decide whether a redirect is needed. | -| Thin routing pages | Review | Quickstart, install, maintenance, and search visibility are useful but compact; decide whether to expand now or leave as lifecycle pointers. | - -## Current Vs Proposed - -Use the **current** link to compare against production docs and the **proposed** link to review the local mockup. - -| Status | Page | Current docs | Proposed local | Main change | -| --- | --- | --- | --- | --- | -| Modified | Hosting Overview | [current](https://docs.vast.ai/host/hosting-overview) | [proposed](/host/hosting-overview) | Shorter overview, stronger contract/offer framing, routes setup details to focused pages. | -| New | Supported Hardware | No direct current page | [proposed](/host/supported-hardware) | Adds buying/listing hardware guidance, unsupported setups, VM caveats, and physical CPU core rule. | -| New | Is Vast for Me? | No direct current page | [proposed](/host/persona-decision-guide) | Adds decision guide for hobbyists, business owners, and operators before they buy or install. | -| Modified | Earnings & Pricing Model | [current](https://docs.vast.ai/host/earning) | [proposed](/host/earning) | Replaces referral-console copy with host revenue model, 30-day P10/median/P90 estimate, and market data links. | -| Modified | Tax Guide for Hosts | [current](https://docs.vast.ai/host/guide-to-taxes) | [proposed](/host/guide-to-taxes) | Keeps tax caveats and fits page into Before You Host flow. | -| New | Hosting Quickstart | No direct current page | [proposed](/host/quickstart) | Adds first-time host setup journey with links to lifecycle pages. | -| New | Account & Agreement | No direct current page | [proposed](/host/account-hosting-agreement) | Adds host account conversion, separate account, agreement, and stale install command guidance. | -| New | Hardware Prep | No direct current page | [proposed](/host/hardware-prep) | Adds pre-install hardware/BIOS/driver checklist and routes to supported hardware/storage/network pages. | -| New | Storage Setup | No direct current page | [proposed](/host/storage-setup) | Adds Docker storage, XFS/project quota, NVMe, RAID, and pquota error guidance. | -| New | Network & Ports | No direct current page | [proposed](/host/network-ports) | Adds direct-port requirements, TCP/UDP forwarding, CGNAT/public-IP caveats, and failure links. | -| New | Install Host Software | No direct current page | [proposed](/host/installing-host-software) | Adds official install command, installer failure, logs, and post-install checks. | -| New | Headless Install | No direct current page | [proposed](/host/headless-install) | Adds headless/datacenter path, SSH/BMC expectations, install flow, and recovery guidance. | -| Modified | VMs & IOMMU | [current](https://docs.vast.ai/host/vms) | [proposed](/host/vms) | Refits VM/IOMMU content into setup lifecycle. | -| Modified | Verification Stages | [current](https://docs.vast.ai/host/verification-stages) | [proposed](/host/verification-stages) | Updates staged verification guidance and physical CPU core wording. | -| Modified | Understanding Verification | [current](https://docs.vast.ai/host/understanding-verification) | [proposed](/host/understanding-verification) | Clarifies automated verification, reliability, and support expectations. | -| Modified | How to Self-Test | [current](https://docs.vast.ai/host/how-to-self-test) | [proposed](/host/how-to-self-test) | Points failures to the generated Self-Test Reference and updated rentability guidance. | -| Modified | GPU Market Metrics | [current](https://docs.vast.ai/host/market-metrics) | [proposed](/host/market-metrics) | Keeps metrics/API/CLI details and fits it into Verify & List. | -| New | Self-Test Reference | Existing self-test docs were separate | [proposed](/host/self-test-reference) | New generated-style reference for thresholds, issues, and remediation guidance. | -| New | Pricing Your Listing | No direct current page | [proposed](/host/pricing-your-listing) | Adds listing controls, DPH, `min_gpu`, bids, discounts, and worked pricing example. | -| New | Not in Search | No direct current page | [proposed](/host/not-in-search) | Adds search visibility triage and direct CLI machine lookup. | -| New | First 24 Hours | No direct current page | [proposed](/host/first-24-hours) | Adds early monitoring checklist and first-rental expectations. | -| New | Reliability & Uptime | No direct current page | [proposed](/host/reliability-uptime) | Adds reliability drop/recovery guidance and operational expectations. | -| New | Maintenance Windows | No direct current page | [proposed](/host/maintenance-windows) | Adds maintenance planning without disrupting active contracts. | -| New | Remove or Recreate | No direct current page | [proposed](/host/removing-recreating-machines) | Adds unlist/delete/recreate guidance, ghost-machine escalation, and GPU swap notes. | -| New | Fleet Operations | No direct current page | [proposed](/host/fleet-operations) | Adds multi-machine/headless operator workflows and monitoring expectations. | -| New | Common Errors & Diagnostics | No direct current page | [proposed](/host/common-errors-diagnostics) | Adds logs, diagnostics, NVIDIA/Docker/runtime errors, and escalation bundle guidance. | -| Modified | Datacenter Status | [current](https://docs.vast.ai/host/datacenter-status) | [proposed](/host/datacenter-status) | Fits Secure Cloud/datacenter status into Operate flow. | -| Modified | Host Payouts | [current](https://docs.vast.ai/host/payment) | [proposed](/host/payment) | Updates payout timing, posted date, provider settlement, and invoice language. | -| New | Workload Policy | No direct current page | [proposed](/host/workload-policy) | Adds summary linked to Host Agreement and Terms as source of truth. | -| New | Common Host Questions | No direct current page | [proposed](/host/common-host-questions) | Adds common host Q&A index with anchors to lifecycle docs. | -| New | Host Glossary | No direct current page | [proposed](/host/glossary) | Adds definitions for host terms, statuses, CLI concepts, and verification terms. | -| New | Hosting Agreement | No direct current page | [proposed](/host/hosting-agreement) | Adds reference page pointing to canonical agreement and host commitments. | -| New | Discord & Community | No direct current page | [proposed](/host/community) | Adds community/Discord expectations and escalation boundaries. | -| Removed/split | Optimization Guide | [current](https://docs.vast.ai/host/optimization-guide) | [Earnings](/host/earning), [Pricing](/host/pricing-your-listing), [Metrics](/host/market-metrics) | Split broad optimization guidance into focused business/pricing/market pages. | - -## Sidebar IA - -The proposed Host sidebar is: - -1. Before You Host -2. Set Up -3. Verify & List -4. Operate -5. Reference -6. CLI -7. SDK - -The previous visible `Decide` label has been renamed to `Before You Host`, and the internal IA proposal page has been removed from the sidebar. diff --git a/host/earning.mdx b/host/earning.mdx index ec1e644e..964bbb8c 100644 --- a/host/earning.mdx +++ b/host/earning.mdx @@ -11,140 +11,115 @@ personas:
Business
-Use this page to estimate host revenue before buying hardware, setting prices, or changing an existing listing. The useful model is simple: market price range, rentable GPU count, and actual utilization over time. +Use this page to estimate gross host revenue before buying hardware, setting prices, or changing an offer. -Hosting earnings are not guaranteed. Verification, a competitive price, or a strong machine can improve eligibility and attractiveness, but rentals still depend on demand, supply, reliability, search behavior, and renter requirements. +Earnings are not guaranteed. Demand, supply, reliability, search filters, location, and renter requirements all affect utilization.
-## Simple Monthly Model +## Revenue Components -For a first estimate, use: +Host earnings are based on the host-side rates you set. Client-facing totals can include separate Vast/client-side fees, so the amount a client pays can differ from the host-side earning rate shown to you. + +Gross host revenue can include several components: ```text -monthly gross = rentable GPUs x per-GPU hourly price x 720 x utilization +gross host revenue = + GPU compute revenue ++ storage revenue ++ bandwidth revenue ++ volume revenue ``` -Where: - -| Input | Meaning | +| Component | What drives it | | --- | --- | -| `rentable GPUs` | The number of GPUs that can be rented during the month. If only part of a multi-GPU machine is usually rented, use that smaller count. | -| `per-GPU hourly price` | The expected GPU price in dollars per GPU-hour. Compare against similar offers, not just the highest visible listing. | -| `720` | A 30-day month at 24 hours per day. | -| `utilization` | The share of the month the GPU capacity is rented. Use `0.55` for 55% utilization. | +| GPU compute | Listed GPUs rented, accepted GPU-hour rate, and running time. | +| Storage | Storage allocated over time. Storage can keep accruing while an instance is stopped or retained, depending on the instance state. | +| Bandwidth | Upload and download usage charged at the host-side bandwidth rates. | +| Volumes | Separate volume offers, if you enable and price them. | -This is a gross revenue estimate before power, cooling, colocation, internet, hardware depreciation, repairs, taxes, and any other operating costs. +Changing prices affects new rental contracts. Existing contracts use the rates accepted when the renter started the instance or reservation. -## 30-Day Range Estimate +## Compute-Only Monthly Model -The most useful planning range is based on the last 30 days of comparable market data: - -1. Pick the closest comparable GPU class, hosting type, verification state, and machine quality. -2. Look at 30-day P10, median, and P90 price signals for that GPU. -3. Estimate utilization from your own machine history, or from comparable market demand if this is new hardware. -4. Calculate a lower, middle, and upper gross monthly range. +```text +monthly compute gross = rentable GPUs x hourly GPU price x 720 x utilization +``` -| Scenario | Formula | +| Input | Meaning | | --- | --- | -| Conservative | `GPUs x P10 hourly price x 720 x 30-day utilization` | -| Expected | `GPUs x median hourly price x 720 x 30-day utilization` | -| Optimistic | `GPUs x P90 hourly price x 720 x 30-day utilization` | +| `rentable GPUs` | GPUs expected to be rented during the month. | +| `hourly GPU price` | Expected host-side dollars per GPU-hour. Use comparable listings. | +| `720` | 30 days x 24 hours. | +| `utilization` | Share of time rented, such as `0.55` for 55%. | -P10 means the lower end of the observed market range. Median is the midpoint. P90 is an upper market signal and is usually realistic only when your machine has a clear advantage such as stronger reliability, better network, better storage, better location, datacenter verification, or scarce GPU supply. +This compute-only shortcut does not include storage, bandwidth, or volume revenue. It is also gross revenue before power, cooling, colocation, internet, hardware depreciation, repairs, taxes, and payment/accounting costs. -## Worked Example +## 30-Day Range -Suppose a host has 4 rentable GPUs, observed or expected utilization of 55%, and comparable 30-day prices of: +For planning compute revenue, compare similar machines over the last 30 days: -| Price signal | Per-GPU hourly price | +| Scenario | Formula | | --- | --- | -| P10 | \$0.35 | -| Median | \$0.45 | -| P90 | \$0.65 | - -The estimates are: - -| Scenario | Calculation | Gross monthly estimate | -| --- | --- | --- | -| Conservative | `4 x 0.35 x 720 x 0.55` | \$554.40 | -| Expected | `4 x 0.45 x 720 x 0.55` | \$712.80 | -| Optimistic | `4 x 0.65 x 720 x 0.55` | \$1,029.60 | - -Use this as a planning range, not a promise. A machine with poor reliability, weak networking, low system RAM, slow storage, bad pricing, or low demand can underperform the range. - -## What To Compare +| Conservative | `GPUs x P10 price x 720 x utilization` | +| Expected | `GPUs x median price x 720 x utilization` | +| Optimistic | `GPUs x P90 price x 720 x utilization` | -Compare against machines that are close to yours: +Use P90 only when your machine has a real advantage: strong reliability, better network, fast storage, better location, datacenter status, or scarce GPU supply. Then add realistic storage, bandwidth, and volume assumptions separately. -| Factor | Why it matters | -| --- | --- | -| GPU model and GPU count | Demand and price vary heavily by GPU type and by whether renters need 1 GPU or many GPUs. | -| Verification and hosting type | Verified and datacenter-quality machines may appear more attractive to renters. | -| Region and network | Latency, bandwidth, and public reachability affect renter fit. | -| System RAM and CPU | Some workloads need more host RAM or CPU per GPU than the minimum requirements. | -| Storage type and capacity | NVMe and enough usable disk can make a listing more attractive. | -| Reliability and uptime | A stronger reliability history can support better visibility and pricing power. | -| `min_gpu`, bids, discounts, and offer end date | Listing terms affect who can rent the machine and for how long. | +## Compute-Only Example -## Market Data Sources +A 4-GPU host at 55% utilization: -Start with Vast's own market data: +| Price signal | Calculation | Gross/month | +| --- | --- | --- | +| P10: $0.35/hr | `4 x 0.35 x 720 x 0.55` | $554.40 | +| Median: $0.45/hr | `4 x 0.45 x 720 x 0.55` | $712.80 | +| P90: $0.65/hr | `4 x 0.65 x 720 x 0.55` | $1,029.60 | -- [GPU Market Metrics](/host/market-metrics) explains the dashboard, CLI, and API sources. -- [Host market dashboard](https://cloud.vast.ai/host/market/) shows current and historical GPU supply, demand, and P10/median/P90 pricing. -- [Vast hosting earnings calculator](https://vast.ai/hosting/calculator) gives a data-backed estimate using marketplace utilization and price references. +If actual earnings are lower than the estimate, check utilization first, then compare storage, bandwidth, and volume settings. A higher price does not help if renters choose cheaper or healthier machines. -Third-party dashboards can be useful as additional context: +## What To Compare -- [500.farm Vast charts](https://500.farm/vastai/charts/) +Compare machines with similar: - -Third-party tools are not official Vast documentation. Treat them as comparison aids, and verify important pricing or utilization decisions against Vast market data and your own host dashboard. - +- GPU model and count. +- Verification state and host type. +- Region, latency, and bandwidth. +- System RAM, CPU, storage, and disk size. +- Storage and bandwidth prices. +- Reliability and uptime. +- `min_gpu`, bids, discounts, and offer end date. -## Actual Earnings +## Market Data -For an existing host, compare forecasts with actual results: +Start with Vast sources: -| Where to look | What to check | -| --- | --- | -| Host dashboard earnings | Current balance, total rental earnings, payout history, and payout account status. | -| Payout timing | Plan around 2 to 4 weeks from when earnings are posted, depending on location and payout method. Earnings are posted on Fridays around 12:00 PM Pacific time. | -| Billing history | Generate billing history with charges included when you need invoice detail. | -| Machine history | Rented hours, idle time, reliability changes, maintenance windows, and machine errors. | -| Market metrics | Whether your GPU's supply, demand, and median price moved during the same period. | +- [GPU Market Metrics](/host/market-metrics) +- [Host market dashboard](https://cloud.vast.ai/host/market/) +- [Vast hosting earnings calculator](https://vast.ai/hosting/calculator) -If current earnings are below the 30-day estimate, first check utilization. A higher hourly price does not help if renters choose cheaper or healthier comparable machines. +Third-party dashboards such as [500.farm Vast charts](https://500.farm/vastai/charts/) can help with comparison, but they are not the source of truth. ## Pricing Strategy -Most hosts should start from comparable market prices, then adjust based on actual utilization: +Start near comparable market prices, then adjust from actual utilization. -- New machines often need competitive pricing while they build reliability and rental history. -- A machine can justify a higher price only when it has clear advantages that renters value. -- Lowering price can improve utilization, but it can also reduce gross revenue if the machine was already consistently rented. -- Raising price affects new rental contracts only. Existing rental contracts keep the terms they accepted when they rented. -- Do not chase every short-term market move. Review trends over a week or month unless demand changes sharply. +- New machines often need competitive pricing while they build reliability history. +- Higher prices only work when renters value the machine's advantages. +- Lower prices can improve utilization, but may reduce revenue if the machine was already rented. +- Price changes affect new rental contracts only. +- Review trends over a week or month, not every short-term move. ## Net Margin -Gross revenue is only the top line. For a realistic business view, subtract: +Subtract operating costs before judging profit: - Power and cooling. -- Internet, colocation, rack, or facility costs. -- Hardware depreciation and financing. -- Replacement parts and maintenance time. -- Payment provider, accounting, and tax-related costs. +- Internet, rack, or colocation. +- Hardware depreciation or financing. +- Repairs and maintenance time. +- Accounting, tax, and payment-provider costs. For payout timing, see [Host Payouts](/host/payment). For tax handling, see [Tax Guide for Hosts](/host/guide-to-taxes). - -## Related Questions - -| Question | Read next | -| --- | --- | -| How should I price my listings? | [Pricing Your Listing](/host/pricing-your-listing) | -| What should I know about min GPU, bids, and discounts? | [Pricing Your Listing: listing controls](/host/pricing-your-listing#listing-controls) | -| How do hosts get paid? | [Host Payouts](/host/payment) | -| Where does the market data come from? | [GPU Market Metrics](/host/market-metrics) | diff --git a/host/first-24-hours.mdx b/host/first-24-hours.mdx index 3a94d9fc..57640222 100644 --- a/host/first-24-hours.mdx +++ b/host/first-24-hours.mdx @@ -10,55 +10,79 @@ personas:
HobbyistPro Operator
-Use this page after installing and listing a machine to understand what to monitor first. +Use the first day to confirm the host is stable, listed correctly, and reachable from outside your network.
-## What does a healthy host daemon look like? +## Healthy Daemon -A healthy host daemon should run without restart loops, connect to the Vast backend, report the expected GPUs and machine state, and support instance startup. From the host dashboard or CLI, the machine should appear under the host account, have active offers when listed, avoid red machine errors, and be able to run a temporary self-test instance that reports progress. +A healthy host: - -## What should I monitor in the first 24 hours? +- Shows under the host account. +- Has active offers when listed. +- Has no red machine errors. +- Runs the Vast daemon, metrics service, Docker, and NVIDIA persistence service. +- Can run a temporary self-test instance that reports progress. -Monitor machine visibility, active offers, self-test status, red machine errors, daemon logs, Docker/NVIDIA runtime health, direct port reachability from outside the LAN, thermals, power, storage capacity, network stability, and first-rental startup behavior. Test common client paths such as SSH and Jupyter when applicable. +SSH checks: - -## Test your machine like a client +```bash +systemctl is-active vastai.service vast_metrics.service docker nvidia-persistenced.service +systemctl --no-pager --full status vastai.service vast_metrics.service docker nvidia-persistenced.service +sudo journalctl -u vastai.service -n 80 --no-pager +sudo journalctl -u vast_metrics.service -n 80 --no-pager +sudo tail -n 100 /var/lib/vastai_kaalia/kaalia.log +sudo cat /var/lib/vastai_kaalia/host_port_range +``` -It is vital to test your own machine to ensure the ports and software are running smoothly. +The services should be `active`, without restart loops or repeated fatal errors. The configured port range should match the forwarded range. -### Set up a separate client account (GUI) + +## Monitor -If you want to use the website GUI, set up a new account on a different email address, add a credit card, then find your machine and create instances on it like a client. This has the benefit of showing you the entire client experience. Testing the recommended PyTorch template is vital to ensure that SSH and Jupyter are working properly. +Watch: -### Use the CLI (preferred) +- Machine visibility and active offers. +- Self-test result. +- Red machine errors. +- Daemon, Docker, and NVIDIA runtime health. +- External port reachability. +- Thermals, power, storage, and network stability. +- First-rental startup behavior. -The preferred method is the [CLI](https://cloud.vast.ai/cli/). For Windows users, we suggest setting up [WSL](https://learn.microsoft.com/en-us/windows/wsl/install), which requires installing Ubuntu on your Windows machine and enabling virtualization in BIOS. + +## Test Like A Client -First review the machines and offers visible to your host account: +Use a separate client account or the CLI to rent a small test instance on your own machine. -```text Text -./vastai show machines -``` +List visible machines/offers: -Then use the CLI reference or console state to find one of your machine's available offer IDs. The website GUI can group similar offers, so the CLI can be useful for seeing the offer-level state. Do not post API keys, account-specific commands, or sensitive account details in public channels. +```text +vastai show machines +``` -Take the ID number from the first column and use it to create a free instance on your own machine. This example loads the latest PyTorch image along with both Jupyter and SSH direct launch modes: +Create a test instance from one available offer: -```text Text -./vastai create instance --image pytorch/pytorch:latest --jupyter --direct --env '-e TZ=PDT -p 22:22 -p 8080:8080' +```text +vastai create instance --image pytorch/pytorch:latest --jupyter --direct --env '-e TZ=PDT -p 22:22 -p 8080:8080' ``` -Check your [instance tab](https://cloud.vast.ai/instances/) to make sure PyTorch loaded correctly along with Jupyter and SSH. Click the \<\_ button to get the SSH command and test the direct SSH connection. Click the open button to test Jupyter. If the button is stuck "connecting", there is most likely a problem with the port configuration on the router in front of the machine; see [Network & Ports](/host/network-ports#test-ports-outside-lan). Once finished, destroy the instance. +Then test: + +- Instance appears in the client account. +- SSH command works. +- Jupyter opens. +- Ports do not hang at "connecting." + +Destroy the test instance when done. If SSH or Jupyter is stuck connecting, check [Network & Ports](/host/network-ports#test-ports-outside-lan). -## What can take time +## What Can Take Time -Verification, search visibility, and first rentals do not happen instantly after listing. Passing self-test makes the machine eligible for verification, but verification timing depends on machine health, supply and demand, and platform policy. See [Understanding Verification](/host/understanding-verification#verification-time). +Verification, search visibility, and first rentals are not instant. Passing self-test makes the machine eligible; timing still depends on machine health, supply, demand, and platform policy. -## Related pages +## Related Pages | Topic | Read next | | --- | --- | -| Running the self-test | [How to Self-Test](/host/how-to-self-test) | -| Machine not appearing in search | [Why Isn't My Machine in Search?](/host/not-in-search) | -| Reliability expectations | [Reliability & Uptime](/host/reliability-uptime) | +| Self-test | [How to Self-Test](/host/how-to-self-test) | +| Not in search | [Why Isn't My Machine in Search?](/host/not-in-search) | +| Reliability | [Reliability & Uptime](/host/reliability-uptime) | diff --git a/host/fleet-operations.mdx b/host/fleet-operations.mdx index 0a6ef238..e3e60bdd 100644 --- a/host/fleet-operations.mdx +++ b/host/fleet-operations.mdx @@ -10,66 +10,56 @@ personas:
Headless / DCBusiness
-Operate many machines from one management box. Every workflow on this page composes host CLI commands that work over SSH — no console clicking per machine — and each has a [Python SDK](/host/sdk/show-machines) equivalent for automation. +Use the CLI or SDK to manage many machines from one workstation. -## Working at fleet scale +## Fleet State -Three CLI features make fleet scripting practical: - -- Machine listing commands can return compact output for scripting. -- `vastai list machines` (plural) can apply the same listing arguments to multiple selected machines. -- The global `--raw` flag returns machine-readable JSON, and `--retry N` retries flaky calls — use both in unattended scripts. +Use `--raw` for scripts and `--retry N` for unattended calls: ```bash -# Full fleet state as JSON for scripts and monitoring vastai show machines --raw ``` -## Bulk listing and pricing updates +SDK equivalents live under the [host SDK reference](/host/sdk/show-machines). + +## Bulk Listing And Pricing -Update the listings of selected machines with `list machines`. For example, extending offer end dates across a prepared selection: +Apply listing changes to selected machines: ```bash vastai list machines -e 12/31/2026 --retry 6 ``` -The same pattern works for any listing argument — on-demand price (`-g`), min bid floor (`-b`), discount rate (`-r`), min chunk (`-m`), or a rolling end date (`--duration "2 weeks"`). See [vastai list machines](/host/cli/list-machines) for all options and [Pricing Your Listing](/host/pricing-your-listing) for how to choose the values. +The same pattern works for on-demand price (`-g`), min bid (`-b`), discount rate (`-r`), min chunk (`-m`), or rolling duration (`--duration "2 weeks"`). See [vastai list machines](/host/cli/list-machines). -Price changes affect **new rental contracts only** — existing contracts keep their original terms. End dates are the exception: moving the offer end date **later at the same or lower price also extends existing rental contracts** ([details](/host/hosting-overview#extending-rental-contracts)). A fleet-wide end-date extension therefore extends your commitment on every active contract; if you have raised pricing, existing contracts cannot be extended. +Price changes affect new rental contracts only. Extending the offer end date at the same or lower price can extend existing contracts, increasing your commitment. -## Fleet maintenance windows - -Schedule the same window across a rack or site, then audit what is scheduled: +## Maintenance Windows ```bash -# Schedule a 2-hour power maintenance window for a selected machine vastai schedule maint --sdate 1782950400 --duration 2 --maintenance_category power - -# Review all scheduled windows vastai show maints - -# Cancel if plans change vastai cancel maint ``` -`--sdate` is unix epoch seconds (UTC) and `--duration` is in hours; categories are `power`, `internet`, `disk`, `gpu`, `software`, or `other`. Clients on affected machines are notified so they can save their work. The policy rules — when to wait for contracts to end versus schedule a window — are in [Maintenance Windows](/host/maintenance-windows). +`--sdate` is Unix epoch seconds UTC. Categories are `power`, `internet`, `disk`, `gpu`, `software`, or `other`. See [Maintenance Windows](/host/maintenance-windows). -## Default (background) jobs +## Default Jobs -A default job runs your own container on a machine whenever it is idle, at a price floor you set, so unrented GPUs still do useful work: +Run your own container when a machine is idle: ```bash vastai set defjob --price_gpu 0.20 --image --args vastai remove defjob ``` -This performs the same action as creating a background job at [cloud.vast.ai/host/create](https://cloud.vast.ai/host/create). See [vastai set defjob](/host/cli/set-defjob). Make sure your background workload complies with the [Workload Policy](/host/workload-policy). +Make sure background work complies with the [Workload Policy](/host/workload-policy). -## Defragmenting GPU assignments +## Defragment GPUs -On multi-GPU machines, scattered single-GPU rentals can block larger multi-GPU offers. Defragmenting rearranges GPU assignments to make more multi-GPU offers available: +On multi-GPU machines, defragmentation can free larger GPU groups: ```bash vastai defrag machines $(vastai show machines -q) @@ -77,36 +67,33 @@ vastai defrag machines $(vastai show machines -q) See [vastai defrag machines](/host/cli/defrag-machines). -## Monitoring the fleet +## Monitor -A practical monitoring loop without a GUI: +A simple loop: -1. Pull fleet state with `vastai show machines --raw` and watch for red machine errors, reliability drops, and missing offers. -2. Inspect a selected machine with the console or [vastai show machine](/host/cli/show-machine). -3. After fixing an issue or finishing maintenance, rerun the self-test on the affected machine — see [How to Self-Test](/host/how-to-self-test). The self-test rents a temporary instance, so run it when the machine is idle. -4. Collect diagnostics for any failing machine — see [what to collect](/host/common-errors-diagnostics#collect-logs). +1. Pull `vastai show machines --raw`. +2. Watch for red errors, reliability drops, missing offers, and storage pressure. +3. Inspect individual machines with [vastai show machine](/host/cli/show-machine). +4. Rerun self-test on idle machines after fixes. +5. Collect diagnostics for failures. -For market-wide pricing and demand signals to inform fleet pricing, use [GPU Market Metrics](/host/market-metrics) — the `vastai metrics` commands also support `--raw`. +For pricing and demand, use [GPU Market Metrics](/host/market-metrics). The `vastai metrics` commands also support `--raw`. -## Storage cleanup across the fleet +## Cleanup And Decommissioning -Expired or deleted rental contracts occasionally fail to release storage. Clean up fleet-wide: +Clean stale storage: ```bash vastai cleanup machine ``` -See [vastai cleanup machine](/host/cli/cleanup-machine). - -## Decommissioning machines - -Unlist to stop new contracts, honor remaining rental end dates, then delete — the same rules as a single machine, per [Removing or Recreating Machines](/host/removing-recreating-machines). +To decommission, unlist first, honor remaining rental end dates, then delete. See [Remove or Recreate](/host/removing-recreating-machines). -## Related pages +## Related Pages | Topic | Read next | | --- | --- | -| SSH-only install for new fleet machines | [Headless Install Path](/host/headless-install) | -| Maintenance policy and client impact | [Maintenance Windows](/host/maintenance-windows) | -| Pricing strategy | [Pricing Your Listing](/host/pricing-your-listing) | -| Python automation | [SDK reference](/host/sdk/show-machines) | +| Headless install | [Headless Install](/host/headless-install) | +| Maintenance | [Maintenance Windows](/host/maintenance-windows) | +| Pricing | [Pricing Your Listing](/host/pricing-your-listing) | +| SDK automation | [SDK reference](/host/sdk/show-machines) | diff --git a/host/glossary.mdx b/host/glossary.mdx index 9b3065a3..21aefa7f 100644 --- a/host/glossary.mdx +++ b/host/glossary.mdx @@ -12,108 +12,108 @@ personas:
All host personas
-Definitions for the terms hosts meet in the console, the CLI, and these docs. Each entry links to the page that covers the topic in depth. +Short definitions for host-facing terms. ### Auto Sort -The default ordering of marketplace search results. It combines ranking factors with an element of randomness, which is why a machine's position varies between searches. See [Why Isn't My Machine in Search?](/host/not-in-search) +The default marketplace search order. It uses ranking factors plus randomness, so position can vary. See [Not in Search](/host/not-in-search). ### CGNAT -Carrier-grade NAT — an ISP setup where your router does not get its own public IPv4 address, so inbound connections cannot reach the host. A common reason self-test and renters cannot connect. See [Network & Ports](/host/network-ports#cgnat-starlink-ipv6) +Carrier-grade NAT. Your router does not have its own public IPv4 address, so inbound connections cannot reliably reach the host. Vast hosting requires a real public inbound TCP/UDP path; CGNAT and double NAT without public forwarding are not supported hosting setups. See [Network & Ports](/host/network-ports#cgnat-starlink-ipv6). ### Datacenter status / Secure Cloud -A partner tier for machines in certified datacenters (ISO 27001 and related requirements). Granted machines get the blue datacenter label and appear in "Secure Cloud" searches. See [Datacenter Status](/host/datacenter-status) +A partner tier for machines in certified datacenters. Approved machines can receive the blue datacenter label. See [Datacenter Status](/host/datacenter-status). ### Deverified -A previously verified machine that no longer meets requirements, usually because the host software detected an error. The machine appears as unverified in search until the issue is resolved, then transitions back automatically. See [Verification Stages](/host/verification-stages#deverified) +A previously verified machine that no longer meets requirements. See [Verification Stages](/host/verification-stages). ### Direct ports (`direct_port_count`) -Externally reachable ports forwarded from your public IP to the host machine. The self-test requires at least 3 per listed GPU; an instance can use up to 64. See [Network & Ports](/host/network-ports#ports-per-gpu) +Externally reachable TCP/UDP ports forwarded to the host. Self-test requires at least 3 per listed GPU; production hosts should usually plan about 100 per listed GPU for headroom. See [Network & Ports](/host/network-ports#ports-per-gpu). ### DLPerf -Vast's estimated GPU performance score on typical deep-learning tasks (CNN/Transformer training), used to compare machines across hardware generations. See [DLPerf scoring](/guides/reference/faq/rental-types#dlperf-scoring) +Vast's estimated deep-learning performance score for comparing machines. See [DLPerf scoring](/guides/reference/faq/rental-types#dlperf-scoring). ### DPH -Dollars per hour. In host listing discussions it usually refers to the hourly price of GPU compute; the renter's total cost can also include storage and bandwidth. See [Pricing Your Listing](/host/pricing-your-listing) +Dollars per hour, usually the hourly GPU compute price. See [Pricing Your Listing](/host/pricing-your-listing). ### Instance -What a renter actually runs on your machine — a container (or VM) created from one of your offers, with its own ports, storage, and lifecycle. +The renter workload running on your machine, usually a container or VM created from an offer. ### Interruptible rental -A lower-priority rental type that works as a bidding system: the highest bid runs and lower-priority instances are stopped while their container and data remain on the machine. Hosts set the minimum bid they will accept. See [rental types](/guides/reference/faq/rental-types) +Lower-priority bid rental. Higher bids run first; stopped containers and data remain on the machine. See [rental types](/guides/reference/faq/rental-types). ### kaalia -The Vast host daemon that runs on your machine as a systemd service. Its logs are the first place to look for daemon-side problems. See [Common Errors & Diagnostics](/host/common-errors-diagnostics#logs) +The Vast host daemon that runs as a systemd service. See [Errors & Diagnostics](/host/common-errors-diagnostics#logs). ### Machines tab -The host console page listing your machines. It appears in the navigation only after your account is converted to a host account. See [Account & Hosting Agreement](/host/account-hosting-agreement#host-features-tab) +The host console page for your machines. It appears after host account conversion. See [Account & Hosting Agreement](/host/account-hosting-agreement#host-features-tab). -### Min GPU / `min_chunk` (slicing) +### Min GPU / `min_chunk` -The smallest GPU grouping a renter can select on a multi-GPU machine, in powers of 2 down to 1. Setting it to 1 on an 8-GPU machine lets renters take 1, 2, 4, or 8 GPUs. See [Pricing Your Listing](/host/pricing-your-listing#listing-controls) +The smallest GPU group a renter can select on a multi-GPU machine. See [Pricing Your Listing](/host/pricing-your-listing#listing-controls). ### NAT hairpinning -Testing a port from inside your own LAN via your public IP, which many routers handle differently than real outside traffic — so a port can look closed from inside while being reachable externally (or vice versa). Always test from a different network. See [Network & Ports](/host/network-ports#test-ports-outside-lan) +Router behavior that makes same-LAN public-IP port tests unreliable. Test from outside the LAN. See [Network & Ports](/host/network-ports#test-ports-outside-lan). ### Offer -A listing a host creates for a machine, defining the price, offer end date, minimum GPU chunk, and other terms renters can accept. Offers accept new rentals until their end date. See [Hosting Overview](/host/hosting-overview#offers-and-rental-contracts) +A listing renters can accept, including price, offer end date, minimum GPU chunk, and other terms. See [Hosting Overview](/host/hosting-overview). ### Offer end date / rental end date -The offer end date is your commitment to keep the machine online and functional for new rentals. When a renter accepts the offer, it becomes that contract's rental end date (shown in the UI as "client end date") and cannot be shortened. See [Hosting Overview](/host/hosting-overview#offer-end-date) +The offer end date becomes a renter's contract end date when accepted. Existing rental end dates cannot be shortened by later host changes. See [Hosting Overview](/host/hosting-overview#offer-end-date). ### On-demand rental -The standard, highest-priority rental type at your listed price. Active on-demand rentals can stop lower-priority interruptible rentals on the same resources while their container and data remain on the machine. See [rental types](/guides/reference/faq/rental-types) +Standard highest-priority rental at the listed price. See [rental types](/guides/reference/faq/rental-types). -### Reliability (score) +### Reliability -The platform's measure of a machine's stable operation over time. A score above 0.9 is an eligibility gate for self-test and verification, and higher reliability improves confidence in the machine. Sustained instability can deverify a verified machine. See [Reliability & Uptime](/host/reliability-uptime) +Vast's stability score for a machine. Reliability greater than 0.9 is an eligibility gate. See [Reliability & Uptime](/host/reliability-uptime). ### Rental contract -Created each time a renter accepts your offer. It locks in the offer's terms at that moment — price, hardware specs, rental end date — and no host action can change them afterward. See [Hosting Overview](/host/hosting-overview#the-rental-contract) +Created when a renter accepts an offer. It locks price, hardware specs, and rental end date. See [Hosting Overview](/host/hosting-overview#the-rental-contract). ### Reserved rental -A longer-term prepaid rental type at a discount the host controls via the reserved discount rate. See [Pricing Your Listing](/host/pricing-your-listing#listing-controls) +Longer-term prepaid rental at a host-controlled discount. See [Pricing Your Listing](/host/pricing-your-listing#listing-controls). ### Self-test -A CLI diagnostic (`vastai self-test machine`) that checks the machine against minimum requirements, then rents a temporary instance on it to run CUDA, memory, NCCL, and stress workloads. Passing makes the machine eligible for verification. See [How to Self-Test](/host/how-to-self-test) +CLI diagnostic that checks requirements, rents a temporary instance, runs runtime tests, reports results, and cleans up. See [How to Self-Test](/host/how-to-self-test). ### Unlist vs. delete -Unlisting stops new rental contracts but leaves existing ones running until their end dates; deleting removes the machine record entirely and should only happen after active commitments are understood. See [Removing or Recreating Machines](/host/removing-recreating-machines) +Unlisting stops new rentals. Deleting removes the machine record. Existing commitments must be understood first. See [Remove or Recreate](/host/removing-recreating-machines). ### Verification / verified -The automated process that marks a machine as meeting platform standards. Verified machines are more visible to renters. See [Verification Stages](/host/verification-stages) and [Understanding Verification](/host/understanding-verification) +Automated status indicating a machine meets platform standards. See [Verification Stages](/host/verification-stages). ### vericode -A numeric verification-status code attached to a machine or offer. It is a status signal from Vast's verification system, not an action the host runs manually. +A numeric verification-status signal. -`vericode=8` means **Port Networking Issues**: Vast could not verify the machine's direct public port connectivity. Common causes include closed external ports, forwarding to the wrong LAN IP, CGNAT or no inbound public IP, host firewall rules, asymmetric protocol handling, or a stale port range. +`vericode=8` means **Port Networking Issues**: Vast could not verify direct public port connectivity. -When you see `vericode=8`, fix the public IP, router/firewall forwarding, or port range, then rerun the self-test and wait for the machine state to refresh. See [Self-Test Reference: vericode=8](/host/self-test-reference#vericode-8) and [Network & Ports](/host/network-ports). +Common causes include closed external ports, forwarding to the wrong LAN IP, CGNAT or double NAT without a real public forwarding path, no inbound public IP, host firewall rules, TCP/UDP mismatch, or stale port range. See [Self-Test Reference: vericode=8](/host/self-test-reference#vericode-8) and [Network & Ports](/host/network-ports). ### Volume offer -A storage-only offer on a machine, priced separately from GPU offers. Rented volume space is subtracted from the disk available to GPU offers. See [Hosting Overview](/host/hosting-overview#volume-offers) +A storage-only offer on a machine. Rented volume space reduces disk available to GPU offers. See [Hosting Overview](/host/hosting-overview#volume-offers). ### XFS `prjquota` -XFS project quotas — the preferred filesystem setup for Docker's data root on a host, required for per-container storage quotas. Its absence causes the common `--storage-opt is supported only for overlay over xfs with pquota` install error. See [Storage Setup](/host/storage-setup#xfs-prjquota) +XFS project quotas used for per-container storage limits. See [Storage Setup](/host/storage-setup#xfs-prjquota). diff --git a/host/hardware-prep.mdx b/host/hardware-prep.mdx index cc84d280..290c634f 100644 --- a/host/hardware-prep.mdx +++ b/host/hardware-prep.mdx @@ -15,17 +15,38 @@ Prepare the host machine before installing the Vast host software, including OS,
## What should be ready before I run the host installer? -Before installing, make sure the host has supported same-type GPUs, native Ubuntu/Linux, an AVX-capable CPU, at least one physical CPU core per listed GPU, adequate RAM, fast SSD/NVMe storage, compatible GPU drivers, stable public networking, and enough direct ports forwarded for both TCP and UDP. +Before installing, make sure the host has supported same-type GPUs, native Ubuntu/Linux, an AVX-capable CPU, at least one physical CPU core per listed GPU, adequate RAM, fast SSD/NVMe storage, working compatible GPU drivers, stable public networking, and enough direct ports forwarded for both TCP and UDP. + +For Docker storage, the preferred setup is `/var/lib/docker` mounted on XFS with project quotas enabled in `/etc/fstab`; see [Storage Setup](/host/storage-setup#fstab-example). For verification, the self-test preflight enforces the current minimum thresholds (CUDA support, reliability gate, direct ports, PCIe bandwidth, internet bandwidth, VRAM, system RAM). The canonical list lives in [Verification Stages: requirements](/host/verification-stages#additional-requirements-for-verification). For CPU capacity, use the physical-core rule: the host should have at least one visible physical CPU core per visible GPU. Hyperthreads and logical CPUs do not count as physical cores. +## How do I inventory a clean host? + +Before changing drivers, disks, or networking, record the machine's starting state. This makes it easier to spot whether an install problem came from the provider image, the storage layout, the driver, or the Vast installer. + +```bash +lsb_release -a +uname -a +lscpu | sed -n '1,25p' +lspci | grep -i nvidia +lsblk -f +findmnt / /data0 /var/lib/docker +df -h / +ip -brief address +``` + +Save the output somewhere private and redact public IPs or account details before sharing it. If `/var/lib/docker` is already mounted, Docker already has data, or old Vast services are still installed on a supposedly clean machine, resolve that before treating the host as freshly provisioned. + ## What Ubuntu versions should hosts use? Use **Ubuntu 24.04 LTS** for new installs when possible. **Ubuntu 22.04 LTS** also works and may be useful when a driver or operational constraint requires it. Confirm the OS works with your GPU driver, Docker, storage setup, and the Vast host installer before listing a production host. +Do not blindly copy old Ubuntu 22.04 cgroup-v1 workaround commands onto Ubuntu 24.04. Docker, kernel, and cgroup defaults differ by OS version; follow the current Vast host installer path for the OS you are actually using, and treat cgroup errors as install diagnostics to fix before listing. + ## What NVIDIA driver version should I use? diff --git a/host/headless-install.mdx b/host/headless-install.mdx index 80f29b85..c615de3c 100644 --- a/host/headless-install.mdx +++ b/host/headless-install.mdx @@ -7,86 +7,91 @@ personas: - headless-operator --- -{/* DRAFT — adapted from the jjziets/vasttools community install guide. - Pending end-to-end dogfooding on a reference system before final review. */} -
Headless / DC
-Use this path when the host is installed and operated entirely over SSH, BMC, or IPMI — no display, keyboard, or desktop environment. It takes a clean Ubuntu Server machine to a listed Vast host from the command line. +Use this path for hosts managed over SSH, BMC, or IPMI with no local display or desktop environment. -Start with a **clean install of Ubuntu 24.04.x Server** (HWE kernel recommended). During the Ubuntu installer, add OpenSSH and nothing else. For hardware requirements, check [Supported Hardware](/host/supported-hardware) first. +Start from a clean Ubuntu 24.04.x Server install with OpenSSH enabled. Check [Supported Hardware](/host/supported-hardware) before installing. -## Step 1: Update the system +## 1. Connect Over SSH -```bash -sudo apt update && sudo apt upgrade -y && sudo apt dist-upgrade -y -sudo apt install update-manager-core -y -``` +After a reinstall, SSH may show a new host-key fingerprint. Confirm the fingerprint through your provider console or BMC/IPMI before accepting it. -If you didn't select the HWE kernel during install, install it now: +If the reinstall was expected: ```bash -sudo apt install --install-recommends linux-generic-hwe-24.04 -y +ssh-keygen -R HOST_PUBLIC_IP +ssh ubuntu@HOST_PUBLIC_IP ``` -Reboot after kernel changes: +Do not accept an unexplained fingerprint change. + +## 2. Update Ubuntu + +Use noninteractive `apt-get` so SSH sessions do not hang on config prompts: ```bash -sudo reboot +sudo apt-get update +APT_OPTS="-o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold" +sudo DEBIAN_FRONTEND=noninteractive apt-get $APT_OPTS upgrade -y +sudo DEBIAN_FRONTEND=noninteractive apt-get $APT_OPTS dist-upgrade -y +sudo DEBIAN_FRONTEND=noninteractive apt-get $APT_OPTS install -y update-manager-core ``` -## Step 2: Install NVIDIA drivers +If the HWE kernel is not installed: ```bash -sudo apt install build-essential -y -sudo add-apt-repository ppa:graphics-drivers/ppa -y -sudo apt update +sudo DEBIAN_FRONTEND=noninteractive apt-get $APT_OPTS install --install-recommends linux-generic-hwe-24.04 -y +sudo reboot ``` -Find the latest available driver: +## 3. Install NVIDIA Drivers ```bash -sudo apt search nvidia-driver | grep nvidia-driver | sort -r +APT_OPTS="-o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold" +sudo DEBIAN_FRONTEND=noninteractive apt-get $APT_OPTS install -y build-essential ubuntu-drivers-common +sudo apt-get update +ubuntu-drivers devices ``` -Install the latest stable driver (replace `560` with whatever is newest): +Install the recommended stable driver. Example from one Ubuntu 24.04 test host: ```bash -sudo apt install nvidia-driver-560 -y +sudo DEBIAN_FRONTEND=noninteractive apt-get $APT_OPTS install -y nvidia-driver-595-open +sudo reboot ``` -Reboot and verify: +After reconnecting: ```bash -sudo reboot nvidia-smi ``` -## Step 3: Disable automatic updates +If `nvidia-smi` fails, fix the driver stack before running the Vast installer. + +## 4. Disable Automatic Updates -Automatic updates can break drivers while clients are renting your machine ([why this matters](/host/maintenance-windows#automatic-updates)). Disable them: +Automatic package updates can disrupt drivers during rentals. Disable them and update only during planned maintenance: ```bash -sudo apt purge --auto-remove unattended-upgrades -y -sudo systemctl disable apt-daily-upgrade.timer -sudo systemctl mask apt-daily-upgrade.service -sudo systemctl disable apt-daily.timer -sudo systemctl mask apt-daily.service +sudo DEBIAN_FRONTEND=noninteractive apt-get purge --auto-remove unattended-upgrades -y +sudo systemctl disable apt-daily-upgrade.timer apt-daily.timer +sudo systemctl mask apt-daily-upgrade.service apt-daily.service ``` -Only update manually when your machine is unlisted and idle, inside a planned [maintenance window](/host/maintenance-windows). +See [Maintenance Windows](/host/maintenance-windows). -## Step 4: X server config (and removing a desktop, if present) +## 5. Configure X -Vast containers need the X server configuration but not a desktop environment. On Ubuntu Server, just run: +Ubuntu Server does not need a desktop, but Vast containers need NVIDIA X configuration: ```bash sudo nvidia-xconfig -a --cool-bits=28 --allow-empty-initial-configuration --enable-all-gpus ``` -If the machine started life as Ubuntu Desktop, remove GNOME first: +If the machine started as Ubuntu Desktop, remove GNOME first: ```bash sudo apt-get update @@ -97,172 +102,126 @@ sudo update-grub sudo nvidia-xconfig -a --cool-bits=28 --allow-empty-initial-configuration --enable-all-gpus ``` -## Step 5: Mount NVMe for Docker storage +## 6. Mount Docker Storage -This is the most important step. Vast stores all client data at `/var/lib/docker`, which must be on a dedicated drive formatted as **XFS with `pquota`** — see [Storage Setup](/host/storage-setup#xfs-prjquota) for why. +Vast stores client data under `/var/lib/docker`. Put it on a dedicated XFS filesystem with project quotas. See [Storage Setup](/host/storage-setup). -The steps below **wipe the target drive**. If your OS is on `/dev/nvme0n1`, do NOT use that device. Check with `lsblk` first. +The example below wipes the target device. Do not use your OS disk. -**5a. Identify your drives:** +Identify the target: ```bash lsblk -f +findmnt / +findmnt /var/lib/docker || true +findmnt /data0 || true ``` -Find the NVMe to use for Docker. It must be a different drive from your OS. - -**5b. Partition the drive** (replace `/dev/nvme0n1` with your device): +Create a partition if needed: ```bash sudo cfdisk /dev/nvme0n1 ``` -In the menu: choose **gpt** if asked for a label type, select **New** (Enter for the full disk), select **Write** and type **yes**, then **Quit**. This creates a partition at `/dev/nvme0n1p1`. - -**5c. Format as XFS:** +Format, mount, and verify: ```bash sudo mkfs.xfs /dev/nvme0n1p1 -``` - -Do not use `mkfs.ext4` — Vast requires XFS for per-container storage quotas. - -**5d. Create the Docker directory:** - -```bash sudo mkdir -p /var/lib/docker -``` - -**5e. Get the drive's UUID:** - -```bash sudo blkid /dev/nvme0n1p1 ``` -Copy the UUID value from the output. Using the UUID is safer than device names, which can change between reboots. +Add an `/etc/fstab` line using your UUID: -**5f. Add to `/etc/fstab`** (replace the UUID with yours): - -``` +```text UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 /var/lib/docker xfs rw,auto,pquota,nofail 0 0 ``` -| Option | Purpose | -|--------|---------| -| `rw` | Read-write access | -| `auto` | Mount automatically at boot | -| `pquota` | **Required by Vast** — enables per-container storage quotas | -| `nofail` | System still boots if the drive has an issue | - -**5g. Mount and verify:** +Then mount: ```bash sudo mount -a df -h /var/lib/docker +findmnt /var/lib/docker -no SOURCE,FSTYPE,OPTIONS +sudo xfs_quota -x -c "state" /var/lib/docker ``` -You should see the NVMe mounted at `/var/lib/docker` with the correct size. +Project quota accounting and enforcement must be ON. -## Step 6: Enable GPU persistence mode - -Keeps GPUs initialised between jobs so they idle at low power instead of fully reinitialising each time: +## 7. Enable GPU Persistence ```bash -sudo bash -c '(crontab -l; echo "@reboot nvidia-smi -pm 1" ) | crontab -' +sudo bash -c '(crontab -l 2>/dev/null; echo "@reboot nvidia-smi -pm 1" ) | crontab -' ``` -## Step 7: Install the Vast host software +## 8. Run The Vast Installer -Use the same official Host Installer Wizard (TUI) for headless machines. Sign in to the host-enabled account, open the [Vast host setup page](https://cloud.vast.ai/host/setup/), copy the current installer command, and run it over SSH on the host machine. +Use the official Host Installer Wizard from the [Vast host setup page](https://cloud.vast.ai/host/setup/). Copy a fresh command from the host-enabled account and run it over SSH. -Keep the SSH session open until the wizard finishes. If the connection might drop, start a `tmux` or `screen` session first: +Use `tmux` if the SSH session may drop: ```bash tmux new -s vast-install ``` -The wizard should validate account access, drivers, hardware, storage, ports, network speed, installation, and self-test readiness. Do not reuse old `wget`/`python3 install` commands from notes, screenshots, third-party guides, or another account ([why](/host/installing-host-software#install-command)). - -## Step 8: Configure GRUB (optional) - -Edit `/etc/default/grub` and set: - -``` -GRUB_CMDLINE_LINUX="amd_iommu=on nvidia_drm.modeset=0 systemd.unified_cgroup_hierarchy=false" -``` - -| Option | Purpose | -|--------|---------| -| `amd_iommu=on` | Enables IOMMU on AMD CPUs (needed for [VM support](/host/vms) and PCIe passthrough) | -| `nvidia_drm.modeset=0` | Disables NVIDIA kernel modesetting (prevents conflicts with containers) | -| `systemd.unified_cgroup_hierarchy=false` | Uses cgroup v1 (required by some Docker configurations) | - -Apply the changes: - -```bash -sudo update-grub -``` - -## Step 9: Configure networking +Do not reuse old installer commands, screenshots, third-party commands, or a command copied from another account. -Set up router/firewall port forwarding per [Network & Ports](/host/network-ports), then set the port range for client instances: +If the TUI cannot run reliably in your SSH terminal, use the [headless fallback](/host/installing-host-software#headless-fallback): ```bash -sudo bash -c 'echo -n "40000-40019" > /var/lib/vastai_kaalia/host_port_range' +read -rsp "Paste fresh Vast host setup key: " VAST_HOST_KEY +echo +sudo python3 ./install "$VAST_HOST_KEY" \ + --no-driver \ + --docker-partition /dev/mapper/vg1-lv--1 \ + --ports 40000 40799 +unset VAST_HOST_KEY ``` -Use `echo -n` — the file must contain only the dash-separated range with no trailing newline. - -Size the range per [ports per GPU](/host/network-ports#ports-per-gpu). Test that ports are reachable **from outside your LAN** — same-LAN tests can fail from [NAT hairpinning](/host/network-ports#test-ports-outside-lan). One option: run `sudo nc -l -p PORT` on the host and check from an external network or [portchecker.co](https://portchecker.co). +Use `--no-driver` only after `nvidia-smi` shows all GPUs. -## Step 10: Fix NVML error (if needed) +## 9. Configure Networking -If the installer reports an NVML error, see [NVML driver/library mismatch](/host/common-errors-diagnostics#nvml-mismatch). A community-maintained patch script also exists: +Forward the direct port range from outside your network to the host for both TCP and UDP. If the installer did not set the range, configure it: ```bash -sudo wget https://raw.githubusercontent.com/jjziets/vasttools/main/nvml_fix.py -sudo python3 nvml_fix.py +echo -n "40000-40799" | sudo tee /var/lib/vastai_kaalia/host_port_range +sudo systemctl restart vastai.service +sudo tail -n 50 /var/lib/vastai_kaalia/kaalia.log | grep host_port_range ``` - -`nvml_fix.py` is a community tool, not official Vast software. Review it before running. - +Size the range with [Network & Ports](/host/network-ports#ports-per-gpu). Test from outside the LAN; same-LAN tests can be misleading because of NAT hairpinning. -## Step 11: Reboot and verify +## 10. Reboot And Verify ```bash sudo reboot ``` -After reboot, check everything is healthy: +After reconnecting: ```bash -# Check NVMe is mounted to /var/lib/docker df -h /var/lib/docker - -# Check the Vast daemon is running -sudo systemctl status vastai - -# Check Docker is running -sudo systemctl status docker - -# Check GPUs are visible +findmnt /var/lib/docker -no SOURCE,FSTYPE,OPTIONS +sudo xfs_quota -x -c "state" /var/lib/docker +systemctl is-active vastai.service vast_metrics.service docker nvidia-persistenced.service +sudo cat /var/lib/vastai_kaalia/host_port_range nvidia-smi ``` -## Step 12: List, self-test, and monitor +Then list, self-test, and monitor the machine: -1. List the machine and set pricing — [Pricing Your Listing](/host/pricing-your-listing). -2. Run the self-test from any machine with the CLI: [How to Self-Test](/host/how-to-self-test). If you run it from the same network as the host, your router must allow loopback (NAT hairpinning) — otherwise run it from a cloud VM or a mobile connection. -3. Watch the first day per [First 24 Hours After Install](/host/first-24-hours) — all checks there work over SSH. +- [Pricing Your Listing](/host/pricing-your-listing) +- [How to Self-Test](/host/how-to-self-test) +- [First 24 Hours After Install](/host/first-24-hours) -## Related pages +## Related Pages | Topic | Read next | | --- | --- | -| Standard (non-headless) install | [Installing Host Software](/host/installing-host-software) | -| Storage layout rationale | [Storage Setup](/host/storage-setup) | -| Multi-machine operations | [Fleet Operations](/host/fleet-operations) | -| Scheduled maintenance over SSH | [Maintenance Windows](/host/maintenance-windows) | +| Standard install | [Installing Host Software](/host/installing-host-software) | +| Storage layout | [Storage Setup](/host/storage-setup) | +| Fleet operations | [Fleet Operations](/host/fleet-operations) | +| Maintenance | [Maintenance Windows](/host/maintenance-windows) | diff --git a/host/hosting-overview.mdx b/host/hosting-overview.mdx index 720a7c32..ece8fc7a 100644 --- a/host/hosting-overview.mdx +++ b/host/hosting-overview.mdx @@ -13,40 +13,47 @@ personas:
All host personas
-Vast is a GPU marketplace. Hosts sell GPU resources on the marketplace. Hosts are responsible for: +Vast is a GPU marketplace. Hosts provide machines; renters run workloads on them. -- Setup: installing Ubuntu, creating disk partitions, installing NVIDIA drivers, opening network ports on the router and installing the Vast hosting software. -- Testing and troubleshooting all issues that can arise, such as driver conflicts, errors, bad GPUs, and bad network ports. **Vast does not offer support for getting your machine working.** Connect your Vast host account to our Discord to access our [host-only discord channels](https://discord.gg/hSuEbSQ4X8) to chat or seek help from other hosts on the platform. -- Managing your offers, including pricing and offer end dates -- Planning maintenance so that no active rental contracts are disrupted +As a host, you are responsible for: -## Account setup and hosting agreement +- Installing and maintaining Ubuntu, NVIDIA drivers, storage, networking, and the Vast host software. +- Keeping rented machines online, stable, and dedicated to renter workloads. +- Setting prices, offer end dates, and maintenance windows. +- Troubleshooting local hardware, driver, storage, and network problems. -You must create a dedicated account for hosting — do not reuse your client account. For account conversion, the agreement flow, and Machines-tab troubleshooting, see [Account & Hosting Agreement](/host/account-hosting-agreement). +Vast does not provide setup support for getting a machine working. For community help, connect your host account to Discord and use the [host-only channels](https://discord.gg/hSuEbSQ4X8). -## Machine setup +## Start Here -Follow the [Hosting Quickstart](/host/quickstart) for the ordered setup path: [Hardware Prep](/host/hardware-prep), [Storage Setup](/host/storage-setup), [Network & Ports](/host/network-ports), and [Installing Host Software](/host/installing-host-software). Once you are ready to list your machine, come back to this guide to understand pricing and the rental contract lifecycle. +Use a dedicated host account. Do not reuse your renter/client account. See [Account & Hosting Agreement](/host/account-hosting-agreement). -## General concepts +For setup, follow: -Clients have high expectations coming from AWS or GCP. As a host, plan to offer 100% uptime for your machine during the rental period. Expect that the GPU is going to be used at close to max capacity for the rental period. Ensure that your Internet, power source and heat dissipation systems are all functioning and that you have thought through how hosting will affect each one of those items. +1. [Supported Hardware](/host/supported-hardware) +2. [Hardware Prep](/host/hardware-prep) +3. [Storage Setup](/host/storage-setup) +4. [Network & Ports](/host/network-ports) +5. [Installing Host Software](/host/installing-host-software) +6. [How to Self-Test](/host/how-to-self-test) -## Offers and Rental Contracts +## Host Commitment -Hosts can create offers (sometimes called listings) through the CLI command list machine or the machine control panel GUI on the host machines page. +Renters expect cloud-like availability. During an active rental, assume the GPUs may be used heavily and continuously. Power, cooling, internet, drivers, storage, and the host daemon must stay healthy for the full rental period. -The main offer parameters include: +Do not run local gaming, mining, display workloads, or other GPU jobs on a rented machine. For policy context, see [Workload Policy](/host/workload-policy). -- the pricing for GPUs,internet,storage -- the discount schedule param which determines the price difference between [on-demand](/guides/instances/rental-types) and [reserved](/guides/instances/rental-types) instances -- the min bid price for [interruptible](/guides/instances/rental-types) instances -- the min_gpu param controlling 'slicing' (explained below) -- the offer end date, which determines how long the offer accepts new rental contracts +## Offers And Rental Contracts -The offer accepts new rentals until the offer end date. When a client rents an instance on your machine, a rental contract is created from your offer. If your machine has multiple GPUs and you've set min_gpu to allow slicing, multiple clients can rent from the same offer, each creating their own independent rental contract. +An offer is the listing renters can accept. Key offer settings include: -Once clients rent your machine, it is very important to honor the terms of each rental contract until its rental end date. +- GPU, storage, and bandwidth prices. +- Minimum GPU size (`min_gpu`). +- Interruptible minimum bid. +- Reserved discount settings. +- Offer end date. + +When a renter accepts an offer, Vast creates a rental contract. The contract locks in the offer terms at that moment: price, hardware specs, and rental end date. ![Offer, rental contract, and instance lifecycle diagram](/images/offer-contract-lifecycle.png) @@ -54,134 +61,57 @@ Once clients rent your machine, it is very important to honor the terms of each ## The Rental Contract -By listing your machine, you create an offer visible to potential clients. A rental contract is created each time a client accepts your offer by renting an instance. The rental contract locks in all of the offer's terms at the time of rental, including pricing, the rental end date, and hardware specs, and those terms cannot be changed afterward. Each rental contract is independent, you may have multiple active rental contracts from different clients on the same machine, each with its own rental end date and pricing. +Each rental contract is independent. A multi-GPU machine can have several active contracts with different renters, prices, and end dates. -As the host, you are _committing_ to provide the services as advertised in your offer: +Existing contracts cannot be changed by editing the offer. That means: -- the host must provide the hardware/services according to all the advertised specs -- the hardware can not be used for any other purposes -- the client's data must be isolated and protected according to the data protection policy -- the advertised services must be provided until each rental contract's rental end date +- Raising or lowering the offer price affects only future rentals. +- Shortening the offer end date affects only future rentals. +- Unlisting stops new rentals, but existing contracts continue. +- The machine must stay available until the latest active rental end date. -For full details, see the [hosting agreement](https://cloud.vast.ai/host/agreement). +For the full legal source, see the [Hosting Agreement](https://cloud.vast.ai/host/agreement). ### Offer End Date -The offer end date is your commitment to how long you will keep the machine online and fully functional. The pricing you set is the rate you'll be paid for that commitment. Together, these form the terms of your offer. - -You can set the offer end date in the hosting interface by clicking on the date field under expiration, or via the `end date` field in the CLI `list machine` command. Make sure to set an offer end date **before** listing your machine, or the offer will remain open indefinitely. - -#### How the offer becomes a rental contract - -When a client rents an instance from your offer, all of the offer's terms at that moment, the offer end date, the pricing, and the hardware specs, are locked into a **rental contract**. The offer end date becomes the contract's **rental end date** (shown in the UI as "client end date"), and the pricing becomes the contract's rate. Once created, a rental contract's terms cannot be changed, not by modifying the offer, not by unlisting the machine, and not by any other host action. - -#### Can I change the offer? - -Yes, but changes only affect future rental contracts. Existing rental contracts keep their original terms: - -- **Changing the price** does not change the rate on any existing rental contract -- **Shortening** the offer end date limits the commitment window for new clients, but does not shorten any existing rental end date -- **Extending** the offer end date allows new clients to rent for a longer period -- **Unlisting** the machine prevents new rental contracts entirely, but existing ones continue at their original pricing and rental end dates - -You can also unlist and relist with entirely new terms (new price, new offer end date). New rental contracts will be created at the new terms, while old rental contracts continue at their original terms. This means a single machine may have active rental contracts at different prices and different rental end dates. - -The latest rental end date across all active rental contracts on a machine is shown in the UI. You must keep the machine available until this date. - -#### Example: Multiple rental contracts from different offers - -You list a 4×A100 machine at \$2.00/GPU/hr with an offer end date of March 31. - -On January 5, Client A rents 2 GPUs. A rental contract is created at \$2.00/GPU/hr with a rental end date of March 31. - -On January 20, you decide to raise the price. You unlist the current offer and relist at \$2.50/GPU/hr with a new offer end date of June 30. - -On February 1, Client B rents the other 2 GPUs from the new offer. A rental contract is created at \$2.50/GPU/hr with a rental end date of June 30. - -You now have two active rental contracts on the same machine at different prices and different rental end dates. Client A's contract stays at \$2.00 through March 31. Client B's contract stays at \$2.50 through June 30. You must keep the machine online and fully functional through June 30 to honor both contracts. The UI shows June 30 as the latest rental end date on this machine. - -### Min GPU - -When clicking on the set pricing button, there is a min GPU field. The min GPU field allows you to set the smallest grouping of GPU rentals available on your machine in powers of 2, or down to 1. For example, if you have an 8X 3090 and set min gpu to 2, clients can create instances with 2, 4, or 8 GPUs. If you set min gpus to 1, then clients can make instances with 1, 2, 4 or 8 GPUs. - -### On-demand Price - -The on-demand price is the price per hour for the GPU rental. On demand rentals are the highest priority and if met will stop interruptibles. - -### Interruptible min price (optional) +The offer end date is the latest date a new renter can accept the offer. When accepted, that date becomes the rental end date for that contract. -The interruptible price allows the host to set the minimum interruptible price a client can bid. Interruptible rentals work as a bidding system: the highest bid runs, and lower-priority instances are stopped while their container and data remain on the machine. [more info](/guides/reference/faq/rental-types) +Set an offer end date before listing. If you leave it open indefinitely, you may create a longer commitment than intended. -### Reserved Discount Pricing Factor +### Changing An Offer -Reserved Instance Discounts are a feature for clients which allows them to rent machines over a long period of time at a reduced price. The Reserved Discount Pricing Factor represents the maximum possible discount a user can achieve on your machines. +To change future terms, update the offer or unlist and relist. Existing rental contracts keep their original terms. -The reserved discount pricing is determined by the hosts. If you intend to encourage a long term rental this is a factor that you may want to research. Use the filters in the UI to select reserved. +To extend current contracts, move the offer end date later while keeping the same or lower price. If you raised the price, existing contracts will not auto-extend. -![](/images/hosting-overview.webp) +## Listing Controls -Once that filter is selected, hosts who offer that discount will become easily visible. Hover over the rental button to see the discount rates that are offered. The original vs. the updated price will be shown as denoted by a strikethrough in the original amount: +For pricing and listing strategy, use the focused pages: -![](/images/hosting-overview-2.webp) - -This discount is not static, but rather scales over time that the user rents the machine for. These values are determined by the individual host(s). - -As a host, you can set this number yourself to 0 if you wish to opt out of this feature. +| Setting | Read next | +| --- | --- | +| On-demand price | [Pricing Your Listing](/host/pricing-your-listing) | +| Interruptible minimum bid | [Pricing Your Listing](/host/pricing-your-listing#listing-controls) | +| Reserved discounts | [Pricing Your Listing](/host/pricing-your-listing#listing-controls) | +| Minimum GPU size | [Pricing Your Listing](/host/pricing-your-listing#listing-controls) | +| Earnings estimate | [Earnings & Pricing Model](/host/earning) | ## Volume Offers -In addition to GPU offers, hosts can create volume offers on machines. A volume offer is an offer for storage space, and can be priced separately from GPU offers. The space allocated for volume offers is in the same pool of space as that for GPU offers, meaning that space will not be subtracted from available offers unless it is in use. When a client rents a volume offer, they rent a subset of the total space set for the offer, up to the total amount. - -### Storage Usage - -Allocated storage (that is, storage in use by client rental contracts) is subtracted from the total storage available on a machine, and split up proportionally among the machine's GPUs in remaining GPU offers. - -For example, on a machine with 1000Gb of disk available and 2 GPUs, a host can create a volume offer of up to 1000 Gb. - -If they create a volume offer of 500 Gb, and it is not rented, the machine will be available for rent with 2 offers of 1xGPU 500Gb and 1 offer of 2xGPU 1000Gb. - -If 200 Gb of the volume offer are rented, the GPU offers will reduce to 2 1xGPU 400Gb offers and 1 2xGPU 800Gb offer. The volume offer will still remain, as there is still available space, and update to offer 300Gb. - -Similarly, if stored instances on the machine are taking up 800Gb, the volume offer will reduce to 200Gb. - -If stored instances are only taking up 400 Gb, the volume offer will not update, as there is still enough space on the machine to cover the volume offer. - -### Listing Volumes - -By default, volume offers will be listed with GPU offers at the same disk price for half of the available space on the machine. Only rented space will impact the amount of space available for GPU offers, not the space in the offer itself. You can control the amount of space and price with the current console or CLI listing controls. - -Space is listed in Gigabytes, and price in \$/Gb/Month. - -See [vastai list machine](/host/cli/list-machine) and [vastai list volume](/host/cli/list-volume) for the current CLI syntax. - - - Volume offer end dates **must** align with GPU offer end dates. Setting an end date on a volume will not update if there is an existing GPU offer. Setting a GPU offer end date will update volume offer end dates. - - -Volume offers will be unlisted when the machine is unlisted. They can additionally be unlisted with the command: - -```text Text -vastai unlist volume -``` - -### Out of Sync Rental Contracts - -When a client deletes a volume, the space is automatically freed on the machine. If the machine is offline at this time, there is a job that runs hourly to free the space. If cleanup is not happening as expected, use the normal cleanup action for that machine from the console or CLI reference so expired or deleted rental contracts can be removed and available storage can update on offers. - -## Extending Rental Contracts - -To extend the current rental contracts for all clients on a given machine, change the offer end date to a later time with the same or lower pricing. +Volume offers rent storage space separately from GPU offers. Rented volume space comes from the same disk pool used by GPU rentals, so it reduces storage available for GPU offers only when actually rented or occupied. -If you have raised the pricing, you cannot extend the current rental contracts. +Volume offer end dates must align with GPU offer end dates. Unlisting the machine also unlists its volume offers. -## Testing your own machine +CLI references: -It is vital to test your own machine to ensure the ports and software are running smoothly. See [First 24 Hours After Install: test your machine like a client](/host/first-24-hours#test-like-a-client) for the GUI and CLI walkthroughs. +- [vastai list machine](/host/cli/list-machine) +- [vastai list volume](/cli/reference/list-volume) +- [vastai unlist volume](/cli/reference/unlist-volume) ## Maintenance -The proper way to perform maintenance on your machine is to wait until all active rental contracts have ended or the machine has no running instances. For planning details, scheduling, and what clients see, read [Maintenance Windows](/host/maintenance-windows). For unlisting, deleting, recreating, or uninstalling the host software, see [Remove or Recreate](/host/removing-recreating-machines). +Plan maintenance when the machine has no running instances or after active rental contracts end. For planned downtime, use [Maintenance Windows](/host/maintenance-windows). For unlisting, deleting, recreating, or uninstalling, see [Remove or Recreate](/host/removing-recreating-machines). ## Common Questions -Use the [Common Host Questions index](/host/common-host-questions) for support-linkable answers about setup, listing visibility, verification, payouts, reliability, storage, and operations. +Use [Common Host Questions](/host/common-host-questions) for quick links to setup, verification, search visibility, payouts, reliability, storage, and operations. diff --git a/host/how-to-self-test.mdx b/host/how-to-self-test.mdx index 7cd9b4d7..5bfd4bec 100644 --- a/host/how-to-self-test.mdx +++ b/host/how-to-self-test.mdx @@ -11,101 +11,106 @@ personas:
Pro OperatorHeadless / DC
-## Minimal Requirements for Verification - -Before your machine can be verified on Vast.ai, it must meet all minimum quality and reliability benchmarks. -Verification confirms that your machine is stable, performant, and properly configured to run client workloads. -The canonical threshold list lives in [Verification Stages: requirements](/host/verification-stages#additional-requirements-for-verification). +Self-test checks whether a listed host is ready for verification and temporary diagnostic rentals. -**Note:** Meeting these minimum requirements makes your machine eligible for verification, but does not automatically guarantee verification. +Passing self-test makes a machine eligible for verification. It does not guarantee verification, search placement, or rentals. -## About the Self-Test - -The self-test helps confirm that your machine satisfies Vast.ai’s minimum performance and configuration standards. -It automatically evaluates key system aspects and simulates real workloads to validate both hardware and network readiness. - -## What the Self-Test Checks +## Before You Run It -During the self-test, the following components and conditions are verified: +- Install the [Vast CLI](/cli/hello-world). +- Set the API key for the host-enabled account that owns the machine. +- List the machine. +- Make sure no client is actively renting it. +- Run from outside the host LAN when testing ports, such as a cloud VM or mobile connection. Same-LAN tests can be confused by NAT hairpinning. -* Driver setup (including CUDA configuration) -* Network speed and stability -* Open ports and connectivity -* PCIe bandwidth -* GPU VRAM capacity and reliability -* System RAM and CPU performance -* Overall machine reliability under simulated workloads +```bash +vastai set api-key +``` -The self-test first checks whether the listed machine meets minimum requirements before renting a temporary diagnostic instance. If preflight passes, the CLI rents a temporary instance, starts the self-test image, polls runtime progress, runs system requirement checks, a CUDA ResNet workload, ECC memory allocation, NCCL, and combined CPU/GPU stress, then reports the result and destroys the temporary instance. The runtime system requirements stage checks that each GPU has at least 98% free VRAM, system RAM is at least 95% of total GPU VRAM capped around 2 TB, and visible physical CPU cores are at least the visible GPU count. +
+## What Self-Test Checks -Passing self-test makes the machine eligible for verification, but does not guarantee immediate verification. +The CLI first checks listing requirements. If preflight passes, it rents a temporary diagnostic instance, starts the self-test image, polls progress, reports results, and destroys the instance. - -**Tip:** Ensure no other jobs or instances are running during the self-test for the most accurate results. - +Before renting the temporary diagnostic instance, the CLI checks whether the machine can be tested at all: -## Step-by-Step Guide +- The machine has a rentable offer. +- The API key can inspect the machine and offer. +- Reliability is greater than `0.90`. +- CUDA compatibility is `>= 11.8`. +- Direct ports are at least 3 ports per listed GPU. +- PCIe bandwidth is greater than 2.85 GB/s. +- Upload/download bandwidth meet the VRAM-scaled requirement. +- GPU VRAM is greater than 7 GiB per GPU. +- System RAM is close to total GPU VRAM, capped around 2 TB for very high-VRAM machines. -### Step 0: Install the Vast CLI +Inside the temporary self-test image, checks include: -Follow the official setup guide to install the Vast CLI: -[Vast CLI: Get Started](/cli/hello-world) +- HTTPS progress endpoint reachability. +- UDP echo on the mapped UDP port. +- PyTorch/CUDA import and GPU visibility. +- Each GPU has at least 98% free VRAM. +- Enough host RAM is available. +- At least one visible physical CPU core per visible GPU. +- CUDA ResNet workload across all visible GPUs. +- GPU memory allocation, including ECC-capable memory allocation checks where applicable. +- NCCL initialization and synchronization across visible GPUs. +- `stress-ng` and `gpu-burn` running together for 60 seconds. -### Step 1: Set Your API Key +Hyperthreads and logical CPUs do not count as physical cores. -1.1 Get your API key: [API Keys Documentation](/guides/reference/keys#api-keys) +## Run The Test -1.2 Authenticate your CLI with your Vast.ai account: +Run: -``` -vastai set api-key +```bash +vastai self-test machine ``` -Example: +To choose where failure bundles are saved: +```bash +vastai self-test machine \ + --support-bundle-dir /path/to/output ``` -vastai set api-key 123123123123123 -``` - -### Step 2: Run the Self-Test -Before running the test, make sure: +Do not paste API keys or account-specific commands into public channels. -* Your machine has been listed. -* There are no active clients currently renting it. +If the test passes, the CLI reports success. -Run the self-test from any machine with the Vast CLI installed. For network checks, the most reliable place to run it is outside the host's LAN, such as a cloud VM, mobile connection, or another external network. Running from the host itself or from the same LAN can give confusing results when the router does not support NAT hairpinning. +If it fails, look up the exact error in the [Self-Test Reference](/host/self-test-reference), fix the cause, and rerun. -Use the current CLI reference or the command shown in your host account for the exact syntax. Do not paste account-specific commands, API keys, or sensitive account details into public channels. +## Machine Not Found Or Not Rentable -### Step 3: Review the Results +Check: -If the test passes, you’ll see: +- The machine is listed. +- There are active offers. +- The account owns the machine. +- Reliability is above the gate unless using diagnostic mode. +- The Machines page has no red errors. +- Upload speed, download speed, RAM, and ports are populated. -* Test completed successfully. +See [Self-Test Reference: machine not rentable](/host/self-test-reference#machine-not-rentable). -If the test fails: +## Fresh Install Self-Test -* The CLI will display detailed reasons for failure. -* Look up the exact error string in the [Self-Test Reference](/host/self-test-reference), apply the suggested fixes, and rerun the test. +The installer can start self-test automatically after the daemon comes online. On a fresh host, it may wait about 10 minutes before listing the machine and starting the temporary diagnostic instance. -If the test says the machine is "not found or not rentable": +On the host: -* Check the Machines page for listed state, active rentals, active offers, reliability, red machine errors, and missing machine details such as upload speed, download speed, RAM, or ports. -* Confirm that you are using the same host-enabled account that owns the machine. -* See [Self-Test Failures: machine not found or not rentable](/host/self-test-reference#machine-not-rentable) for the possible root states and remediation path. +```bash +sudo tail -f /var/lib/vastai_kaalia/self_test.log +``` -### Optional: Ignore Requirements Mode +If reliability is still `<= 0.90`, the installer may run with `--ignore-requirements` as a diagnostic. That does not qualify the machine for verification. -If your machine is rejected for not meeting requirements, but you still want to check rentability or run the pressure tests, the CLI supports an `--ignore-requirements` mode. Use it only as a diagnostic mode, not as a way to qualify a machine for verification. +## Ignore Requirements Mode - -**Note:** The `--ignore-requirements` flag runs the test in a relaxed mode, bypassing some checks. -Even if the test passes in this mode, your machine does not meet the minimum verification requirements. - +Use `--ignore-requirements` only to diagnose rentability or runtime behavior. A pass in this mode does not mean the machine meets verification requirements. -**Important:** Even with `--ignore-requirements`, your machine must have at least three direct open ports, otherwise, the self-test will fail. +Even with `--ignore-requirements`, the machine still needs at least three direct open ports or self-test can fail. diff --git a/host/installing-host-software.mdx b/host/installing-host-software.mdx index cd90ac78..0906c79d 100644 --- a/host/installing-host-software.mdx +++ b/host/installing-host-software.mdx @@ -11,62 +11,113 @@ personas:
Pro OperatorHeadless / DCHobbyist
-Install the Vast host software from the official setup flow, then verify that the daemon, Docker, storage, network, and GPU runtime are healthy. +Install from the official Vast host setup flow, then confirm the daemon, Docker storage, network, and GPUs are healthy. -## Before you install +## Before You Install -Work through [Hardware Prep](/host/hardware-prep#install-prerequisites) and [Storage Setup](/host/storage-setup) first. Your account must already be host-enabled with the agreement accepted; see [Account & Hosting Agreement](/host/account-hosting-agreement). +Complete [Hardware Prep](/host/hardware-prep), [Storage Setup](/host/storage-setup), and [Network & Ports](/host/network-ports). Your account must be host-enabled and the hosting agreement accepted; see [Account & Hosting Agreement](/host/account-hosting-agreement).
-## Where should I copy the install command from? +## Install Command -Copy the current installer command from the official [Vast host setup page](https://cloud.vast.ai/host/setup/) after your account is host-enabled. The setup page provides the current Host Installer Wizard for your account and machine. +Copy the current command from the official [Vast host setup page](https://cloud.vast.ai/host/setup/). -The command may include account-specific token or API-key material, so do not reuse commands from old notes, screenshots, third-party guides, or another account. +The command can include an account-specific machine installation key. Do not reuse commands from old notes, shell history, screenshots, third-party guides, or another account. A regular API key is not a setup-page installation key. -## What is the Host Installer Wizard (TUI)? +## Host Installer Wizard -The Host Installer Wizard is Vast's guided terminal user interface (TUI) for new host machines. It runs in the terminal on the host and walks through the install flow step by step instead of leaving you to diagnose a long script failure after the fact. +The Host Installer Wizard is Vast's terminal UI for new host machines. ![Host Installer Wizard terminal review screen](/images/host-installer-wizard-tui.png) -The exact screens can change as the installer improves. Always follow the current instructions shown on the official host setup page. +Use it as the default install path: -Use it as the primary install path for new hosts: +1. Sign in to the host-enabled account. +2. Open the [host setup page](https://cloud.vast.ai/host/setup/). +3. Copy the current installer command. +4. Run it on the host, locally or over SSH. +5. Fix failed checks before continuing. -1. Sign in to the host-enabled Vast account. -2. Open the official [host setup page](https://cloud.vast.ai/host/setup/). -3. Copy the current installer command shown there. -4. Run it on the host machine, either locally or over SSH. -5. Work through each wizard screen and fix any failed check before continuing. - -The wizard is intended to check the major issues that usually block a host from becoming rentable: - -| Area | What to expect | -| --- | --- | -| Account access | Validates that the API key or account-specific setup material is usable before the daemon is installed. | -| System readiness | Checks the operating system, NVIDIA driver, CUDA/GPU visibility, CPU/RAM, disk, and Docker-related prerequisites. | -| Network readiness | Tests the configured port range and network speed before install completion. | -| Installation | Installs the Vast host software and shows installer progress in the terminal. | -| Logs and recovery | Shows useful failure context and points to the install log instead of leaving only a raw stack trace. | -| Rentability | Runs or prompts for the host self-test so you can confirm the machine is actually ready to list. | +The wizard checks account access, OS/GPU readiness, storage, network ports, network speed, install progress, and self-test readiness. -If you are running a headless server, use the same official setup flow over SSH. Keep the SSH session open until the wizard finishes or use a terminal multiplexer such as `tmux` when working over unstable remote links. +For SSH installs, keep the session open or use `tmux`. +If the wizard stops at NVIDIA/CUDA checks, repair the driver, reboot, confirm `nvidia-smi` shows every GPU, then rerun the wizard. + + +## Headless Fallback + +Use the TUI when possible. If the SSH terminal cannot drive it reliably, use the raw installer only after the host is already prepared: + +- `nvidia-smi` shows every GPU. +- `/var/lib/docker` is XFS with project quotas. +- TCP and UDP are forwarded for the direct port range. +- You copied a fresh setup-page machine installation key. + +Example: + +```bash +mkdir -p ~/vast-install +cd ~/vast-install +wget https://console.vast.ai/install -O install +read -rsp "Paste fresh Vast host setup key: " VAST_HOST_KEY +echo +sudo python3 ./install "$VAST_HOST_KEY" \ + --no-driver \ + --docker-partition /dev/mapper/vg1-lv--1 \ + --ports 40000 40799 +unset VAST_HOST_KEY +``` + +Replace the device and port range with your host values. Use `--no-driver` only after verifying the NVIDIA driver yourself. Do not reset machine identity unless Vast support tells you to. + + +Keep setup keys out of screenshots, tickets, and shell history. + + -## Why did the install script fail? +## Install Failures + +Common causes: + +- Stale setup command. +- Account not fully host-enabled. +- Interrupted installer download. +- Driver or Docker/cgroup problem. +- Blocked ports or low upload speed. +- Storage quota/filesystem mismatch. + +Refresh the setup page, copy a fresh command, confirm host account access, and rerun the wizard. Use the wizard error, installer log, and daemon logs to decide what to fix. + +## Logs + +Check `vast_host_install.log`, the `vastai.service` systemd unit, and the kaalia logs. For log locations and diagnostic bundles, see [Common Errors & Diagnostics](/host/common-errors-diagnostics#logs). + +## After Install + +Confirm the machine appears under your host account, then check: -Common causes include an expired or stale setup command, a truncated token or API key, an account that has not fully converted to host mode, an interrupted installer download, a deprecated endpoint, an executable or service failure such as `203/EXEC`, Docker/cgroup issues, blocked ports, low upload speed, or storage quota/filesystem mismatch. +```bash +systemctl is-active vastai.service vast_metrics.service docker nvidia-persistenced.service +findmnt /var/lib/docker -no SOURCE,FSTYPE,OPTIONS +sudo xfs_quota -x -c "state" /var/lib/docker +sudo cat /var/lib/vastai_kaalia/host_port_range +``` -Re-copy the installer command from the official setup page, confirm the account is host-enabled, then rerun the Host Installer Wizard. If it fails again, use the wizard's displayed error, the installer log, and the daemon logs to decide what to fix before retrying. +Expected: -## Logs and diagnostics +- Services report `active`. +- `/var/lib/docker` is XFS with `pquota` or `prjquota`. +- XFS project quota accounting and enforcement are ON. +- Port range matches your firewall/router forwarding. -Check `vast_host_install.log` for installer output and the `kaalia` systemd service for daemon health. The wizard may also show recent log output directly in the terminal when a step fails. For log locations and diagnostic bundles, see [Common Errors & Diagnostics](/host/common-errors-diagnostics#logs). +The installer may start self-test automatically. On a fresh host it can wait about 10 minutes for daemon initialization: -## After the install +```bash +sudo tail -f /var/lib/vastai_kaalia/self_test.log +``` -Confirm the machine appears under your host account, then continue with [How to Self-Test](/host/how-to-self-test) and [First 24 Hours](/host/first-24-hours#healthy-daemon). +Then continue with [How to Self-Test](/host/how-to-self-test) and [First 24 Hours](/host/first-24-hours). diff --git a/host/market-metrics.mdx b/host/market-metrics.mdx index 91e5b818..4a4fc617 100644 --- a/host/market-metrics.mdx +++ b/host/market-metrics.mdx @@ -9,117 +9,104 @@ personas:
BusinessPro Operator
-Vast provides real-time and historical data on GPU supply, demand, pricing, and geographic distribution across the marketplace. You can use this data to make informed decisions about pricing your machines and understanding demand for specific GPU types. +Use market metrics to compare GPU supply, demand, pricing, and geography before setting host prices. -## Accessing the data +## Access -There are three ways to access market metrics: +All Vast market metric methods require a host-enabled account. Some views also require the account to have at least one registered machine. -1. **Dashboards** at [cloud.vast.ai/host/market/](https://cloud.vast.ai/host/market/) -2. **CLI** via `vastai metrics` subcommands (requires `pip install vastai`, v1.0.4+) -3. **REST API** endpoints (see [API reference](#api-endpoints) below) +| Method | Where | +| --- | --- | +| Dashboard | [cloud.vast.ai/host/market](https://cloud.vast.ai/host/market/) | +| CLI | `vastai metrics ...` | +| REST API | `/api/v0/metrics/gpu/...` | -All three require a **host API key**. Regular client keys will receive a `401` error. +Accounts not enabled for hosting can receive `401` errors. If the dashboard says "Register a machine to view market stats" or "Market stats are available once you have at least one registered machine," register a host machine first, then return to the page. -## Dashboards +If you are evaluating hardware before registering a machine, public third-party dashboards can help with rough comparison, but Vast's dashboard, CLI, and API are the source of truth for host market metrics. -Three views are available at [cloud.vast.ai/host/market/](https://cloud.vast.ai/host/market/): +## Dashboard Views -- **Availability & Pricing** — Historical supply/demand counts and P10/median/P90 pricing over time -- **GPU Overview** — Current supply/demand counts, pricing, and stats for each GPU type -- **GPU Locations** — Geographic distribution of GPUs across the platform +- **Availability & Pricing**: historical supply/demand and P10/median/P90 prices. +- **GPU Overview**: current supply/demand and pricing by GPU type. +- **GPU Locations**: geographic distribution. +- If the page is blocked by the registered-machine requirement, use the Vast hosting calculator or public market dashboards for preliminary planning until the host account has a registered machine. -## CLI commands +## CLI -Install or upgrade the CLI: +Install or upgrade: ```bash pip install --upgrade vastai ``` -### Current snapshot — `vastai metrics gpu` - -Returns current supply, demand, and pricing for all GPU types. +Current snapshot: ```bash -vastai metrics gpu # all GPU types +vastai metrics gpu vastai metrics gpu --verified true --datacenter true -vastai metrics gpu --raw # JSON output +vastai metrics gpu --raw ``` -See [full reference](/host/cli/metrics-gpu). +Historical trends: -### Historical trends — `vastai metrics gpu-trends` +```bash +vastai metrics gpu-trends +vastai metrics gpu-trends "RTX 4090" +vastai metrics gpu-trends "RTX 4090, H100_SXM" +vastai metrics gpu-trends all +vastai metrics gpu-trends "RTX 4090" --full +vastai metrics gpu-trends "RTX 4090" --raw +vastai metrics gpu-trends "RTX 4090" --start 1773298800 --end 1773817200 --step 3600 +``` -Returns time-series data for supply, demand, and pricing. Defaults to RTX 5090, 4090, and 3090 over the last 24 hours. +Locations: ```bash -vastai metrics gpu-trends # defaults -vastai metrics gpu-trends "RTX 4090" # single GPU -vastai metrics gpu-trends "RTX 4090, H100_SXM" # multiple GPUs -vastai metrics gpu-trends all # all GPU types -vastai metrics gpu-trends "RTX 4090" --full # all data points (vs sampled ~20) -vastai metrics gpu-trends "RTX 4090" --raw # JSON output -vastai metrics gpu-trends "RTX 4090" --start 1773298800 --end 1773817200 --step 3600 +vastai metrics gpu-locations +vastai metrics gpu-locations --verified true --datacenter true +vastai metrics gpu-locations --gpu "RTX 4090, H100_SXM" +vastai metrics gpu-locations --rented false +vastai metrics gpu-locations --raw ``` -See [full reference](/host/cli/metrics-gpu-trends). +References: [metrics gpu](/host/cli/metrics-gpu), [metrics gpu-trends](/host/cli/metrics-gpu-trends), [metrics gpu-locations](/host/cli/metrics-gpu-locations). -### Location data — `vastai metrics gpu-locations` +## Public Comparison Sources -Returns geographic distribution of GPUs. +For planning before you have dashboard access, compare multiple sources: -```bash -vastai metrics gpu-locations # unfiltered -vastai metrics gpu-locations --verified true --datacenter true # datacenter-verified only -vastai metrics gpu-locations --gpu "RTX 4090, H100_SXM" # specific GPU types -vastai metrics gpu-locations --rented false # only unrented -vastai metrics gpu-locations --raw # JSON output -``` +- [Vast GPU market prices](https://vast.ai/pricing) +- [Vast hosting earnings calculator](https://vast.ai/hosting/calculator) +- [500.farm Vast charts](https://500.farm/vastai/charts/) -See [full reference](/host/cli/metrics-gpu-locations). +Third-party dashboards are useful for trend checks, but they can be delayed, filtered differently, or incomplete compared with Vast's own host market data. -## API endpoints +## API -You can also query the data directly via the REST API. Pass your host API key as a Bearer token. +Pass your host API key as a Bearer token. | Endpoint | Description | | --- | --- | -| `GET /api/v0/metrics/gpu/current/` | Current snapshot of all GPU types | -| `GET /api/v0/metrics/gpu/history/` | Time-series supply/demand and pricing | -| `GET /api/v0/metrics/gpu/locations/` | Geographic distribution | +| `GET /api/v0/metrics/gpu/current/` | Current GPU snapshot | +| `GET /api/v0/metrics/gpu/history/` | Historical supply, demand, and pricing | +| `GET /api/v0/metrics/gpu/locations/` | GPU geography | -### Query parameters +Common parameters: -| Parameter | Applies to | Description | -| --- | --- | --- | -| `verified` | current, history | `yes`, `no`, or `all` | -| `hosting_type` | current, history | `secure_cloud`, `community`, or `all` | -| `gpu_name` | history | GPU name (e.g. `RTX 4090`) | -| `start` | history | Unix timestamp for range start | -| `end` | history | Unix timestamp for range end | -| `step` | history | Seconds between data points (e.g. `3600` for hourly) | - -### Examples +| Parameter | Values | +| --- | --- | +| `verified` | `yes`, `no`, `all` | +| `hosting_type` | `secure_cloud`, `community`, `all` | +| `gpu_name` | GPU name, such as `RTX 4090` | +| `start`, `end` | Unix timestamps | +| `step` | Seconds between history points | ```bash -# Current snapshot — verified datacenter GPUs curl -H "Authorization: Bearer $API_KEY" \ "https://console.vast.ai/api/v0/metrics/gpu/current/?verified=yes&hosting_type=secure_cloud" - -# Historical trends — RTX 4090, hourly steps -curl -H "Authorization: Bearer $API_KEY" \ - "https://console.vast.ai/api/v0/metrics/gpu/history/?gpu_name=RTX+4090&verified=yes&start=1773298800&end=1773817200&step=3600" - -# Locations -curl -H "Authorization: Bearer $API_KEY" \ - "https://console.vast.ai/api/v0/metrics/gpu/locations/" ``` -## Data freshness - -Market metrics data is updated every 5 minutes. Location data is cached for up to 2 hours since it changes less frequently. - -### Rate limits +## Freshness And Limits -Each endpoint allows up to **5 requests per second** per user. For large historical queries, the backend automatically adjusts the resolution to keep response sizes reasonable. +Market metrics update every 5 minutes. Location data can be cached for up to 2 hours. Each endpoint allows up to 5 requests per second per user. diff --git a/host/network-ports.mdx b/host/network-ports.mdx index c09ccd50..7460ab2b 100644 --- a/host/network-ports.mdx +++ b/host/network-ports.mdx @@ -10,42 +10,114 @@ personas:
Pro OperatorHeadless / DC
-Configure public networking, direct ports, firewalls, and router forwarding before verification. +Configure public inbound networking before verification. Vast hosts need direct ports reachable from outside the host LAN.
-## How many direct ports are required per GPU? +## Ports Per GPU -The self-test requires at least 3 direct ports per listed GPU. +Self-test requires at least 3 direct ports per listed GPU. For production hosting, plan for about 100 direct ports per listed GPU. One instance can map up to 64 ports, and a larger range gives headroom while old mappings are being released and new instances are starting. -Vast maps a maximum of **64 ports per instance**, so the useful ceiling scales with how many instances the machine can host. For example, a 4-GPU machine sliced into single-GPU instances can make use of up to 256 mapped ports (64 per instance). Mapping more than 64 direct ports per listed GPU is unnecessary and is not a self-test requirement. +| Listed GPUs | Minimum | Practical example | +| --- | ---: | --- | +| 1 | 3 | `40000-40099` | +| 4 | 12 | `40000-40399` | +| 8 | 24 | `40000-40799` | + +The forwarded router/firewall range must match the range configured in the host software. The 100-port guidance is practical headroom, not a self-test minimum. -## Do I need TCP and UDP forwarding? +## TCP And UDP + +Forward both TCP and UDP for the configured direct port range. TCP-only forwarding can pass some checks while still failing renter workloads that need UDP. + +## Set The Host Port Range + +In the Host Installer Wizard, enter the same range you forwarded. + +For the raw installer: + +```bash +sudo python3 ./install "$VAST_HOST_KEY" --ports 40000 40799 +``` -Yes. Forward both TCP and UDP for the configured direct port range. Treat this as a host networking requirement, not an optional optimization. +For an installed host: -Some checks and workflows use TCP, but renter workloads can require UDP. Keeping both protocols forwarded across the same direct port range avoids partial connectivity that only appears after a renter starts using the machine. +```bash +echo -n "40000-40799" | sudo tee /var/lib/vastai_kaalia/host_port_range +sudo systemctl restart vastai.service +sudo tail -n 50 /var/lib/vastai_kaalia/kaalia.log | grep host_port_range +``` + +The log should show `host_port_range: 40000 40799`. -## What if I am behind CGNAT, Starlink, IPv6-only, or no public IP? +## CGNAT, Starlink, IPv6-Only, Or No Public IP -Vast host instances need direct public connectivity to mapped ports. CGNAT, many residential Starlink setups, IPv6-only service without compatible inbound reachability, and networks without a public inbound path can prevent clients and the self-test from reaching the host. +Vast instances need public inbound TCP and UDP reachability. CGNAT, double NAT without a real public forwarding path, many residential Starlink setups, incompatible IPv6-only service, blocked inbound ports, or no public inbound IP are not supported for hosting because renters and self-test must be able to reach the machine directly. -Compare your router WAN IP with your public IP, test from outside your LAN, and ask your ISP for public inbound connectivity if needed. +Compare your router WAN IP with your public IP and test from outside the LAN. If the router does not have a public inbound address or cannot forward the configured ports to the host, use a network connection that provides public inbound connectivity before listing the machine. -## How should I test ports from outside my LAN? +## Test Ports From Outside The LAN + +Same-LAN tests can be misleading because of NAT hairpinning. Test from a different network, such as mobile data, a cloud VM, or another external machine. + +On the host, start a temporary TCP listener and confirm it is listening: + +```bash +sudo python3 -m http.server 40000 --bind 0.0.0.0 +sudo ss -ltnp | grep ':40000' +``` + +From macOS or Linux outside the LAN: + +```bash +curl -v http://PUBLIC_IP:40000/ +nc -vz PUBLIC_IP 40000 +``` + +From Windows PowerShell outside the LAN: + +```powershell +Test-NetConnection PUBLIC_IP -Port 40000 +curl.exe http://PUBLIC_IP:40000/ +``` + +You can also use a public TCP checker such as [portchecker.co](https://portchecker.co/) for a quick outside-LAN TCP check. + +For UDP, watch for packets on the host: + +```bash +sudo tcpdump -ni any udp port 40000 +``` + +Then send a UDP packet from macOS or Linux outside the LAN: + +```bash +printf 'vast-port-test\n' | nc -u -w2 PUBLIC_IP 40000 +``` + +From Windows PowerShell outside the LAN: + +```powershell +$udp = New-Object System.Net.Sockets.UdpClient +$bytes = [Text.Encoding]::ASCII.GetBytes("vast-port-test") +$udp.Send($bytes, $bytes.Length, "PUBLIC_IP", 40000) +$udp.Close() +``` + +Stop temporary listeners before running the installer. -Test the external public IP and mapped port from a different network, not only from the host's LAN. Same-LAN tests can fail because of NAT hairpinning even when the port is reachable externally. If the CLI reports a tested external IP:port, troubleshoot that exact mapping first and confirm the router or firewall forwards it to the host machine's LAN address. +During self-test, troubleshoot the exact public IP and port reported by the CLI, such as `https://PUBLIC_IP:PORT/progress`. -## Connectivity failures during self-test +## Connectivity Failures -Self-test timeouts and [`vericode=8`](/host/glossary#vericode) port errors are usually network-path problems, not hardware problems. See [Self-Test Failures: vericode=8](/host/self-test-reference#vericode-8) and [Self-Test Failures: no response for 120s](/host/self-test-reference#no-response-120s). +Self-test timeouts and [`vericode=8`](/host/glossary#vericode) usually mean a network-path problem. See [Self-Test Reference: vericode=8](/host/self-test-reference#vericode-8) and [no response for 120s](/host/self-test-reference#no-response-120s). -## Related pages +## Related Pages | Topic | Read next | | --- | --- | -| Network suitability before buying | [Supported Hardware](/host/supported-hardware#network) | -| Running the self-test | [How to Self-Test](/host/how-to-self-test) | -| Decoding failures | [Self-Test Reference](/host/self-test-reference) | +| Hardware/network fit | [Supported Hardware](/host/supported-hardware) | +| Self-test | [How to Self-Test](/host/how-to-self-test) | +| Failure reference | [Self-Test Reference](/host/self-test-reference) | diff --git a/host/not-in-search.mdx b/host/not-in-search.mdx index 0fac53a9..907badf8 100644 --- a/host/not-in-search.mdx +++ b/host/not-in-search.mdx @@ -16,12 +16,36 @@ Use this page when a machine is listed but does not appear where you expect in m ## Listed and visible are different things -Separate "listed" from "visible in a normal broad search." There are over 10,000 listings on Vast, and search only displays a small subset. Search can be affected by ranking, grouping, filters, verification state, offer state, rental state, reliability, price, supply and demand, or machine errors. +Separate "listed" from "visible in a normal broad search." Marketplace search is not a complete inventory dump. It limits result sets, ranks and groups similar offers, tries to avoid race conditions, and usually shows the best matches first. Search can be affected by ranking, grouping, filters, verification state, offer state, rental state, reliability, price, supply and demand, or machine errors. ## Check the machine directly -Start in the Machines page for the host account. Confirm that the machine is online, listed, has active offers, has no red machine errors, and is not currently rented in a way that hides the offer you expect to see. +Start in the Machines page for the host account. Confirm that the machine is online, listed, has active offers, has no red machine errors, and is not currently rented in a way that hides the offer you expect to see. Also confirm required details such as direct ports, RAM, upload speed, and download speed are populated, and that reliability is above the relevant gate. + +Confirm the CLI is authenticated to the same host-enabled account: + +```bash +vastai show user +``` + +Then search directly by machine ID: + +```bash +vastai search offers 'machine_id=' --limit 200 +``` + +If you need to ignore the CLI's default search filters while troubleshooting, add `-n`: + +```bash +vastai search offers -n 'machine_id=' --limit 200 +``` + +You can also keep the normal command form but explicitly include the offer states that commonly hide a machine: + +```bash +vastai search offers 'machine_id= rentable=any rented=any verified=any external=any' --limit 200 +``` If the machine looks healthy there but is hard to find in marketplace search, narrow the search by GPU model, region, verification state, price range, and rentable/rented state. The machine can be listed correctly but still not appear in a broad search because other machines rank higher, similar offers are grouped, or your filters exclude it. diff --git a/host/optimization-guide.mdx b/host/optimization-guide.mdx index 3df96417..e7b5acc6 100644 --- a/host/optimization-guide.mdx +++ b/host/optimization-guide.mdx @@ -1,156 +1,89 @@ --- title: "Optimize Your Earnings" -description: "A guide to the key settings, tradeoffs, and strategies that determine how much your machines earn. Your hardware is only half the equation; how you configure your listings is the other." +description: "Key listing settings that affect occupancy and revenue." "canonical": "/host/optimization-guide" --- - -**Who this is for:** Hosts who have already completed the technical setup process and have machines ready to list. This guide covers the *economic* decisions; that is, the settings and strategies that affect your ranking, occupancy, and revenue. - +Use this page after your machine is ready to list. Hardware matters, but listing settings decide who can find and rent it. -## Understanding Your Market Position +## Core Rule -Before tuning any individual setting, it helps to understand where your supply sits relative to demand. Your listing competes with others for customer attention, and your goal is to find the combination of price, availability, and configuration that maximizes your total revenue over time. +Revenue is price multiplied by utilization. A high price with low occupancy can earn less than a moderate price with steady rentals. -Revenue isn't just about price. It's the product of your **price per hour** and your **occupancy rate** (the percentage of time your machines are rented). A high price with low occupancy can easily earn less than a moderate price with strong utilization. Every setting in this guide affects that balance. - -Customers filter and sort listings by a variety of criteria, most commonly by **verification status**, **duration**, and **disk space**. If your listing doesn't pass these filters, it won't appear in search results regardless of how competitive your price is. - - -Think of your listing as a product on a shelf. Price is only one factor; other factors like availability, duration terms, and configuration determine whether customers even see it. - +Before changing settings, compare similar machines by GPU model, GPU count, verification state, region, reliability, storage, bandwidth, and listing duration. ## Duration -Duration controls how long a rental contract can last. It's one of the most impactful settings because it affects both the type of customer you attract and the stability of your revenue. - -**The core tradeoff:** Longer durations tend to increase expected earnings because customers value the guaranteed availability. However, you are locked into your pricing terms for the full contract length. For example, if market rates rise, you can't adjust mid-contract. - -| Short duration | → | Long duration | -| :-- | :-: | --: | -| *Flexibility, lower commitment* | | *Higher expected value, price lock-in* | - -### Customer Segments by Duration - -Different customer types have very different duration preferences. Understanding this helps you target the right segment for your hardware: - -| Customer Type | Typical Duration Need | Notes | -| :-- | :-- | :-- | -| Serverless / automated inference | Short (hours to days) | These workloads are transient. Use short-term instances for this segment. | -| Experimentation & fine-tuning | Medium (days to weeks) | Researchers and developers testing models before committing to long runs. | -| Training runs | Long (weeks to months+) | Customers often prefer very long durations or no maximum. Stable, high-value contracts. | - - -Consider enabling the **auto-extend** feature. This allows rentals to automatically continue beyond their initial term. It reduces churn without requiring you to commit to a longer maximum duration. - - - -**Data center hosts:** Do not set a duration longer than you can reliably honor. Breaking a contract early carries a serious penalty. Only commit to what you can guarantee. - - -## Pricing - -Pricing is the most direct lever for your earnings, but the optimal price isn't simply "as high as possible." Rather, it's the rate that maximizes total revenue given your hardware, competition, and current market conditions. - -**The core tradeoff:** Higher prices increase revenue per rental hour, but reduce occupancy. Lower prices fill your machines faster, but each hour earns less. The optimum sits somewhere in the middle and shifts with supply and demand. - -| Lower price | → | Higher price | -| :-- | :-: | --: | -| *Higher occupancy* | | *Higher per-hour revenue* | - -### On-Demand Pricing +Longer durations can attract renters who value guaranteed availability, but they also lock you into the accepted price and end date. -Your primary listing price. Use market data and your competitors' pricing as a reference point. Consider your hardware's relative performance, your verification status, and your reliability track record, as these all affect how customers evaluate your listing against alternatives. +| Shorter duration | Longer duration | +| --- | --- | +| More flexibility | Better fit for long jobs | +| Easier to reprice | Longer price lock-in | +| Less commitment | Stronger availability promise | -### Interruptible Pricing (Min Bid Price) +Only offer durations you can honor. Breaking an active rental contract harms renters and can hurt reliability. -This is one of the most commonly misconfigured settings. The Min Bid Price is a **floor** for the bidding system, *not* an on-demand price. Customers bid above this floor, and competition among bidders will drive the actual price higher. +## Price -Many hosts set their interruptible floor too high because they treat it like their on-demand rate. This is a mistake. When your machines are idle, you earn nothing. A well-set interruptible floor ensures your GPUs are working even during low-demand periods. +Use comparable listings and [market metrics](/host/market-metrics). Adjust from actual utilization, not from the highest visible price. -**Recommended strategy:** Set your Min Bid Price close to your **cost of power when the GPU is under load**. At this floor, you're at least covering your electricity costs during idle periods. Bidders will typically pay above this floor, so your actual interruptible revenue will be higher. If no one bids, consider running your own background jobs on the otherwise-idle hardware. +| If this happens | Consider | +| --- | --- | +| Machine is healthy but idle | Lowering price or improving listing terms | +| Machine is always rented | Testing a modest price increase | +| Similar machines are cheaper | Matching the market until reliability/history improves | +| Demand spikes | Rechecking price after existing contracts end | - -Your floor price should **not** be close to your expected actual rental price. The bidding mechanism will bring the price up, so you set the minimum you'd accept, not the price you hope to get. - +Price changes affect future rentals only. Existing rental contracts keep the terms accepted at rental time. -### Disk Pricing +## Interruptible Minimum Bid -Disk pricing depends on how much storage you have relative to what clients need: +The minimum bid is a floor, not your expected on-demand price. Set it near the lowest price you are willing to accept, often close to loaded power cost. -| Situation | Approach | -| :-- | :-- | -| You have **excess disk** capacity | Set disk pricing closer to your amortized cost. Storage is not your bottleneck. | -| You are **under-provisioned** on disk | Set disk pricing higher than you might expect. This prevents stopped instances from consuming all your storage and starving active rentals. | +If the floor is too high, GPUs may sit idle. If it is too low, interruptible work may not cover operating cost. -### Internet Bandwidth Pricing +## Disk And Bandwidth -This depends entirely on your network setup. If you have fast, unmetered upstream internet, you can price bandwidth low or even at zero, as this is a strong competitive advantage. If your network has QoS controls or internal metering, set a reasonable bandwidth price to prevent any single client from saturating your connection and degrading service for others. +| Setting | Guidance | +| --- | --- | +| Disk price | Price lower if storage is abundant; price higher if disk is scarce. | +| Bandwidth price | Price lower for fast, unmetered links; price higher if bandwidth is metered or capacity-limited. | -## Min GPU Configuration +Do not let stopped instances, cached images, or rented volumes consume the disk needed for active rentals. -The Min GPU setting controls the smallest GPU partition you offer. For an 8-GPU machine, this determines whether customers can rent 1, 2, 4, or 8 GPUs at a time. It's a critical lever for balancing demand capture against utilization efficiency. +## Min GPU -**The core tradeoff:** Smaller minimums (e.g., 1x) let you serve more customers and fill individual GPU slots, but create fragmentation. Partial rentals can leave awkward, hard-to-fill gaps, leading to underutilization. Larger minimums (e.g., 8x) eliminate fragmentation but limit your audience to customers who need a full node. +`min_gpu` controls the smallest GPU slice renters can choose. -| Min GPU = 1 | → | Min GPU = 8 | -| :-- | :-: | --: | -| *More renters, more fragmentation* | | *Fewer renters, cleaner utilization* | +| Smaller `min_gpu` | Larger `min_gpu` | +| --- | --- | +| More renters can use the machine | Better fit for full-node workloads | +| Higher fragmentation risk | Lower fragmentation | +| Can improve occupancy | Can miss small-job demand | -### How It Works +For fleets, mix `min_gpu` values across machines instead of setting every host the same way. -When you set a Min GPU value, the platform creates listings at all powers of two from your minimum up to the total GPUs in the machine. For example, on an 8-GPU machine with Min GPU set to 2, listings are created for 2x, 4x, and 8x configurations. +## Keep The Listing Competitive -### Recommended Approach +Basics that affect revenue: -If you operate multiple machines, distribute your Min GPU settings across them rather than using the same value everywhere. A healthy mix might look like this: +- Keep drivers current before listing. +- Run self-test after setup and major changes. +- Maintain reliability above the verification gate. +- Avoid unplanned reboots, disconnects, and overheating. +- Highlight datacenter status only when it is real and approved. -| Machine | Min GPU | Available Listings | -| :-- | :-- | :-- | -| Machine A | 1 | 1x, 2x, 4x, 8x | -| Machine B | 2 | 2x, 4x, 8x | -| Machine C | 4 | 4x, 8x | -| Machine D | 8 | 8x only | +## Quick Reference -This approach lets you capture demand across all configuration sizes while keeping fragmentation in check. Market data suggests there is meaningful demand for both 1x and 8x configurations, with approximately twice as much search volume for 8x rentals as for 1x. - - -Avoid setting *all* machines to 1x, as this leads to severe fragmentation and reduced overall utilization. Conversely, all-8x can work if competitors in your GPU class are highly fragmented and there's strong demand for full nodes, but it's generally not the default recommendation. - - -The optimal mix depends on current market conditions, so be sure to consider what your competitors are offering and where unmet demand exists. Review your utilization patterns and adjust periodically. - -## Keeping Your Machines Competitive - -Settings alone won't help if your machines aren't reliable and up to date. A few operational basics make a significant difference in your listing's performance. - -### Driver Updates - -Ensure you have the latest NVIDIA drivers installed at the time of listing. Outdated drivers can cause compatibility issues with customer workloads and result in failed rentals. - -### Testing - -Test your machines before listing and after any configuration changes. A machine that appears available but fails when rented wastes a customer's time and yours, so you lose the rental and risk a negative reliability signal. - -### Verification - -Verification is one of the most common filters customers apply when searching. Ensuring your machines are verified significantly increases your visibility in search results. - -### Data Center Hosts - -If you operate out of a data center, consider highlighting any certifications you hold (e.g., Tier 4 data center, HIPAA compliance) as differentiators. These can be meaningful selling points for enterprise and compliance-sensitive customers. - ---- +| Setting | Main question | +| --- | --- | +| Duration | How long can you reliably commit? | +| On-demand price | What price balances occupancy and hourly revenue? | +| Min bid | What is your acceptable floor? | +| Disk price | Is storage abundant or scarce? | +| Bandwidth price | Is bandwidth unmetered or constrained? | +| `min_gpu` | Do you want more small renters or cleaner full-node utilization? | +| Auto-extend | Should same-price or lower-price rentals continue automatically? | -## Quick Reference: Settings at a Glance - -| Setting | Key Question | Watch Out For | -| :-- | :-- | :-- | -| **Duration** | How long can you reliably commit? | Over-committing (especially data centers); price lock-in on long contracts | -| **On-Demand Price** | What rate balances occupancy and revenue? | Pricing in a vacuum without checking competitors | -| **Min Bid Price** | What's your absolute floor (cost of power)? | Setting it like an on-demand price; leaving GPUs idle instead | -| **Disk Price** | Are you over- or under-provisioned on storage? | Under-pricing when disk-constrained, causing starvation | -| **Bandwidth Price** | Is your network metered or unmetered? | Zero pricing on a metered connection | -| **Min GPU** | What's the right fragmentation vs. demand balance? | All machines at 1x (fragmentation) or all at 8x (missed demand) | -| **NVIDIA Drivers** | Are drivers current at time of listing? | Outdated drivers causing failed rentals | -| **Auto-Extend** | Is it enabled? | Forgetting to turn it on | +For detailed pricing examples, see [Pricing Your Listing](/host/pricing-your-listing) and [Earnings & Pricing Model](/host/earning). diff --git a/host/payment.mdx b/host/payment.mdx index 93f2660d..c7376f6a 100644 --- a/host/payment.mdx +++ b/host/payment.mdx @@ -10,181 +10,109 @@ personas:
Business
-Manage your payouts from the **Earnings** page in the console. This page explains payout methods, invoice generation, payout timing, invoice statuses, and how to download payout records. For tax forms and withholding, see the [Tax Guide for Hosts](/host/guide-to-taxes). +Manage payouts from **Earnings** in the console. For tax forms and withholding, see the [Tax Guide for Hosts](/host/guide-to-taxes). -## The Earnings page +## Earnings Page ![](/images/console-earning.webp) -The Earnings page gives you a transparent view of your rental and referral performance and accumulated rewards: +The Earnings page shows: -- **Current Balance**: the amount you've earned so far but **haven't been paid out yet**. It keeps growing as your machines are rented and your referrals use the platform. -- **Total Earnings**: your **lifetime earnings** — the total amount earned since you started hosting or joined the earnings program. It includes both paid and unpaid amounts. -- **Total Referral Count**: the total users who created accounts through your referral link. See the [referral program](/guides/reference/referral-program). -- **Total Rental Earnings** (host only): the total lifetime amount you've earned from your machines being rented on the platform. -- **Total Referral Earnings** (host only): the total lifetime amount you've earned from all your referrals. +- **Current Balance**: earned but not yet paid. +- **Total Earnings**: lifetime host, referral, and template earnings. +- **Total Rental Earnings**: lifetime machine-rental earnings. +- **Total Referral Earnings**: lifetime referral earnings. +- **Payout History**: generated payout records and invoices. -The **Earning Chart** section provides a visual overview of your earning history, and the **Template Performance** chart displays earnings history from templates. +## Payout Methods - -![](/images/console-earning-2.webp) - - -## Available payout methods - -Vast.ai currently supports payouts through: +Vast currently supports: - Wise - PayPal - Stripe -Hosts are responsible for ensuring they can receive business-to-business (B2B) payments through their selected payout provider in their country or region. - -Before selecting a payout method, verify that: - -- The service is available in your country. -- Your account is fully verified. -- Your account can receive business payments. -- Any required identity, tax, or business verification has been completed. -- There are no restrictions, limitations, or compliance holds on your account. - -Please refer to your payout provider's documentation for regional availability, account requirements, and verification requirements. - -**Note:** Vast.ai is not responsible for delays, restrictions, compliance reviews, account limitations, or rejected payments imposed by Wise, PayPal, Stripe, or any other financial institution. - -## Setting up a payout account - -In the **Payout Account** section, set up the account your payouts are sent to. - - -![](/images/console-earning-4.webp) - - -## Payout schedule - -### Minimum payout threshold - -Your account must accumulate at least **$20 USD** before an invoice can be generated. Balances below $20 USD automatically roll forward until the minimum threshold is reached. - -### Invoice generation - -Invoices are generated weekly on Fridays around **12:00 PM Pacific time** (PDT during daylight saving time). - -To generate an invoice: - -- You must have a valid payout method connected to your Vast.ai account. -- Your account balance must meet the $20 minimum payout threshold. +Before selecting a method, confirm that the provider works in your region, your account is verified, and it can receive business payments. -### Payment timeline +## Payout Account -Payout timing depends on your location and payout method. A practical expectation is **2 to 4 weeks** from when earnings are posted until funds arrive with your payout provider. +Use **Earnings > Payout Account** to connect, view, remove, or switch payout providers. -Payment is generally scheduled about **2 weeks after the amount is posted**. After Vast sends the payment list, Wise, PayPal, or Stripe may take additional time to settle the funds to your account. +Only one payout account can be active at a time. To switch accounts, first deactivate the current account, then activate the new one. -### Invoice statuses + +Vast is not responsible for payout delays, account holds, compliance reviews, or rejected payments from Wise, PayPal, Stripe, or other financial institutions. + -#### Pending +## Payout Schedule -A Pending invoice has been generated but has not yet entered the payment phase. Invoices generated on Friday are generally scheduled to be paid during a later payout cycle. - -#### Paid - -An invoice is marked as Paid once Vast.ai has submitted the payout to your selected payout provider. - -The Paid status reflects the payout status within Vast.ai's billing system only. It does not indicate whether the funds have completed processing within Wise, PayPal, or Stripe. +| Item | Rule | +| --- | --- | +| Minimum payout | $20 USD | +| Invoice generation | Fridays around 12:00 PM Pacific time | +| Payment timing | Usually 2 to 4 weeks from earnings being posted, depending on region and payout method | +| Paid status | Vast submitted the payout; the provider may still be processing it | -After a payout has been submitted, your payout provider may require additional processing time before funds appear in your account. +Your balance rolls forward until it reaches the $20 minimum and a valid payout account is active.
-## Payout history and invoices +## Payout History And Invoices -You can view your payout history for a selected date range, and generate and download invoices for your earning payouts. +Start from **Account > Earnings**. - -![](/images/console-earning-3.webp) - +Use the **Earnings Chart** controls to download CSV or PDF earnings data when available. -To view and download invoices, navigate to **Earnings > Payout History**. From the Payout History section, you can: +Use **Payout History** to: -- View historical payouts -- Filter records by date range -- Download payout records in CSV format -- Download payout records in PDF format +- Filter payout records by date. +- Download CSV or PDF payout records and invoices. +- Review invoice status. -To create a billing-history invoice, open the **Billing** page and check **Include Charges** under **Generate Billing History**. +Use **Payout Account** to manage connected payout providers. It is not the invoice export area. -To customize invoice information, navigate to **Settings > Invoice Information**. From this page, you can add or update company name, business address, tax identification information, and other billing details you would like displayed on invoices. +For billing-history invoices with itemized usage charges, open **Billing**, use **Generate Billing History**, and check **Include Charges**. -## Frequently asked questions +To customize invoice details, update **Settings > Invoice Information**. + +## Frequently Asked Questions ### When will I get paid? -Payout timing depends on your payout method and region. As a practical expectation, plan for **2 to 4 weeks** from when earnings are posted until funds arrive with your payout provider. - -Invoices are generated weekly on Fridays around 12:00 PM Pacific time. Payment is generally scheduled about two weeks after the amount is posted. After the payout is submitted, your payout provider may require additional processing time before funds appear in your account. +Plan for 2 to 4 weeks from when earnings are posted. Invoices are generated weekly on Fridays around 12:00 PM Pacific time. Payment is generally scheduled about two weeks after posting, then the payout provider may need more time to settle the funds. -### I see my invoice is marked as Pending. What does this mean? +### What does Pending mean? -A Pending invoice has been generated but has not yet entered the payment phase. Once Vast.ai submits the payout to your selected payout provider, the invoice status changes to Paid. +The invoice was generated but has not entered the payment phase. It changes to Paid after Vast submits the payout. -### Can Vast.ai send my payout by direct bank transfer? +### Can Vast send direct bank transfers? -No. Vast.ai only supports payouts through Wise, PayPal, and Stripe. Direct bank transfers, ACH payments, wire transfers, and SWIFT payments are not available. +No. Vast supports Wise, PayPal, and Stripe. Direct bank transfers, ACH, wire, and SWIFT payouts are not available. -### Why is my account not generating invoices? +### Why are invoices not generating? -Invoices are only generated when a payout method is connected to your Vast.ai account and your balance has reached the $20 minimum payout threshold. If either requirement is not met, an invoice will not be generated. - -Please verify that your payout method has been connected correctly in your account settings. +Invoices require both an active payout account and at least $20 in balance. ### Can I generate an invoice manually? -You can view and download payout records from **Earnings > Payout History**. For billing-history invoices, open the **Billing** page and check **Include Charges** under **Generate Billing History**. To customize invoice details, update **Settings > Invoice Information**. +You can download payout records from **Account > Earnings > Payout History**. For billing history, use **Billing > Generate Billing History** with **Include Charges** enabled. ### How can I have earnings as a Vast user? -Hosts can earn from machine rentals. Vast users may also have referral or template-related earnings; see the [referral program](/guides/reference/referral-program) for details. - -## How much can I make hosting on Vast.ai? - -Host earnings depend on several factors, including: - -- Hardware specifications -- Pricing -- Uptime and reliability -- Geographic location -- Current customer demand +Hosts earn from machine rentals. Users may also earn referral or template income; see the [referral program](/guides/reference/referral-program). -To understand current market pricing and utilization trends, visit the [Market Stats](https://cloud.vast.ai/host/market/) page. You must be signed in as a host with at least one registered machine to access this page. Alternatively, check [GPU market prices](https://vast.ai/pricing) or the [Host Earnings Calculator](https://vast.ai/hosting/calculator). +## Earnings Estimates -Market conditions change over time, so earnings cannot be guaranteed. - -Estimate with the [Earnings & Pricing Model](/host/earning) and [GPU Market Metrics](/host/market-metrics). - -## Related pages - -| Topic | Read next | -| --- | --- | -| Tax forms by payout provider | [Tax Guide for Hosts](/host/guide-to-taxes) | -| Revenue estimation and pricing | [Earnings & Pricing Model](/host/earning) | -| Referral earnings | [Referral program](/guides/reference/referral-program) | +Host earnings depend on hardware, price, reliability, location, uptime, and demand. Use the [Earnings & Pricing Model](/host/earning), [Market Stats](https://cloud.vast.ai/host/market/), [GPU market prices](https://vast.ai/pricing), and the [Host Earnings Calculator](https://vast.ai/hosting/calculator). diff --git a/host/persona-decision-guide.mdx b/host/persona-decision-guide.mdx index 34ffde01..47547fe7 100644 --- a/host/persona-decision-guide.mdx +++ b/host/persona-decision-guide.mdx @@ -10,84 +10,67 @@ personas:
HobbyistBusiness
-Use this page before buying hardware, repurposing a machine, or starting an install. Hosting on Vast can work well when you have suitable hardware, stable networking, and enough Linux/server comfort to operate the machine yourself. +Use this before buying hardware, repurposing a machine, or starting an install. -Vast is a GPU marketplace, not a managed hardware setup service. Hosts are responsible for their own machine, operating system, drivers, storage, networking, uptime, pricing, and maintenance. +Vast is a GPU marketplace, not a managed setup service. Hosts operate their own hardware, OS, drivers, storage, networking, pricing, uptime, and maintenance. ## Good Fit -Hosting is more likely to be a good fit if you can say yes to most of these: +Hosting is more likely to work if: -- You have, or plan to buy, [supported hardware](/host/supported-hardware). -- The host can run native Ubuntu/Linux and stay dedicated to Vast while rented. -- The GPUs are the same type and have enough VRAM for current self-test requirements. -- You have stable power, cooling, storage, and public inbound networking. -- You are comfortable troubleshooting Linux, Docker, GPU drivers, PCIe, and routers. +- You have [supported hardware](/host/supported-hardware). +- The host can run native Ubuntu/Linux. +- GPUs are same-type and have enough VRAM. +- Power, cooling, storage, and inbound networking are stable. +- You can troubleshoot Linux, Docker, GPU drivers, PCIe, and routers. - You can keep the machine online through active rental contracts. -- You are willing to adjust pricing based on market data and utilization. +- You are willing to adjust pricing from market data and utilization. ## Wait Or Reconsider -Pause before hosting if any of these describe your setup: - -| Situation | Why it is risky | +| Situation | Why | | --- | --- | -| You want to host from Windows or WSL | WSL can help you run the CLI from a client machine, but it is not the supported host operating system. | -| You are behind CGNAT, IPv6-only service, Starlink without inbound reachability, or blocked ports | Renters and self-test need direct inbound connectivity to mapped ports. | -| You have mixed GPUs, very old GPUs, or low-VRAM GPUs | Mixed and low-demand hardware can fail checks or be unattractive to renters. | -| You expect Vast support to configure the machine for you | Vast does not provide hands-on setup support for local Linux, BIOS, driver, Docker, storage, power, thermal, or router work. | -| You need guaranteed verification, search placement, rental volume, or earnings | Passing requirements makes a machine eligible; it does not guarantee business results. | -| The machine is also your daily gaming or workstation machine | Rented workloads need a stable dedicated host and can use the GPU heavily for long periods. | +| Windows or WSL host | Not the supported host OS path. | +| CGNAT, double NAT without public forwarding, blocked inbound ports, incompatible IPv6-only, or no public inbound path | Renters and self-test need direct public TCP/UDP connectivity. | +| Mixed, old, or low-VRAM GPUs | Can fail checks or attract little demand. | +| Expecting Vast to configure the machine | Local hardware, Linux, drivers, storage, and router work are host responsibilities. | +| Expecting guaranteed verification or earnings | Eligibility does not guarantee search placement, rentals, or revenue. | +| Daily gaming/workstation machine | Rented workloads need a stable dedicated host. | ## Choose Your Path -| If you are... | Start with | Then read | -| --- | --- | --- | -| New to hosting | [Hosting Quickstart](/host/quickstart) | [Supported Hardware](/host/supported-hardware), [Account & Hosting Agreement](/host/account-hosting-agreement) | -| Checking a possible hardware purchase | [Supported Hardware](/host/supported-hardware) | [Earnings & Pricing Model](/host/earning), [Hardware Prep](/host/hardware-prep) | -| A Linux-comfortable operator | [Hardware Prep](/host/hardware-prep) | [Install Host Software](/host/installing-host-software), [Network & Ports](/host/network-ports), [How to Self-Test](/host/how-to-self-test) | -| Running machines without local displays | [Headless Install](/host/headless-install) | [Fleet Operations](/host/fleet-operations), [Maintenance Windows](/host/maintenance-windows) | -| Evaluating hosting as a business | [Earnings & Pricing Model](/host/earning) | [GPU Market Metrics](/host/market-metrics), [Pricing Your Listing](/host/pricing-your-listing), [Host Payouts](/host/payment), [Tax Guide for Hosts](/host/guide-to-taxes) | +| If you are... | Start with | +| --- | --- | +| New to hosting | [Hosting Quickstart](/host/quickstart) | +| Checking a hardware purchase | [Supported Hardware](/host/supported-hardware) and [Earnings Model](/host/earning) | +| Linux-comfortable operator | [Hardware Prep](/host/hardware-prep), then [Install Host Software](/host/installing-host-software) | +| Headless/datacenter operator | [Headless Install](/host/headless-install) and [Fleet Operations](/host/fleet-operations) | +| Evaluating business fit | [GPU Market Metrics](/host/market-metrics), [Pricing Your Listing](/host/pricing-your-listing), and [Host Payouts](/host/payment) | ## Decision Checklist Before continuing, confirm: -1. Hardware: GPU model, VRAM, CPU, RAM, PCIe, storage, and network match the [Supported Hardware](/host/supported-hardware) guidance. -2. Operating system: the host can run native Ubuntu/Linux. -3. Account: you will use a dedicated host account, not the same account you use as a renter. -4. Network: you can forward enough direct ports from a public inbound path to the host. -5. Operations: you can keep the machine stable, cool, powered, and online during rental contracts. -6. Economics: you have checked [Earnings & Pricing Model](/host/earning), compared similar listings, and understand that earnings depend on demand, price, reliability, and utilization. -7. Support expectations: you can collect logs and diagnostics, and you understand which issues are host responsibilities. +- Hardware, CPU, RAM, PCIe, storage, and network match [Supported Hardware](/host/supported-hardware). +- The host can run native Ubuntu/Linux. +- You will use a dedicated host account. +- You can forward enough direct TCP and UDP ports. +- You can keep the machine powered, cooled, stable, and online during rentals. +- You understand earnings depend on demand, price, reliability, and utilization. +- You know which issues are host responsibilities and which belong with Vast support. ## Common Questions -| Question | Short answer | +| Question | Read | | --- | --- | -| [What hardware is supported?](/host/supported-hardware) | Use dedicated Ubuntu/Linux hosts with supported same-type GPUs, AVX-capable CPU, enough physical CPU cores, RAM, storage, PCIe, networking, and direct ports. | -| [What hardware or OS should I avoid?](/host/supported-hardware#unsupported-or-discouraged-setups) | Avoid Windows/WSL as the host OS, mixed GPUs, low-VRAM or very old GPUs, CPUs without AVX, and machines without inbound public networking. | -| [What is the first-time setup path?](/host/quickstart) | Check hardware and networking, create a host account, prepare the machine, install the host software, list, self-test, then monitor verification and rentals. | -| [Do I need a separate host account?](/host/account-hosting-agreement#separate-host-account) | Yes. Use a dedicated host account. Do not combine client rental and host operations in the same account. | -| [What if I do not have a public IP?](/host/network-ports#cgnat-starlink-ipv6) | CGNAT, blocked inbound ports, and incompatible IPv6-only setups can prevent clients and self-test from reaching the host. | -| [How should I price listings?](/host/pricing-your-listing) | Compare similar active listings, use market metrics, and adjust based on utilization, reliability, GPU model, and demand. | -| [How do hosts get paid?](/host/payment) | Payout timing and settlement depend on the pay period, invoice state, and payout provider. | -| [What should go to Vast support?](/host/common-errors-diagnostics#escalate-support) | Escalate account, agreement, backend machine record, payout, API permission, or platform-state mismatches. Local hardware and network setup remain host responsibilities. | - -## What Vast Does And Does Not Do - -Vast provides the marketplace, host software, listing tools, verification/self-test workflow, docs, CLI/API/SDK, and community channels. - -Hosts provide and operate the machine. That includes: - -- Hardware purchase and assembly. -- Ubuntu/Linux installation. -- BIOS, PCIe, power, thermal, and storage setup. -- NVIDIA/AMD driver health. -- Docker and GPU runtime health. -- Router, firewall, public IP, and port forwarding. -- Pricing, maintenance planning, and uptime. - -For peer help, see [Discord & Community](/host/community). For setup details, continue with [Hosting Quickstart](/host/quickstart). +| What hardware is supported? | [Supported Hardware](/host/supported-hardware) | +| What should I avoid? | [Unsupported setups](/host/supported-hardware#unsupported-or-discouraged-setups) | +| Do I need a separate host account? | [Account & Hosting Agreement](/host/account-hosting-agreement#separate-host-account) | +| What if I do not have a public IP? | [Network & Ports](/host/network-ports#cgnat-starlink-ipv6) | +| How should I price listings? | [Pricing Your Listing](/host/pricing-your-listing) | +| How do hosts get paid? | [Host Payouts](/host/payment) | +| What goes to support? | [Errors & Diagnostics](/host/common-errors-diagnostics#escalate-support) | + +For peer help, see [Discord & Community](/host/community). For setup, continue with [Hosting Quickstart](/host/quickstart). diff --git a/host/pricing-your-listing.mdx b/host/pricing-your-listing.mdx index e936c7da..dad290ed 100644 --- a/host/pricing-your-listing.mdx +++ b/host/pricing-your-listing.mdx @@ -10,60 +10,55 @@ personas:
BusinessPro Operator
-Use this page when you are ready to list a verified machine or adjust an existing offer. Pricing is a balance between hourly rate, utilization, renter fit, and how long you are willing to keep the machine available. +Use this page when you are ready to list a machine or adjust an offer. Price for total revenue, not just the highest hourly rate. ## Before You Price -Check these first: +Confirm: -1. The machine is stable enough to rent and has no unresolved hardware, driver, Docker, storage, or network errors. -2. The offer end date matches the commitment you are willing to honor. -3. You have compared similar machines in [GPU Market Metrics](/host/market-metrics). -4. You have estimated gross revenue using the [Earnings & Pricing Model](/host/earning). -5. You understand that price changes affect new rental contracts only. +- No unresolved hardware, driver, Docker, storage, or network errors. +- Offer end date matches the commitment you can honor. +- Similar machines have been checked in [GPU Market Metrics](/host/market-metrics). +- Gross revenue has been estimated with the [Earnings Model](/host/earning). +- You understand that price changes affect future rental contracts only.
## Listing Controls -These controls define the terms renters see when they choose your machine. - -| Control | CLI option | What it changes | +| Control | CLI option | Meaning | | --- | --- | --- | -| On-demand GPU price | `--price_gpu` | Per-GPU rental price in dollars per hour for active on-demand rentals. | -| Interruptible minimum bid | `--price_min_bid` | Lowest per-GPU bid price you will accept for interruptible rentals. | -| Reserved discount rate | `--discount_rate` | Maximum long-term prepay discount rate for reserved rentals. | -| Minimum GPU chunk | `--min_chunk` | Smallest GPU group a renter can select from a multi-GPU machine. | -| Offer end date | `--end_date` or `--duration` | How long the offer accepts new rental contracts. | -| Disk price | `--price_disk` | Storage price in dollars per GB per month for inactive instances. | -| Upload and download price | `--price_inetu`, `--price_inetd` | Bandwidth prices in dollars per GB. | -| Volume offer size and price | `--vol_size`, `--vol_price` | Optional separately listed storage volume offer. | +| On-demand GPU price | `--price_gpu` | Dollars per GPU-hour. | +| Interruptible min bid | `--price_min_bid` | Lowest bid you will accept for interruptible rentals. | +| Reserved discount | `--discount_rate` | Maximum long-term prepay discount. | +| Minimum GPU chunk | `--min_chunk` | Smallest GPU group renters can select. | +| Offer end date | `--end_date` or `--duration` | How long new renters can accept the offer. | +| Disk price | `--price_disk` | Dollars per GB per month for inactive storage. | +| Bandwidth price | `--price_inetu`, `--price_inetd` | Dollars per GB uploaded/downloaded. | +| Volume offer | `--vol_size`, `--vol_price` | Optional separately listed storage. | -DPH means dollars per hour. In host listing discussions, it usually refers to the hourly price of GPU compute, but the renter's total cost can also include storage and bandwidth. +DPH means dollars per hour, usually GPU compute price. ## Starting Workflow -1. Find comparable offers with the same GPU model, similar GPU count, similar verification state, similar region, and similar machine quality. -2. Compare P10, median, and P90 prices for the last 30 days. -3. Choose an on-demand price that fits your goal: high occupancy, high hourly rate, or a balanced middle. -4. Set `min_gpu`/`--min_chunk` to `1` unless you have a clear reason to require multi-GPU rentals. -5. Set an interruptible minimum bid if you want lower-priority bid rentals. -6. Set a reserved discount only if you are comfortable with longer rentals at a lower effective rate. +1. Compare same GPU model, GPU count, verification state, region, and machine quality. +2. Check P10, median, and P90 pricing for the last 30 days. +3. Pick an on-demand price for your goal: occupancy, hourly rate, or balance. +4. Set `min_gpu`/`--min_chunk` to `1` unless you have a reason to require larger rentals. +5. Set an interruptible min bid only as a floor, not as your target price. +6. Use reserved discounts only if you can support longer rentals. 7. Set an offer end date you can honor. -8. Review utilization after the machine has had enough time on the market. - -## Worked Example -A 4-GPU machine has comparable 30-day market prices of P10 `$0.35`, median `$0.45`, and P90 `$0.65` per GPU-hour. The host wants a balanced start and chooses: +## Example -| Setting | Example value | Reason | -| --- | --- | --- | -| On-demand price | `$0.45/GPU/hr` | Starts near the comparable median. | -| Interruptible min bid | `$0.25/GPU/hr` | Allows lower-priority rentals without accepting very low bids. | -| Reserved discount | `0.30` | Offers a discount for longer rentals while preserving margin. | -| Minimum GPU chunk | `1` | Lets renters take 1, 2, or 4 GPUs instead of requiring the whole machine. | -| Offer end date | A known maintenance-safe date | Avoids open-ended commitments the host may not be able to honor. | +For a 4-GPU machine with comparable prices of P10 `$0.35`, median `$0.45`, and P90 `$0.65` per GPU-hour: -The matching CLI options are: +| Setting | Example | +| --- | --- | +| On-demand price | `$0.45/GPU/hr` | +| Interruptible min bid | `$0.25/GPU/hr` | +| Reserved discount | `0.30` | +| Minimum GPU chunk | `1` | +| Offer end date | Maintenance-safe date | ```bash --price_gpu 0.45 \ @@ -73,40 +68,35 @@ The matching CLI options are: --end_date 12/31/2026 ``` -Use those values through the console or the current [vastai list machine](/host/cli/list-machine) CLI syntax. Adjust the numbers for your market, operating costs, and risk tolerance. +Adjust for your market, operating cost, and risk tolerance. Use the current [vastai list machine](/host/cli/list-machine) syntax. ## Changing Price Later -When a renter accepts an offer, the offer terms become that rental contract. The price, hardware terms, and rental end date are locked for that contract. - -Changing the listing price later affects only future rental contracts: +When a renter accepts an offer, its terms become that rental contract. Later changes affect only future rentals. | Change | Effect | | --- | --- | -| Raise the listed price | New renters see the higher price. Existing renters keep their original price. | -| Lower the listed price | New renters see the lower price. Existing renters keep their original price. | -| Shorten the offer end date | New contracts are limited by the new end date. Existing rental end dates do not shorten. | -| Unlist the machine | Prevents new rentals, but active rental contracts continue until their rental end dates. | +| Raise or lower price | New renters see the new price; active renters keep the accepted price. | +| Shorten offer end date | New contracts use the new date; active rental end dates do not shorten. | +| Unlist machine | Stops new rentals; active contracts continue. | -If a machine has active rental contracts, keep it online and functional until the latest rental end date shown for that machine. +Keep the machine online until the latest active rental end date. ## When To Adjust -Use utilization and market movement as your main signals. - | Signal | Possible action | | --- | --- | -| Low utilization and many similar cheaper offers | Lower price, improve listing quality, or revisit hardware fit. | -| High utilization and many similar offers priced higher | Consider raising price for future contracts. | -| Good price but poor rentals | Check verification, reliability, search visibility, network, storage, and machine errors. | -| Frequent interruptible rentals but low on-demand demand | Recheck on-demand price and whether your machine is mainly attractive to price-sensitive renters. | -| Strong long-running demand | Consider a reserved discount and a longer offer end date if operations can support it. | +| Healthy but idle | Lower price or improve listing fit. | +| Always rented | Test a modest increase for future contracts. | +| Similar machines are cheaper | Reprice or improve machine quality. | +| Poor rentals despite fair price | Check verification, reliability, search visibility, network, storage, and errors. | +| Strong long-running demand | Consider reserved discount and longer end date. | -## Common Questions +## Related | Question | Read next | | --- | --- | -| What simple pricing model should I understand? | [Earnings & Pricing Model](/host/earning) | -| Where do I find market price data? | [GPU Market Metrics](/host/market-metrics) | -| How do I list from the CLI? | [vastai list machine](/host/cli/list-machine) | -| How do I change the interruptible bid floor? | [vastai set min-bid](/host/cli/set-min-bid) | +| Revenue model | [Earnings & Pricing Model](/host/earning) | +| Market data | [GPU Market Metrics](/host/market-metrics) | +| CLI listing | [vastai list machine](/host/cli/list-machine) | +| Interruptible bid floor | [vastai set min-bid](/host/cli/set-min-bid) | diff --git a/host/reliability-uptime.mdx b/host/reliability-uptime.mdx index 43d9d15c..cd885b7b 100644 --- a/host/reliability-uptime.mdx +++ b/host/reliability-uptime.mdx @@ -31,7 +31,7 @@ Reliability greater than 0.9 is a self-test and verification gate. If the machin The gate exists so machines that have not been online for a sufficient amount of time are not put through verification testing. Above the gate, higher reliability can make verification more likely because the automated process has more confidence in the machine. Sustained instability after verification can cause a verified machine to be deverified. -Do not use `--ignore-requirements` as a verification shortcut. It is only useful for dogfooding or runtime validation, and the machine still needs enough direct ports for the runtime test to work. +Do not use `--ignore-requirements` as a verification shortcut. It is only useful for advanced runtime validation, and the machine still needs enough direct ports for the runtime test to work. ## Will restarting lower reliability or remove verification? diff --git a/host/self-test-reference.mdx b/host/self-test-reference.mdx index 54136701..5377e494 100644 --- a/host/self-test-reference.mdx +++ b/host/self-test-reference.mdx @@ -17,7 +17,7 @@ Use this reference to look up self-test failures, understand what they usually m [Glossary: vericode](/host/glossary#vericode) -[vericode=8](/host/glossary#vericode) is a platform-detected direct-port or connectivity problem. Common causes include closed external ports, forwarding to the wrong LAN IP, CGNAT or no inbound public IP, firewall rules, asymmetric protocol handling, or a stale port range. +[vericode=8](/host/glossary#vericode) is a platform-detected direct-port or connectivity problem. Common causes include closed external ports, forwarding to the wrong LAN IP, CGNAT or double NAT without a real public forwarding path, no inbound public IP, firewall rules, TCP/UDP mismatch, asymmetric protocol handling, or a stale port range. Test the public IP:port if available, verify router and host firewall rules, then rerun the self-test after fixing the network path. See [Network & Ports](/host/network-ports) for the full connectivity checklist. @@ -36,7 +36,7 @@ Other likely causes include container startup failure, Docker/NVIDIA runtime sta ## Machine not found or not rentable -This can mean the machine is already rented, has zero active on-demand offers, is offline or unlisted, is not visible to the account running the test, is deverified or below a threshold, or has offer-side error metadata. +This can mean the machine is already rented in a way that hides the expected offer, has zero active on-demand offers, is offline or unlisted, is not visible to the account running the test, is deverified or below a threshold, or has offer-side error metadata. Start with: @@ -44,12 +44,13 @@ Start with: 2. Confirm the machine is listed, online, not currently rented, and has active offers. 3. Check reliability, verification state, red machine errors, and missing details such as ports, RAM, upload speed, and download speed. 4. Confirm the CLI is authenticated to the same host-enabled account. -5. If the console state looks wrong after refresh and rerun, collect logs and escalate to support. +5. Search directly for the machine ID; see [Why Isn't My Machine in Search?](/host/not-in-search#check-machine-listed). +6. If the console state looks wrong after refresh and rerun, collect logs and escalate to support. ## Which warnings can be ignored? -Avoid ignoring warnings by default. One clear self-test advisory is that mapping more than 64 direct ports per listed GPU is usually unnecessary and is not a self-test gate. Red machine errors, self-test failures, NVML/Xid errors, port networking issues, and not-visible/rentable states should be investigated. +Avoid ignoring warnings by default. One clear self-test advisory is that mapping more than the minimum number of direct ports per GPU is not itself a self-test gate. For production hosting, about 100 forwarded TCP/UDP ports per listed GPU is still practical headroom because individual instances can use many ports and old mappings may overlap with new starts. Red machine errors, self-test failures, NVML/Xid errors, port networking issues, and not-visible/rentable states should be investigated. ## Reliability below the preflight gate diff --git a/host/storage-setup.mdx b/host/storage-setup.mdx index b27677a4..546655c2 100644 --- a/host/storage-setup.mdx +++ b/host/storage-setup.mdx @@ -10,56 +10,123 @@ personas:
Pro OperatorHeadless / DC
-Set up Docker storage, disks, filesystems, and mounts so rented workloads have stable fast storage. +Vast uses Docker storage for renter data. Put `/var/lib/docker` on fast SSD/NVMe storage with XFS project quotas. + + +Formatting a disk or LVM volume destroys data. Identify the OS disk and any provider data mount before running `mkfs`. +
-## How should I set up Docker storage? +## Docker Storage Layout + +Current listing guidance expects at least 128 GB of fast SSD storage per GPU. Docker storage should: + +- Be on the intended data disk, not accidentally on the OS disk. +- Mount predictably at boot before Docker and the host daemon start. +- Use XFS with `pquota` or `prjquota`. +- Have enough capacity for active rentals, stopped instances, cached images, and any volume offers. + +Inspect first: + +```bash +lsblk -f +findmnt / +findmnt /data0 || true +findmnt /var/lib/docker || true +df -h / +``` -Use fast SSD/NVMe storage mounted predictably for Docker and Vast workloads. Current listing guidance expects at least 128 GB of fast SSD storage per GPU. Keep Docker storage on the intended data disk, not accidentally on the OS disk, and use stable mounts so Docker and the host daemon start after the storage is available. +Back up `/etc/fstab` before editing mounts: + +```bash +sudo cp /etc/fstab /etc/fstab.pre-vast-docker.$(date -u +%Y%m%d%H%M%S) +``` + + +## Disposable Device Example + +Use this only after you have confirmed the target partition, RAID device, or LVM volume is safe to dedicate to Docker. + +```bash +export VAST_DOCKER_DEVICE=/dev/mapper/vg1-lv--1 +lsblk -f "$VAST_DOCKER_DEVICE" +findmnt -S "$VAST_DOCKER_DEVICE" || true +if findmnt -S "$VAST_DOCKER_DEVICE" >/dev/null; then + sudo umount "$VAST_DOCKER_DEVICE" +fi +sudo mkfs.xfs -f "$VAST_DOCKER_DEVICE" +sudo mkdir -p /var/lib/docker +sudo blkid "$VAST_DOCKER_DEVICE" +``` + +Comment out any old `/data0` line for the same device, add the `/var/lib/docker` fstab line, then mount: + +```bash +sudo mount -a +findmnt /var/lib/docker -no SOURCE,FSTYPE,OPTIONS +sudo xfs_quota -x -c "state" /var/lib/docker +``` + +If you are starting from a raw disk, create a partition first. The [Headless Install Path](/host/headless-install) includes a `cfdisk` example. -## Example fstab line for one NVMe or SSD +## Example fstab Line -For a normal single NVMe or SSD mounted for Docker storage, use the disk UUID rather than a device name like `/dev/nvme0n1p1`, because device names can change between boots. Example `/etc/fstab` entry: +Use the disk UUID, not a device name like `/dev/nvme0n1p1`: ```text UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 /var/lib/docker xfs rw,auto,pquota,nofail 0 0 ``` -Replace the UUID with the value from `blkid` for your XFS-formatted partition. The important pieces are `/var/lib/docker`, `xfs`, and `pquota` project quota support. After editing `/etc/fstab`, run `sudo mount -a`; if it reports an error, fix the fstab entry before rebooting. +After editing: + +```bash +sudo mount -a +findmnt /var/lib/docker -no SOURCE,FSTYPE,OPTIONS +sudo xfs_quota -x -c "state" /var/lib/docker +``` + +The mount should be XFS, include `pquota` or `prjquota`, and show project quota accounting/enforcement as ON. -## Is XFS with project quotas required? +## XFS Project Quotas -Yes. Vast uses XFS project quotas to enforce per-container storage quotas. Put Docker's data root on an XFS filesystem mounted with project quota support. +Yes, XFS project quotas are required. Vast uses them for per-container storage quotas. -Do not fix quota errors by removing Docker storage quota configuration. If Docker reports a quota or pquota error, fix the filesystem and mount layout instead. +Do not work around quota errors by removing Docker quota settings. Fix the filesystem and mount instead. -## How should I choose single NVMe vs RAID/NVMe? +## Single NVMe vs RAID -For one NVMe, use a stable mount with enough capacity and performance for Docker and rented workloads. For multiple NVMes, RAID0 can increase capacity and throughput, but it also increases the failure domain because one failed drive can break the array. Choose the layout based on reliability goals, monitor drive health, and make sure the mount is available before Docker and the host daemon start. +One NVMe is simplest. Multiple NVMes in RAID0 can improve capacity and throughput, but one failed drive can break the array. Pick the layout that matches your reliability goals and monitor drive health. -## What causes the Docker pquota storage error? +## Docker pquota Error -The error `--storage-opt is supported only for overlay over xfs with pquota` means Docker is being asked to use per-container storage quotas on a backing filesystem that is not mounted as XFS with project quota support. +`--storage-opt is supported only for overlay over xfs with pquota` means Docker storage is not on XFS with project quotas. -Move Docker's data root to a correctly mounted XFS filesystem with project quotas, then restart Docker and the host software after verifying the mount. Back up or confirm the target disk before formatting or moving Docker data. Do not disable storage quota enforcement as a workaround. +Move Docker's data root to a correctly mounted XFS filesystem, verify quotas, then restart Docker and the host software. -## Volume offers and host disk +## Installer Connection -Space allocated to rented volume offers is subtracted from the storage available to GPU offers. For how volume offers interact with available disk, see [Hosting Overview](/host/hosting-overview#volume-offers). +The Host Installer Wizard should detect prepared Docker storage. If you use the [headless fallback installer](/host/installing-host-software#headless-fallback), pass the block device behind the Docker mount: - -## Does Vast redownload images that were already used on my machine? +```bash +sudo python3 ./install "$VAST_HOST_KEY" \ + --no-driver \ + --docker-partition /dev/mapper/vg1-lv--1 \ + --ports 40000 40799 +``` + +Fix ext4, missing quotas, or wrong-device mounts before installing. + +## Volume Offers And Cached Images -Prior images are cached on the host when possible. If a renter uses an image that is already present on the machine, the system can reuse the cached image instead of downloading it again. +Rented volume space reduces storage available to GPU offers. Cached images can be reused when possible instead of redownloaded. -## Related pages +For volume behavior, see [Hosting Overview](/host/hosting-overview#volume-offers). + + +## Does Vast redownload images that were already used? -| Topic | Read next | -| --- | --- | -| Hardware minimums | [Supported Hardware](/host/supported-hardware#storage) | -| Pre-install checklist | [Hardware Prep](/host/hardware-prep#install-prerequisites) | -| Install failures | [Installing Host Software](/host/installing-host-software#install-failures) | +Prior images are cached when possible. If a renter uses an image already present on the machine, the system can reuse it. diff --git a/host/supported-hardware.mdx b/host/supported-hardware.mdx index a03cb38a..5019b53d 100644 --- a/host/supported-hardware.mdx +++ b/host/supported-hardware.mdx @@ -10,121 +10,74 @@ personas:
HobbyistBusiness
-Use this page before buying hardware, installing the host software, or listing a machine. A machine can be technically listable and still be a poor fit if it cannot pass self-test, cannot receive inbound connections, or is not attractive to renters. +Use this page before buying hardware, installing the host software, or listing a machine. -Passing the minimum requirements makes a machine eligible for verification. It does not guarantee verification, search placement, rentals, or earnings. +Meeting minimum requirements makes a machine eligible. It does not guarantee verification, search placement, rentals, or earnings. ## Quick Check -For a normal Vast host, plan on: +A typical Vast host needs: -- A dedicated native Ubuntu/Linux machine. -- Same-type GPUs in the machine. -- A supported NVIDIA GPU, or one of the AMD GPU families listed below. -- More than 7 GiB VRAM per GPU for self-test. -- An AVX-capable CPU. -- At least one physical CPU core per visible/listed GPU. -- Enough system RAM for the listed GPUs. +- Native Ubuntu/Linux on x86_64/AMD64 hardware. +- Same-type GPUs. +- Supported NVIDIA GPUs, or the AMD families listed below. +- More than 7 GiB VRAM per GPU. +- AVX-capable CPU. +- At least one physical CPU core per visible/listed GPU. Hyperthreads do not count. +- Enough system RAM for the GPU tier. - Fast SSD/NVMe storage, with at least 128 GB per GPU as a listing baseline. -- Stable public networking with direct inbound port forwarding. - -If any of those are uncertain, check them before spending money on hardware. +- Public inbound networking with direct TCP and UDP port forwarding. ## GPU Support -Current listing guidance includes: - -| Vendor | Current guidance | +| Vendor | Guidance | | --- | --- | -| NVIDIA | 10-series NVIDIA GPUs or newer. Older GPUs may depend on self-test image compatibility and are usually less attractive to renters. Higher-demand datacenter, workstation, and recent consumer GPUs are more likely to be useful. | -| AMD | MI25 or newer Radeon Instinct, Radeon VII, Radeon Pro VII, Radeon RX 7900 GRE/XT/XTX, and Radeon Pro W7900/W7800. Other 6000-series or newer Radeon RX/Pro W GPUs may work, but may not be searchable with standard AMD ROCm filters. | +| NVIDIA | 10-series or newer. Newer datacenter, workstation, and recent consumer GPUs are more attractive to renters. | +| AMD | MI25 or newer Radeon Instinct, Radeon VII, Radeon Pro VII, Radeon RX 7900 GRE/XT/XTX, and Radeon Pro W7900/W7800. Other 6000-series or newer Radeon RX/Pro W GPUs may work, but may not appear in standard ROCm filters. | -All GPUs in the machine should be the same type. Avoid mixed GPU models in one listed machine unless Vast explicitly documents support for that setup. +Avoid mixed GPU models unless Vast explicitly documents support for that setup. -Newer GPU models are added as they come online. If a new model is not yet listed or searchable, ask Vast to add it through support or the [host community channels](/host/community). +If a new GPU model is not listed or searchable yet, ask Vast to add it through support or the [host community channels](/host/community). ## Minimum Listing Baseline -These are baseline expectations for listing a machine: - | Area | Baseline | | --- | --- | -| Operating system | Ubuntu 24.04 LTS is preferred for new installs. Ubuntu 22.04 also works. See [Ubuntu versions](/host/hardware-prep#ubuntu-versions). | -| Machine use | Dedicated host machine. Do not use the same machine for unrelated workloads while it is rented. | -| GPU type | Supported same-type GPUs. | -| CPU | AVX-capable CPU. At least one physical CPU core per listed GPU. Hyperthreads and logical CPUs do not count as physical cores. CPUs without hyperthreading are fine. | -| System RAM | At least 4 GB system RAM per GPU as a listing baseline. Self-test can require much more, especially on high-VRAM machines. | -| Storage | Fast SSD/NVMe storage with at least 128 GB per GPU. | -| PCIe | At least 1x PCIe for every 2.5 TFLOPS of GPU performance. Avoid riser, lane, power, or BIOS layouts that throttle GPUs. | -| Network | Fast, reliable internet and an open direct port range mapped to the machine for both TCP and UDP. | - -## Verification And Self-Test Requirements - -Verification adds stricter checks on top of the listing baseline: CUDA driver/runtime support, a reliability eligibility gate, direct ports per GPU, PCIe bandwidth, internet bandwidth that scales with total VRAM, per-GPU VRAM, system RAM, and runtime CPU-core checks. - -The canonical, current thresholds live in [Verification Stages: requirements](/host/verification-stages#additional-requirements-for-verification). For the operational steps, see [How to Self-Test](/host/how-to-self-test) and [Understanding Verification](/host/understanding-verification). - -## CPU, RAM, And Balance - -Do not size the rest of the machine as an afterthought. A high-end GPU host with weak CPU, low RAM, poor PCIe layout, slow storage, or unstable networking is less likely to pass verification or deliver good renter experience. - -Use these rules of thumb: +| OS | Ubuntu 24.04 LTS preferred; Ubuntu 22.04 also works. | +| Machine use | Dedicated host machine while rented. | +| CPU | AVX-capable, with at least one physical core per listed GPU. | +| System RAM | At least 4 GB per GPU as a listing baseline; high-VRAM GPUs may need more. | +| Storage | Fast SSD/NVMe, at least 128 GB per GPU. | +| PCIe | Enough lanes/bandwidth for the GPUs; avoid unstable risers, power, and BIOS layouts. | +| Network | Reliable public inbound connectivity for the configured port range. | -- Count physical CPU cores, not vCPUs or hyperthreads. -- Match CPU, RAM, PCIe, storage, and network capacity to the GPU tier. -- Keep enough system RAM for CPU-side staging and self-test. -- Avoid reducing GPU count, RAM, disk, or other capacity after a machine has been created; reductions can trigger deverification. +For current verification thresholds, see [Verification Stages](/host/verification-stages#additional-requirements-for-verification). -## Storage +## Balance Matters -Use fast SSD/NVMe storage mounted predictably before Docker and the host daemon start. +A strong GPU can still be a poor host if the rest of the machine is weak. Match CPU, RAM, PCIe, storage, cooling, power, and network capacity to the GPU tier. -For Docker storage quotas, Vast uses XFS with project quota support. Storage problems often appear later as install failures, Docker quota errors, self-test failures, or poor renter performance. See [Storage Setup](/host/storage-setup). +Avoid reducing GPU count, RAM, disk, or other capacity after the machine is created; reductions can trigger deverification. -## Network +## Storage And Network -Vast hosts need inbound public connectivity to mapped ports. Residential networking can work, but only if the router, firewall, ISP, and public IP path allow direct inbound connections. +Docker storage should be fast, predictable, and mounted before Docker starts. Vast uses XFS project quotas for per-container storage limits. See [Storage Setup](/host/storage-setup). -Avoid hosting from networks with: - -- CGNAT or no public inbound IPv4 path. -- IPv6-only service without compatible inbound reachability. -- Port forwarding that only works from inside the LAN. -- Frequent packet loss, disconnects, or unstable upload. - -See [Network & Ports](/host/network-ports) before listing. +Hosts also need public inbound connectivity. CGNAT, double NAT without a real public forwarding path, blocked ports, IPv6-only service, LAN-only port forwarding, packet loss, or unstable upload can prevent listing, self-test, or rentals. See [Network & Ports](/host/network-ports). ## Unsupported Or Discouraged Setups -Avoid these setups unless Vast explicitly documents support for your exact configuration: - -| Setup | Why to avoid it | +| Setup | Why | | --- | --- | -| Windows as the host OS | Vast hosting is built around native Linux hosting. WSL can be useful for running the CLI from a client machine, but it is not the supported host operating system. | -| ARM or GB10-class systems | Current host requirements include AVX-capable CPUs and the normal host path should be treated as native Ubuntu/Linux on x86_64/AMD64 hardware unless Vast documents a specific ARM host path. | -| Mixed GPU models | All GPUs on the machine should be the same type. Mixed cards complicate offers, verification, and renter expectations. | -| Low-VRAM or very old GPUs | The self-test requires more than 7 GiB VRAM per GPU, and low-demand hardware may not earn enough to justify hosting. | -| Gaming or workstation use during rentals | Rented machines should be dedicated. Local gaming, mining, display workloads, or background GPU jobs can disrupt renters and self-test. | -| No public inbound networking | Machines behind CGNAT, blocked ports, or unstable residential links often fail connectivity checks. | - -## VM Support - -VM support is optional, but it can affect search visibility and demand for some renters. VM support depends on CPU, chipset, BIOS, IOMMU, kernel, and GPU behavior. It is automatically tested by the host software when applicable. - -See [VMs & IOMMU](/host/vms) before buying hardware specifically for VM workloads. +| Windows or WSL as the host OS | Vast hosting is built for native Linux hosts. | +| ARM or GB10-class systems | Current host requirements assume AVX-capable x86_64/AMD64 hardware unless Vast documents an ARM path. | +| Mixed GPU models | Complicates offers, verification, and renter expectations. | +| Low-VRAM or very old GPUs | Self-test requires more than 7 GiB VRAM; demand may also be weak. | +| Gaming/workstation use during rentals | Rented machines should be dedicated. | +| No public inbound networking | Connectivity checks and renter access can fail. | ## Before You Buy -Before buying or repurposing hardware: - -1. Check the GPU model and VRAM against this page. -2. Confirm the CPU supports AVX and has enough physical cores. -3. Confirm the motherboard, risers, slots, and BIOS can provide enough PCIe bandwidth. -4. Confirm you can run native Ubuntu/Linux and stable GPU drivers. -5. Confirm you have fast SSD/NVMe storage. -6. Confirm your network has a public inbound path and enough direct ports. -7. Check [GPU Market Metrics](/host/market-metrics) and similar listings before assuming earnings. - -After the machine is ready, continue with [Hosting Quickstart](/host/quickstart). +Confirm GPU demand with [GPU Market Metrics](/host/market-metrics), then verify CPU, RAM, PCIe, storage, and networking before spending money. After hardware is ready, continue with [Hosting Quickstart](/host/quickstart). diff --git a/host/understanding-verification.mdx b/host/understanding-verification.mdx index 95120974..e3f40ab3 100644 --- a/host/understanding-verification.mdx +++ b/host/understanding-verification.mdx @@ -16,137 +16,62 @@ personas:
## How Verification Works -Verification is fully automated. Proprietary algorithms continuously evaluate each machine's operational health and performance, dynamically adjusting assessments based on real-time **supply and demand**. - -Only machines that meet the platform's defined reliability and performance thresholds are eligible for verification. - -To qualify, a machine must pass [minimum baseline](/host/how-to-self-test), and health/stability checks. Beyond that, the system evaluates four primary criteria (order not indicative of priority): +Verification is automated. A machine becomes eligible when it passes self-test and meets reliability, performance, hardware, network, and marketplace gates. -**Note:** Meeting the minimum requirements makes your machine eligible for verification, but it does not guarantee that verification will occur immediately. The final verification outcome still depends on the factors listed below. +Eligibility does not guarantee immediate verification, search placement, or rentals. -## 1) Reliability - -**Definition:** Stable, uninterrupted operation over time (uptime, resilience under continuous workloads). - -**How it affects verification:** A machine enters the verification pool when reliability is greater than 0.9. Machines at or below the gate are not eligible for verification. Above the gate, higher reliability can improve the chance of verification, and sustained instability after verification can cause a machine to be deverified. - -**Do** - -- Maintain consistent uptime with minimal downtime. -- Keep network connectivity stable; avoid jitter and drops. -- Manage thermals and power to prevent throttling. -- Proactively monitor hardware health and perform maintenance. - -**Avoid** - -- Frequent restarts or unplanned outages. -- Overheating, undervolting, or unstable power delivery. - ---- - -## 2) Infrastructure Configuration - -**Definition:** Hardware, network, and software readiness to meet operational standards. - -### Hardware - -- **GPU:** Type, memory, and count matter. Newer datacenter/workstation GPUs are prioritized (e.g., B200 > H200 >> 5090 > 4070). -- **VRAM:** More VRAM improves performance profiles. -- **GPU Count:** For the same GPU type, more GPUs increase verification likelihood (e.g., 8×5090 >> 2×5090 > 1×5090). -- **PCIe Bandwidth:** Adequate throughput is essential; bottlenecks depress DLPerf and overall performance. -- **CPU:** Favor strong, server-grade CPUs; actual measured performance matters. -- **Storage:** Both capacity and bandwidth (e.g., NVMe) impact responsiveness and reliability. - -### Network - -- High-speed, symmetric, stable bandwidth is favored. -- Ensure required ports are open and accessible; a static IP helps. - -### Virtualization - -- Enabling VM support significantly improves verification likelihood. - -### Software - -- Drivers/CUDA must be correctly installed and compatible (use stable **latest** releases). -- Keep systems clean; run workloads via Create Job only. +Verification is not permanent. Automation can move machines between Unverified, Verified, and Deverified as reliability, health, performance, network reachability, and marketplace conditions change. -### System Optimization & Upgrades +## Main Factors -- Balanced scaling matters (CPU/RAM/PCIe/bandwidth commensurate with GPU tier). -- Do not reduce hardware after creation (e.g., fewer GPUs/RAM) - this will trigger Deverified. -- Upgrades (adding GPUs/RAM) are allowed but may take time to reflect across the platform. - -**Do** - -- Verify GPU PCIe connections provide full bandwidth and are not throttled. -- Keep the latest drivers/CUDA aligned with workloads. -- Confirm required ports and end-to-end reachability. - -**Avoid** - -- Pairing high-end GPUs with under-provisioned CPU/RAM. -- Letting hidden background services consume resources. - ---- - -## 3) DLPerf Score - -**Definition:** Estimated GPU performance on typical deep-learning tasks (e.g., CNN/Transformer training) for cross-hardware comparison. Higher DLPerf improves verification odds. [Read more](/guides/reference/faq/rental-types#dlperf-scoring) - -**Do** - -- Use the **latest** compatible drivers/CUDA. -- Eliminate PCIe, thermal, and power bottlenecks to maintain sustained clocks. - -**Avoid** - -- Misconfigurations that suppress benchmark performance. - ---- +| Factor | What matters | +| --- | --- | +| Reliability | The machine enters the verification pool when reliability is greater than 0.9. Higher reliability improves confidence. | +| Hardware balance | GPU model/count, VRAM, CPU, RAM, PCIe bandwidth, storage, and network should match the GPU tier. | +| Network | Stable bandwidth and reachable direct ports. | +| Software | Compatible NVIDIA/AMD driver stack, CUDA/runtime health, Docker/GPU runtime health, and a clean host. | +| DLPerf | Sustained real-world GPU throughput; PCIe, thermals, power, and drivers can affect it. | +| VM support | Optional, but can improve fit for some renter searches when enabled and supported. | +| Marketplace demand | In-demand GPUs, strong reliability, enough VRAM, and good network/location are more likely to be prioritized. | -## 4) Supply & Demand Analysis - -**Definition:** Ongoing evaluation of market trends and renter behavior to surface configurations most likely to be rented. - -**Implication:** Machines aligned with active renter preferences-popular GPUs, sufficient VRAM, strong reliability, fast internet-are prioritized for verification to maximize utilization and profitability. +## Supply And Demand -**Do** +Verification also considers renter demand and available supply. A healthy machine can wait if demand for that configuration is low, while scarce or high-demand configurations may be prioritized. -- Offer in-demand GPU models with adequate VRAM and balanced resources. -- Maintain strong reliability to remain attractive once listed. +To improve fit: -**Avoid** - -- Niche/mismatched configurations with low renter interest. - ---- +- Use in-demand GPU models. +- Keep reliability high. +- Avoid under-provisioned CPU, RAM, PCIe, storage, or bandwidth. +- Enable VM support only when the machine supports it cleanly. +- Keep the system dedicated to Vast workloads. ## How Long Can Verification Take? -Passing self-test makes a machine eligible, but it does not guarantee immediate verification. Timing depends on automated checks, reliability, machine health, supply and demand, and platform policy. Support can help with account or backend anomalies, but ordinary host verification should not be treated as a manual support queue. +There is no fixed timeline. Passing self-test makes the machine eligible, but timing depends on automated checks, reliability, machine health, supply, demand, and platform policy. -## Can support verify my machine? +## Can Support Verify My Machine? -No. Verification is automated and does not require manual intervention. Support can help with account issues or backend anomalies, but ordinary verification should not be treated as a manual request queue. For most hosts, the useful action is to keep the machine healthy, eligible, and competitively listed while the automated process evaluates demand and readiness. +No. Support can help with account issues or backend anomalies, but ordinary verification is not a manual support queue. Keep the machine healthy, eligible, and competitively listed while automation evaluates it. ---- +## Avoid -## Quick Reference - -| **Category** | **What Matters Most** | **How to Improve** | -|---------------|------------------------|--------------------| -| Reliability | Staying above the 0.9 eligibility gate; higher reliability improves confidence | Proactive monitoring; steady power/thermals; minimize restarts | -| Network | Symmetric, stable bandwidth; open ports | Upgrade links; verify routing/ports; monitor jitter/loss | -| Hardware | Modern GPUs/CPUs; adequate PCIe & RAM | Favor DC/workstation GPUs; ensure PCIe lanes; match CPU/RAM to GPU tier | -| Storage | Throughput and reliability | Prefer NVMe; monitor SMART; ensure sustained bandwidth | -| Virtualization | VM capability enabled | Enable in BIOS; enable IOMMU. | -| Software | Correct drivers/CUDA; clean system | Install latest, stable, compatible versions; use Create Job only | -| DLPerf | High real-world throughput | Fix PCIe/thermal bottlenecks; maintain clocks; correct drivers | -| Supply & Demand | Alignment with renter needs | Choose popular GPUs/VRAM; balance specs; maintain reliability | -| Upgrades | Changes reflected by platform | Scale up (add GPUs/RAM); avoid reductions that cause Deverified | +- Frequent restarts or unplanned outages. +- Closed ports, packet loss, or unstable upload. +- Thermal, power, PCIe, or driver instability. +- Background workloads outside Vast jobs/rentals. +- Reducing GPU count, RAM, disk, or other capacity after machine creation. + +## Read Next + +| Topic | Page | +| --- | --- | +| Exact requirements | [Verification Stages](/host/verification-stages#additional-requirements-for-verification) | +| Run diagnostics | [How to Self-Test](/host/how-to-self-test) | +| Reliability | [Reliability & Uptime](/host/reliability-uptime) | +| Market fit | [GPU Market Metrics](/host/market-metrics) | diff --git a/host/verification-stages.mdx b/host/verification-stages.mdx index dc6058e1..ce23ac83 100644 --- a/host/verification-stages.mdx +++ b/host/verification-stages.mdx @@ -13,137 +13,104 @@ personas:
All host personas
-## States & Lifecycle +Verification is automated. There is no manual review step for ordinary host verification. -**States:** Unverified → Verified → (potentially) Deverified → Unverified → ... +## Lifecycle -**Lifecycle:** Machines automatically move between these states based on performance and reliability factors. Once verified, a machine will remain verified unless issues arise, such as failing health checks or reliability standards, which could lead to deverification. +Machines move between: ---- - -## How It Works - -Verification is fully automated and incorporates [supply-and-demand](/host/understanding-verification#supply-demand) dynamics. There is no manual step required for ordinary host verification. - -Only machines that meet the platform's reliability and [performance thresholds](/host/how-to-self-test) are eligible for verification. - ---- - -## Host Responsibilities (Always) - -- Keep systems stable, well-cooled, and correctly configured. -- Maintain compatible drivers/CUDA and dependable, symmetric networking. -- Run jobs only through the Jobs tab or the `create job` CLI command. -- When issues arise, fix them promptly-the automation will update status. - ---- - -## State Details & Guidance +```text +Unverified -> Verified -> Deverified -> Unverified +``` -### Unverified +Automation evaluates reliability, performance, hardware, network, and current marketplace demand. -**What it means:** Newly added machines or machines under evaluation. The system hasn't yet completed enough testing to confirm platform standards. This is not a judgment of quality-only that no platform guarantee exists yet. +## Listing Minimums -**Do** -- [Pass the Self-Test](/host/how-to-self-test) -- Maintain steady uptime during evaluation. -- Ensure drivers/CUDA and networking are correctly installed and reachable. -- Keep the environment clean; schedule work via Create Job only. +To be listed, a machine should meet these baselines: -**Avoid** -- Unnecessary reboots or configuration changes. -- Unrelated background workloads that consume GPU/CPU/IO. +```text +- Ubuntu 24.04 LTS preferred; Ubuntu 22.04 LTS also works +- Dedicated machine while rented +- Fast, reliable internet: at least 10 Mbps per machine +- Supported same-type GPUs +- At least 1 physical CPU core per GPU +- AVX-capable CPU +- At least 4 GB system RAM per GPU +- Fast SSD storage with at least 128 GB per GPU +- Sufficient PCIe bandwidth +- Open port range mapped to the machine +``` ---- +For hardware detail, see [Supported Hardware](/host/supported-hardware). -### Minimum Guidelines for Listing on Vast.ai +
+## Verification Requirements -In order to be listed on Vast.ai, the machine must follow these minimum guidelines: +To enter the verification pool, the machine must also meet current self-test and platform gates: -```text Text -- Ubuntu 24.04 LTS preferred; Ubuntu 22.04 LTS also works -- Dedicated machines only - the machine shouldn't be doing other stuff while rented -- Fast, reliable internet: at least 10Mbps per machine. -- 10-series Nvidia GPU or MI25 or newer Radeon Instinct series GPU or Radeon VII or Radeon Pro VII or Radeon RX 7900 (GRE/XT/XTX); or Radeon Pro W7900/W7800. Other 6000 series or newer Radeon RX/Pro W series GPUs may be supported; but may not be searchable using standard filters for AMD ROCm. -- At least 1 physical CPU core per GPU. Hyperthreads/logical CPUs do not count as physical cores, and CPUs without hyperthreading are fine. -- Your CPU must support AVX instruction set (not all lower end CPUs support this). -- At least 4 GB of system RAM per GPU. -- Fast SSD storage with at least 128GB per GPU. -- At least 1X PCIe for every 2.5 TFLOPS of GPU performance. -- All GPUs on the machine must be of the same type. -- An open port range mapped to each machine. +```text +- CUDA version >= 11.8 +- Reliability > 0.9 +- At least 3 direct ports per GPU, forwarded for both TCP and UDP +- PCIe bandwidth > 2.85 GB/s +- Download and upload bandwidth scale with total VRAM +- GPU RAM > 7 GB per GPU +- System RAM at least 95% of total GPU VRAM, capped around 2 TB for very high-VRAM machines +- Passing self-test ``` ---- -### Additional Requirements for Verification +Bandwidth thresholds scale at about 2.6 Mbps per GiB of total VRAM, with a 100 Mbps floor and 500 Mbps ceiling. -In order for your unverified machine to be verified, it must also meet the following minimum requirements: +Reliability greater than 0.9 is the verification gate. Higher reliability improves confidence and can improve verification likelihood. See [Reliability & Uptime](/host/reliability-uptime#reliability-threshold). -```text Text -- CUDA version greater than or equal to 11.8 -- Reliability greater than 0.9 -- At least 3 open direct ports per GPU, forwarded for both TCP and UDP -- Internet Download speed must scale with total machine VRAM at ~2.6 Mbps per GiB, with a 100 Mbps floor and 500 Mbps ceiling -- Internet Upload speed must scale with total machine VRAM at ~2.6 Mbps per GiB, with a 100 Mbps floor and 500 Mbps ceiling -- GPU RAM greater than 7 GB -- System RAM close to total GPU VRAM, capped around 2 TB for very high-VRAM machines -- Passing the Self-Test -``` + +Meeting requirements makes the machine eligible. It does not guarantee immediate verification, search placement, or rentals. + -The reliability gate exists so machines that have not been online for a sufficient amount of time are not tested. A machine enters the verification pool when reliability is greater than 0.9, and higher reliability improves confidence — see [Reliability & Uptime](/host/reliability-uptime#reliability-threshold). For port sizing beyond the minimum (per-instance limits and useful ceilings), see [Network & Ports](/host/network-ports#ports-per-gpu). +## Unverified -This list is the canonical home for verification requirements — other pages link here rather than restating the thresholds. -> **Note:** High-end GPUs are more likely to be verified. Machines with datacenter GPUs such as B200, H200, H100, A100, etc., and those with premium GPUs such as RTX PRO 6000 WS, 8xRTX 5090, 8xRTX 4090, etc., receive prioritized verification processing due to their high demand and performance capabilities. - -**Tip:** Meeting these minimum requirements makes your machine eligible for verification, but does not automatically guarantee verification. [Read More about Verification](/host/understanding-verification) - ---- +Unverified means the machine is new, under evaluation, or not currently meeting verification conditions. +Do: -### Verified +- Pass [self-test](/host/how-to-self-test). +- Keep uptime stable. +- Fix driver, network, storage, and daemon errors. +- Avoid background workloads outside the Jobs tab or `create job`. -**What it means:** The machine passed automated checks for reliability, network stability, operational health, and performance. A Verified machine consistently delivers server services to platform standards. +Avoid unnecessary reboots or hardware/config changes during evaluation. -**Do** -- Monitor health (uptime, thermals, power) and respond to alerts. -- Keep drivers/CUDA on compatible, **latest** stable versions. -- Maintain stable, symmetric bandwidth. +## Verified -**Avoid** -- Downgrading hardware capacity (e.g., reducing GPU count, disk or RAM). -- Allowing thermal, power, or bandwidth instability under load. - ---- +Verified means the machine passed automated checks and currently meets platform standards. -### Deverified +Keep it verified by: -**What it means:** -A previously Verified machine no longer meets requirements. System continuous monitoring detects sustained degradation. +- Monitoring thermals, power, drivers, Docker, and daemon health. +- Keeping networking stable and reachable. +- Avoiding hardware reductions after the machine is created. +- Responding quickly to red machine errors. -**When will deverification happen?** -- When the hosting software detects an error, your machine is automatically, but **temporarily**, deverified. It will appear as *Unverified* in search results until the underlying issue is resolved. +## Deverified -**How should I begin fixing it?** -- A **red error indicator** will appear on your machine in the Machines tab. Use this message to identify and investigate the issue in your logs or metrics. +Deverified means a previously verified machine no longer meets requirements. It appears as Unverified until the issue clears. -**Recovery:** -Fix the issue and restore stability; the system will **automatically** transition back to Verified once system confirms healthy operation. -This process may take some time, as the system ensures that the issue is fully resolved before restoring verification. Most error messages are cleared within 1-2 hours of resolution. +Common causes: -**Common causes** - Network instability, closed ports, or low bandwidth. -- Hardware/system errors (e.g., failing storage, insufficient PCIe bandwidth). -- GPU issues (e.g., nvidia-smi/NVML failures, container device init errors). -- Container launch failures or repeated runtime exceptions. -- Detected abuse or policy violations. +- GPU, NVML, Xid, PCIe, power, thermal, or storage errors. +- Container launch failures. +- Reliability dropping to or below the gate. +- Policy or abuse-related flags. -**Do** -- Investigate red error indicators quickly; review logs and metrics. -- Validate thermal/power headroom and bandwidth under load. -- Re-check health after changes to confirm resolution. +Fix the underlying issue and wait for automation to refresh state. Most machine error states clear only after the platform sees sustained healthy behavior. -**Avoid** -- Ignoring warnings or allowing instability to persist. -- Reducing hardware below the created specification. +## Read Next -> **Note:** If you’ve fixed the issue but the system doesn’t automatically detect the resolution, wait for the platform to refresh state and collect diagnostics if the machine still looks wrong. Support can help with account or backend anomalies, but verification itself is automated. +| Topic | Page | +| --- | --- | +| What verification means | [Understanding Verification](/host/understanding-verification) | +| Running self-test | [How to Self-Test](/host/how-to-self-test) | +| Generated self-test checks | [Self-Test Reference](/host/self-test-reference) | +| Direct ports | [Network & Ports](/host/network-ports) | diff --git a/host/vms.mdx b/host/vms.mdx index 627568ea..79da5b38 100644 --- a/host/vms.mdx +++ b/host/vms.mdx @@ -10,108 +10,89 @@ personas:
Pro OperatorHeadless / DC
+Vast can run KVM virtual machines in addition to Docker containers. VM support is optional and depends heavily on hardware, BIOS, kernel, and GPU configuration. + -**WARNING:** -VMs interface much more directly with hardware than Docker containers. -Proper VM support is very sensitive to hardware setup. -This guide covers the configuration steps needed to enable support for Vast VMs on most setups, but is not and cannot be exhaustive. +VMs interact more directly with hardware than containers. Enable them only when the machine supports IOMMU and remains stable. -# Introduction - -Vast now supports VM instances running on Kernel Virtual Machine (KVM) in addition to Docker container based instances. -VM support is currently an optional feature for hosts as it usually requires additional configuration steps on top of those needed to support Docker-based instances. - -Host machines are not required to be VM compatible; the Vast hosting software will automatically test and enable the feature on machines on which VMs are supported. -On new machines the tests will be run on install; for machines configured before the VM-feature release, testing for VM-compatability will happen when the machine is unoccupied. - -Machines that do not have VM support enabled will be hidden in the search page for clients who have VM-based templates selected. - -## VM Support Benefits/Drawbacks - -### Benefits - -VM support will allow your machine to take advantage of demand for use cases that Docker cannot easily support, in addition to demand for conventional Docker-based instances. - -VMs support the following features/use-cases that Docker-based instances do not: +## When VM Support Helps -| Feature | Use-case | -| --- | --- | -| Systemd/Docker | Multi-Application Server Tooling and DevOps (e.g., Docker Compose, Kubernetes, Docker Build) | -| Non-Linux OSes | Windows Graphics (e.g., for rendering or cloud gaming) | -| ptrace | Program analysis for CUDA-performance optimization (e.g., via Nvidia NSight) | - -Currently no other peer-to-peer GPU rental marketplace offers full VMs; instead full VMs are only available from traditional providers at much higher costs. -Thus we believe that hosts who have VMs enabled can expect to command a substantial premium. - -### Drawbacks - -- Due to greater user control over hardware, VM support requires IOMMU settings for securing PCIe communications that can degrade the performance of NCCL on non-RTX 40X0 multi-GPU machines that rely on PCI-based GPU peer-to-peer communication. -- VMs require more disk space than Docker containers as they do not share components with the host OS. Hosts with VMs enabled may want to set higher disk and internet bandwidth prices. +VM support can make a host visible to renters using VM templates and can help with workloads that need: -### Summary +- Systemd, Docker Compose, Kubernetes, or Docker build workflows. +- Non-Linux OS images. +- `ptrace` tooling such as NVIDIA Nsight. -We recommend all hosts with single-GPU rigs to try to ensure VM support as the drawbacks for single-GPU machines are minimal. +Single-GPU hosts usually have the lowest VM risk. Multi-GPU RTX 40-series hosts may also benefit. Multi-GPU datacenter hosts should be more cautious until VM P2P/NVLink behavior is a good fit for the workload. -We also generally recommend multi-GPU Hosts with RTX 40X0 series GPUs try enabling VMs, especially if they have plentiful disk space and fast (500Mbps+) internet speed, -as rendering/gaming users will benefit from those, as well as users who need multi-application orchestration tools. +## Tradeoffs -We do not recommend multi-GPU hosts with datacenter GPUs enable VMs until we can ensure better GPU P2P communication support in VMs, including support for NVLink. +- IOMMU settings can reduce PCIe peer-to-peer performance on some multi-GPU systems. +- VMs can use more disk than containers. +- Hosts with VM support may need higher disk and bandwidth prices. -## Configuring VMs on your machine +## Check VM Status -### Checking VM enablement status. +```bash +python3 /var/lib/vastai_kaalia/enable_vms.py check +``` -Run `python3 /var/lib/vastai_kaalia/enable_vms.py check`. +Results: -Possible results are: - -- `on`: VMs are enabled on your machine. -- `off`: VMs are disabled on your machine. Either you disabled VMs or our previous tests failed. -- `pending`: VMs are not disabled, but will try to enable once the machine is idle. - -### Disabling VMs. - -To prevent VMs from being enabled on your machine, or to disable VMs after they have been enabled, run `python3 /var/lib/vastai_kaalia/enable_vms.py off`. +| Status | Meaning | +| --- | --- | +| `on` | VM support is enabled. | +| `off` | VM support is disabled or a previous test failed. | +| `pending` | VM support will be tested when the machine is idle. | -Note that default configuration settings for most machines will not support VMs, and we can detect that, so most hosts who do not want VMs enabled do not need to take any action. +## Disable VM Support -### Configuring your machine to support VMs. +```bash +python3 /var/lib/vastai_kaalia/enable_vms.py off +``` -### Hardware prerequisites +Most hosts do not need to disable anything; unsupported machines are detected automatically. -You will require a CPU and a chipset that support Intel VT-d or AMD-Vi. +## Hardware Requirements -### Configure BIOS +VM support requires CPU/chipset support for Intel VT-d or AMD-Vi, plus BIOS virtualization support. -Check that virtualization is enabled in your BIOS. On most machines, this should be enabled by default. +In BIOS, enable virtualization and IOMMU/VT-d/AMD-Vi options. -### Configure Kernel Commandline Arguments +## Kernel Options -For further reference refer to [Preparing the IOMMU](https://ubuntu.com/server/docs/gpu-virtualization-with-qemu-kvm#preparing-the-input-output-memory-management-unit-iommu). +Edit `/etc/default/grub` and add the appropriate IOMMU option plus NVIDIA modeset disablement: -We will need to ensure IOMMU, a technology that secures and isolates communication between PCIe devices, is set up, along with disabling all driver features that interfere with VMs. +```text +GRUB_CMDLINE_LINUX="intel_iommu=on nvidia_drm.modeset=0" +``` -Open `/etc/default/grub` and add to the `GRUB_CMDLINE_LINUX=` the following: +Use `amd_iommu=on` instead of `intel_iommu=on` on AMD platforms. -- `amd_iommu=on` or `intel_iommu=on` depending on whether you have an AMD or Intel CPU. -- `nvidia_drm.modeset=0` +Some hosts may also need: -Some hosts may also need to add the following settings: +```text +rd.driver.blacklist=nouveau modprobe.blacklist=nouveau +``` -- `rd.driver.blacklist=nouveau` -- `modprobe.blacklist=nouveau` +Apply and reboot: -Then run `sudo update-grub` and reboot. +```bash +sudo update-grub +sudo reboot +``` -### Disable display managers/background GPU processes. +## Display Managers And GPU Processes -If you have a display manager (e.g., GDM) or display server (XOrg, Wayland, etc) running, you must disable them. +Disable display managers, XOrg/Wayland sessions, and background GPU processes. `nvidia-persistenced` is okay because it is managed by the host stack. -You may not run any background GPU processes for VMs to work (`nvidia-persitenced` is OK, it is managed by our hosting software). +## Retry Enablement -### Enabling VMs +If VM support is off and you want to retry after fixing the host: -We will check/test your configuration when your machine is idle and enable VMs by default if your machine is capable of supporting VMs, and you have not set VMs to `off`. +```bash +sudo python3 /var/lib/vastai_kaalia/enable_vms.py on -f +``` -If you have VMs set to off, and you'd like to retry enabling VMs, run `sudo python3 /var/lib/vastai_kaalia/enable_vms.py on -f` while your machine is idle. +Run this only when the machine is idle. diff --git a/host/workload-policy.mdx b/host/workload-policy.mdx index a50130b4..c5837ae9 100644 --- a/host/workload-policy.mdx +++ b/host/workload-policy.mdx @@ -12,89 +12,65 @@ personas:
All host personas
-Use this page as a readable host-operator summary of renter workload expectations, active rental contracts, and policy-sensitive activity. It extracts the parts most relevant to day-to-day hosting, but it does not replace the canonical policy documents. +This is a host-operator summary. The source of truth is always the [Host Agreement](https://cloud.vast.ai/host/agreement) and [Terms of Service](https://vast.ai/terms). -Do not treat this page as legal advice or as a replacement for the agreement and terms. Platform policy can change, so review the canonical documents when making policy-sensitive decisions. +Do not use this page as legal advice or as a replacement for the agreement and terms. -## Source Of Truth - -If this page and the canonical documents ever differ, follow the canonical documents. - -| Source | Use it for | -| --- | --- | -| [Host Agreement](https://cloud.vast.ai/host/agreement) | Host account conversion, host commitments, rental contract expectations, data isolation, and host-specific agreement terms. | -| [Vast.ai Terms of Service](https://vast.ai/terms) | Platform-wide acceptable use, prohibited activity, payment/account rules, export compliance, suspension/termination rights, and legal terms. | - ## Host Responsibilities -When you list a machine, renters can create rental contracts from your offer. While a rental contract is active, the host is expected to keep the advertised machine available, stable, and performant through the rental end date. - -As a host: +While a rental contract is active: -- Keep the machine online and avoid changes that interrupt active renters. -- Do not run local gaming, mining, display, benchmark, or background GPU workloads while the machine is rented. -- Do not stop, inspect, modify, or interfere with active renter containers because they appear idle or unfamiliar. -- Keep renter data isolated and do not access renter files except where a documented platform or support process requires it. -- Keep escalation contact details current so urgent machine issues can reach the right operator. -- Follow the current host agreement, terms, export requirements, and applicable law. +- Keep the advertised machine online, stable, and performant. +- Do not run local gaming, mining, benchmarks, display workloads, or background GPU jobs. +- Do not stop, inspect, modify, or interfere with renter containers because they appear idle. +- Keep renter data isolated. +- Keep escalation contact details current. +- Follow the host agreement, terms, export rules, and applicable law. -## Active Rentals - -An active rental is still an active rental even when GPU utilization looks low. Some renters run interactive notebooks, services, build jobs, data preparation, CPU-heavy tasks, or workloads with long idle periods between bursts. - -Do not assume an idle-looking instance is abandoned. If you need maintenance, use the documented maintenance and offer-end-date flows, and avoid disrupting active contracts. +An idle-looking rental can still be active. Renters may run notebooks, services, build jobs, CPU-heavy work, or bursty workloads.
-## Can I send a message to a client using my machine? +## Can I Message A Client? -No, there is not an established process for hosts to message clients on Vast. If a renter workload appears idle, broken, abusive, or policy-sensitive, follow the guidance on this page instead of trying to contact the renter directly. +No. Hosts do not have an established direct client-message flow. If a workload looks broken, idle, abusive, or policy-sensitive, follow the escalation guidance below. -## Prohibited And Restricted Activity +## Restricted Activity -The Terms of Service describe prohibited activity across the platform. The summary below extracts the host-operating implications, but it should not be treated as a separate allowlist. +The Terms describe prohibited activity. Host-facing examples include: -| Category | Host-facing guidance | +| Category | Host action | | --- | --- | -| Illegal or abusive activity | Activity that violates law, regulation, platform policy, or third-party rights should be escalated. | -| Malware, spam, or network abuse | Do not knowingly support malware, spam, unauthorized bulk messaging, attacks, credential theft, or disruption of Vast or third-party services. | -| Security bypass or platform abuse | Attempts to bypass access controls, scrape platform data, interfere with security features, impersonate users, or overload platform systems are not acceptable. | -| Intellectual-property infringement | Renters are responsible for having rights to the software, data, and content they run. Escalate credible infringement concerns. | -| Export-controlled or sanctioned use | Usage must comply with applicable export controls and sanctions. Escalate suspected restricted destination, user, or end-use issues. | -| Cryptocurrency mining | The Terms include restrictions on cryptocurrency mining, including when credits were purchased using a credit card. Hosts should not advertise cryptocurrency mining as generally allowed. | - -## Mining, Bittensor, And Proof-Of-Work - -Crypto-adjacent workloads can be confusing because they may look similar from the host side. Some workloads are AI inference or training around a blockchain network; others are cryptocurrency mining or proof-of-work activity. +| Illegal or abusive activity | Preserve observable details and escalate. | +| Malware, spam, network abuse, or attacks | Do not knowingly support it; escalate. | +| Platform abuse or security bypass | Escalate suspected attempts to bypass controls or disrupt systems. | +| Intellectual-property concerns | Escalate credible concerns; do not inspect private renter data. | +| Export-controlled or sanctioned use | Escalate suspected restricted users, destinations, or end uses. | +| Cryptocurrency mining | Do not advertise mining as generally allowed. Check the Terms or ask support. | -For host docs, use this rule: +## Mining And Crypto-Adjacent Workloads -- Do not tell renters that cryptocurrency mining is generally allowed. -- Do not optimize host guidance around proof-of-work mining as a supported hosting path. -- Treat Bittensor, validator/miner, subnet, and similar workloads as policy-sensitive when they involve token rewards, chain participation, proof-of-work, or credit-card-funded usage. -- If a renter asks whether a specific crypto-adjacent workload is allowed, point them to the [Terms of Service](https://vast.ai/terms) or support rather than making a host-side policy decision. +Some blockchain-adjacent workloads are AI inference or training; others may be mining, proof-of-work, or policy-sensitive token activity. -If you suspect a renter is violating policy, collect timestamps, observable symptoms, relevant console screenshots, and the instance details available to your account. Do not inspect private renter data to investigate. +Hosts should not decide policy on behalf of Vast. If a renter asks whether a specific crypto workload is allowed, point them to the [Terms of Service](https://vast.ai/terms) or support. -## What Hosts Should Do +## What To Do | Situation | Action | | --- | --- | -| A rental appears idle | Leave it running. Price listings with idle time in mind. | -| A rental is causing machine instability | Check host hardware, thermals, power, driver, Docker, and daemon logs. Escalate if the issue appears policy-related or platform-side. | -| You see suspected abuse | Preserve observable details and contact support. Do not access renter files or secrets. | -| You need planned maintenance | Use maintenance windows and offer-end-date planning. Avoid active-rental disruption. | -| You want to stop accepting new rentals | Unlist the machine. Existing rental contracts continue until their rental end dates. | -| A contract has expired or storage is stale | Use documented cleanup flows such as [Removing or Recreating Machines](/host/removing-recreating-machines) and host CLI cleanup commands. | +| Rental appears idle | Leave it running. | +| Rental affects machine stability | Check host hardware, thermals, power, drivers, Docker, and daemon logs. | +| Suspected abuse | Collect timestamps, symptoms, screenshots, and visible instance details; contact support. | +| Planned maintenance needed | Use [maintenance windows](/host/maintenance-windows) and offer-end-date planning. | +| Stop new rentals | Unlist the machine; existing contracts continue. | +| Expired contract or stale storage | Use documented cleanup flows in [Remove or Recreate](/host/removing-recreating-machines). | ## Related Pages | Topic | Read next | | --- | --- | -| Contract and offer behavior | [Hosting Overview](/host/hosting-overview) | -| Account conversion and agreement flow | [Account & Agreement](/host/account-hosting-agreement) | -| Canonical host agreement | [Host Agreement](https://cloud.vast.ai/host/agreement) | -| Canonical terms | [Terms of Service](https://vast.ai/terms) | -| Maintenance planning | [Maintenance Windows](/host/maintenance-windows) | -| Unlisting and cleanup | [Remove or Recreate](/host/removing-recreating-machines) | +| Contract behavior | [Hosting Overview](/host/hosting-overview) | +| Host agreement | [Host Agreement](https://cloud.vast.ai/host/agreement) | +| Terms | [Terms of Service](https://vast.ai/terms) | +| Maintenance | [Maintenance Windows](/host/maintenance-windows) | diff --git a/old-docs-highlight-demo.js b/old-docs-highlight-demo.js deleted file mode 100644 index d8347ac5..00000000 --- a/old-docs-highlight-demo.js +++ /dev/null @@ -1,3628 +0,0 @@ -// Local CON-1518 demo helper. Do not include in the production docs PR. -// Generated from origin/main host docs to highlight content reused from the old docs. -(function () { - const OLD_CONTENT_DEMO_ENABLED = true; - const LOCAL_PREVIEW_HOSTS = new Set(['localhost', '127.0.0.1', '0.0.0.0', '::1']); - const isLocalPreview = LOCAL_PREVIEW_HOSTS.has(location.hostname) || location.hostname.endsWith('.localhost'); - - if (!OLD_CONTENT_DEMO_ENABLED || !isLocalPreview) return; - if (window.__vastOldDocsHighlightDemo) return; - window.__vastOldDocsHighlightDemo = true; - - const OLD_DOC_PHRASES = [ - { - "t": "the min gpu setting controls the smallest gpu partition you offer. for an 8-gpu machine this determines whether customers can rent 1 2 4 or 8 gpus at a time. it s a critical lever for balancing demand capture against utilization efficiency.", - "s": "optimization-guide.mdx" - }, - { - "t": "machines with datacenter gpus such as b200 h200 h100 a100 etc. and those with premium gpus such as rtx pro 6000 ws 8xrtx 5090 8xrtx 4090 etc. receive prioritized verification processing due to their high demand and performance capabilities.", - "s": "verification-stages.mdx" - }, - { - "t": "due to greater user control over hardware vm support requires iommu settings for securing pcie communications that can degrade the performance of nccl on non-rtx 40x0 multi-gpu machines that rely on pci-based gpu peer-to-peer communication.", - "s": "vms.mdx" - }, - { - "t": "note that default configuration settings for most machines will not support vms and we can detect that so most hosts who do not want vms enabled do not need to take any action. configuring your machine to support vms. hardware prerequisites", - "s": "vms.mdx" - }, - { - "t": "if you have confirmed your payout account is in good standing and still have not received your funds after a reasonable processing period please contact support for further review. i see my invoice is marked as pending. what does this mean", - "s": "payment.mdx" - }, - { - "t": "note: meeting the minimum requirements makes your machine eligible for verification but it does not guarantee that verification will occur immediately. the final verification outcome still depends on the factors listed below. 1 reliability", - "s": "understanding-verification.mdx" - }, - { - "t": "if you operate out of a data center consider highlighting any certifications you hold e.g. tier 4 data center hipaa compliance as differentiators. these can be meaningful selling points for enterprise and compliance-sensitive customers.", - "s": "optimization-guide.mdx" - }, - { - "t": "test your machines before listing and after any configuration changes. a machine that appears available but fails when rented wastes a customer s time and yours so you lose the rental and risk a negative reliability signal. verification", - "s": "optimization-guide.mdx" - }, - { - "t": "who this is for: hosts who have already completed the technical setup process and have machines ready to list. this guide covers the economic decisions that is the settings and strategies that affect your ranking occupancy and revenue.", - "s": "optimization-guide.mdx" - }, - { - "t": "the optimal mix depends on current market conditions so be sure to consider what your competitors are offering and where unmet demand exists. review your utilization patterns and adjust periodically. keeping your machines competitive", - "s": "optimization-guide.mdx" - }, - { - "t": "this is one of the most commonly misconfigured settings. the min bid price is a floor for the bidding system not an on-demand price. customers bid above this floor and competition among bidders will drive the actual price higher.", - "s": "optimization-guide.mdx" - }, - { - "t": "the core tradeoff: higher prices increase revenue per rental hour but reduce occupancy. lower prices fill your machines faster but each hour earns less. the optimum sits somewhere in the middle and shifts with supply and demand.", - "s": "optimization-guide.mdx" - }, - { - "t": "note: meeting the minimum requirements makes your machine eligible for verification but it does not guarantee that verification will occur immediately. the final verification outcome still depends on the factors listed below.", - "s": "understanding-verification.mdx" - }, - { - "t": "we do not recommend multi-gpu hosts with datacenter gpus enable vms until we can ensure better gpu p2p communication support in vms including support for nvlink. configuring vms on your machine checking vm enablement status.", - "s": "vms.mdx" - }, - { - "t": "test your machines before listing and after any configuration changes. a machine that appears available but fails when rented wastes a customer s time and yours so you lose the rental and risk a negative reliability signal.", - "s": "optimization-guide.mdx" - }, - { - "t": "what it means: newly added machines or machines under evaluation. the system hasn t yet completed enough testing to confirm platform standards. this is not a judgment of quality-only that no platform guarantee exists yet.", - "s": "verification-stages.mdx" - }, - { - "t": "vast.ai does not provide tax documents or tax advice to hosts residing outside the united states. international hosts are responsible for understanding and complying with their local tax obligations. united states hosts", - "s": "guide-to-taxes.mdx" - }, - { - "t": "pricing is the most direct lever for your earnings but the optimal price isn t simply as high as possible. rather it s the rate that maximizes total revenue given your hardware competition and current market conditions.", - "s": "optimization-guide.mdx" - }, - { - "t": "do maintain consistent uptime with minimal downtime. keep network connectivity stable avoid jitter and drops. manage thermals and power to prevent throttling. proactively monitor hardware health and perform maintenance.", - "s": "understanding-verification.mdx" - }, - { - "t": "when will deverification happen when the hosting software detects an error your machine is automatically but temporarily deverified. it will appear as unverified in search results until the underlying issue is resolved.", - "s": "verification-stages.mdx" - }, - { - "t": "verification is fully automated and powered by proprietary algorithms that continuously evaluate each machine s operational health and performance dynamically adjusting assessments based on real-time supply and demand.", - "s": "understanding-verification.mdx" - }, - { - "t": "the offer end date is your commitment to how long you will keep the machine online and fully functional. the pricing you set is the rate you ll be paid for that commitment. together these form the terms of your offer.", - "s": "hosting-overview.mdx" - }, - { - "t": "before your machine can be verified on vast.ai it must meet all minimum quality and reliability benchmarks. verification confirms that your machine is stable performant and properly configured to run client workloads.", - "s": "how-to-self-test.mdx" - }, - { - "t": "it is your responsibility to: ensure your tax information is up to date with your payment provider confirm whether you qualify for a tax form based on your earnings and location file your taxes accurately and on time", - "s": "guide-to-taxes.mdx" - }, - { - "t": "here s what each section means: current balance: this is the amount you ve earned so far from your referred users but haven t been paid out yet. x49 t keeps growing as your referrals continue to use the platform.", - "s": "earning.mdx" - }, - { - "t": "if 200 gb of the volume offer are rented the gpu offers will reduce to 2 1xgpu 400gb offers and 1 2xgpu 800gb offer. the volume offer will still remain as there is still available space and update to offer 300gb.", - "s": "hosting-overview.mdx" - }, - { - "t": "to rent your own machine you will need to first search the offers with your machine id to find the id and then create an instance using that id. the show machine command will show all your connected machines.", - "s": "hosting-overview.mdx" - }, - { - "t": "from the payout history section you can: view historical payouts filter records by date range download payout records in csv format download payout records in pdf format how much can i make hosting on vast.ai", - "s": "payment.mdx" - }, - { - "t": "total earnings: this shows your lifetime earnings x74 he total amount you ve earned from all your referrals since you joined the earnings program or started hosting. it includes both paid and unpaid amounts.", - "s": "earning.mdx" - }, - { - "t": "volume offer end dates must align with gpu offer end dates. setting an end date on a volume will not update if there is an existing gpu offer. setting a gpu offer end date will update volume offer end dates.", - "s": "hosting-overview.mdx" - }, - { - "t": "allocated storage that is storage in use by client rental contracts is subtracted from the total storage available on a machine and split up proportionally among the machine s gpus in remaining gpu offers.", - "s": "hosting-overview.mdx" - }, - { - "t": "> note: if you ve fixed the issue but the system doesn t automatically detect the resolution a vast.ai team member may need to manually check that your machine is functioning correctly and clear the error.", - "s": "verification-stages.mdx" - }, - { - "t": "the latest rental end date across all active rental contracts on a machine is shown in the ui. you must keep the machine available until this date. example: multiple rental contracts from different offers", - "s": "hosting-overview.mdx" - }, - { - "t": "paypal paypal issues tax forms to qualifying users directly through their platform. for information on thresholds and delivery refer to paypal s tax help resources. for questions contact paypal support.", - "s": "guide-to-taxes.mdx" - }, - { - "t": "total referral count: this number represents the total users you ve referred x77 ho have successfully created accounts through your referral link. it s a great way to track how your outreach is growing", - "s": "earning.mdx" - }, - { - "t": "there are three ways to access market metrics: dashboards at cloud.vast.ai/host/market/ cli via vastai metrics subcommands requires pip install vastai v1.0.4+ rest api endpoints see api reference below", - "s": "market-metrics.mdx" - }, - { - "t": "your floor price should not be close to your expected actual rental price. the bidding mechanism will bring the price up so you set the minimum you d accept not the price you hope to get. disk pricing", - "s": "optimization-guide.mdx" - }, - { - "t": "what it means: the machine passed automated checks for reliability network stability operational health and performance. a verified machine consistently delivers server services to platform standards.", - "s": "verification-stages.mdx" - }, - { - "t": "vast.ai does not provide tax documents or tax advice to hosts residing outside the united states. international hosts are responsible for understanding and complying with their local tax obligations.", - "s": "guide-to-taxes.mdx" - }, - { - "t": "you must create a new account for hosting. if you are using vast.ai as a client do not use the same account. a single client and hosting account is not supported and you will quickly run into issues.", - "s": "hosting-overview.mdx" - }, - { - "t": "interruptibles work in a bidding system: clients set a bid price for their instance the current highest bid is the instance that runs the others are paused. more info reserved discount pricing factor", - "s": "hosting-overview.mdx" - }, - { - "t": "the optimal mix depends on current market conditions so be sure to consider what your competitors are offering and where unmet demand exists. review your utilization patterns and adjust periodically.", - "s": "optimization-guide.mdx" - }, - { - "t": "do pass the self-test maintain steady uptime during evaluation. ensure drivers/cuda and networking are correctly installed and reachable. keep the environment clean schedule work via create job only.", - "s": "verification-stages.mdx" - }, - { - "t": "implication: machines aligned with active renter preferences-popular gpus sufficient vram strong reliability fast internet-are prioritized for verification to maximize utilization and profitability.", - "s": "understanding-verification.mdx" - }, - { - "t": "the reserved discount pricing is determined by the hosts. if you intend to encourage a long term rental this is a factor that you may want to research. use the filters in the ui to select reserved.", - "s": "hosting-overview.mdx" - }, - { - "t": "take the id number from the first column and use that to create a free instance on your own machine. this example loads the latest pytorch image along with both jupyter and ssh direct launch modes.", - "s": "hosting-overview.mdx" - }, - { - "t": "from this page you can add or update: company name business address tax identification information other billing details you would like displayed on invoices downloading invoices and payout records", - "s": "payment.mdx" - }, - { - "t": "note: the --ignore-requirements flag runs the test in a relaxed mode bypassing some checks. even if the test passes in this mode your machine does not meet the minimum verification requirements.", - "s": "how-to-self-test.mdx" - }, - { - "t": "consider enabling the auto-extend feature. this allows rentals to automatically continue beyond their initial term. it reduces churn without requiring you to commit to a longer maximum duration.", - "s": "optimization-guide.mdx" - }, - { - "t": "after the payout is submitted your payout provider may require additional processing time before funds appear in your account. why does my invoice show paid when i haven t received the funds yet", - "s": "payment.mdx" - }, - { - "t": "verification is one of the most common filters customers apply when searching. ensuring your machines are verified significantly increases your visibility in search results. data center hosts", - "s": "optimization-guide.mdx" - }, - { - "t": "only machines that meet the platform s reliability and performance thresholds are eligible for verification. there is no manual intervention ensuring consistency scalability and objectivity.", - "s": "verification-stages.mdx" - }, - { - "t": "if you want to use the website gui you will need to setup a new account on a different email address add a credit card and then find your machine and create instances on it like a client.", - "s": "hosting-overview.mdx" - }, - { - "t": "your floor price should not be close to your expected actual rental price. the bidding mechanism will bring the price up so you set the minimum you d accept not the price you hope to get.", - "s": "optimization-guide.mdx" - }, - { - "t": "when the hosting software detects an error your machine is automatically but temporarily deverified. it will appear as unverified in search results until the underlying issue is resolved.", - "s": "verification-stages.mdx" - }, - { - "t": "if your machine is rejected for not meeting requirements but you still want to check its rentability or run the pressure tests you can rerun the test with the --ignore-requirements flag:", - "s": "how-to-self-test.mdx" - }, - { - "t": "duration controls how long a rental contract can last. it s one of the most impactful settings because it affects both the type of customer you attract and the stability of your revenue.", - "s": "optimization-guide.mdx" - }, - { - "t": "think of your listing as a product on a shelf. price is only one factor other factors like availability duration terms and configuration determine whether customers even see it. duration", - "s": "optimization-guide.mdx" - }, - { - "t": "ensure you have the latest nvidia drivers installed at the time of listing. outdated drivers can cause compatibility issues with customer workloads and result in failed rentals. testing", - "s": "optimization-guide.mdx" - }, - { - "t": "once vast.ai submits the payout to your selected payout provider the invoice status will change to paid. can vast.ai send my payout via direct bank transfer ach swift wire transfer etc.", - "s": "payment.mdx" - }, - { - "t": "click on the 257 cpuram<258 is a decently constrained search that will most likely include a given machine you are looking for that fits these filters amongst others that are similar.", - "s": "hosting-overview.mdx" - }, - { - "t": "your listing competes with others for customer attention and your goal is to find the combination of price availability and configuration that maximizes your total revenue over time.", - "s": "optimization-guide.mdx" - }, - { - "t": "consider your hardware s relative performance your verification status and your reliability track record as these all affect how customers evaluate your listing against alternatives.", - "s": "optimization-guide.mdx" - }, - { - "t": "note: vast.ai is not responsible for delays restrictions compliance reviews account limitations or rejected payments imposed by wise paypal stripe or any other financial institution.", - "s": "payment.mdx" - }, - { - "t": "the paid status reflects the status of the payout within vast.ai s billing system only. it does not indicate whether the funds have completed processing within wise paypal or stripe.", - "s": "payment.mdx" - }, - { - "t": "vms require more disk space than docker containers as they do not share components with the host os. hosts with vms enabled may want to set higher disk and internet bandwidth prices.", - "s": "vms.mdx" - }, - { - "t": "if your network has qos controls or internal metering set a reasonable bandwidth price to prevent any single client from saturating your connection and degrading service for others.", - "s": "optimization-guide.mdx" - }, - { - "t": "definition: estimated gpu performance on typical deep-learning tasks e.g. cnn/transformer training for cross-hardware comparison. higher dlperf improves verification odds. read more", - "s": "understanding-verification.mdx" - }, - { - "t": "do verify gpu pcie connections provide full bandwidth and are not throttled. keep the latest drivers/cuda aligned with workloads. confirm required ports and end-to-end reachability.", - "s": "understanding-verification.mdx" - }, - { - "t": "this process may take some time as the system ensures that the issue is fully resolved before restoring verification. most error messages are cleared within 1-2 hours of resolution.", - "s": "verification-stages.mdx" - }, - { - "t": "read through this documentation to understand the minimum requirements for becoming a datacenter partner and the specific verification steps that we will take to ensure compliance.", - "s": "datacenter-status.mdx" - }, - { - "t": "current balance: this is the amount you ve earned so far from your referred users but haven t been paid out yet. x49 t keeps growing as your referrals continue to use the platform.", - "s": "earning.mdx" - }, - { - "t": "hosts are responsible for: setup: installing ubuntu creating disk partitions installing nvidia drivers opening network ports on the router and installing the vast hosting software.", - "s": "hosting-overview.mdx" - }, - { - "t": "if you have confirmed your payout account is in good standing and still have not received your funds after a reasonable processing period please contact support for further review.", - "s": "payment.mdx" - }, - { - "t": "how should i begin fixing it a red error indicator will appear on your machine in the machines tab. use this message to identify and investigate the issue in your logs or metrics.", - "s": "verification-stages.mdx" - }, - { - "t": "do investigate red error indicators quickly review logs and metrics. validate thermal/power headroom and bandwidth under load. re-check health after changes to confirm resolution.", - "s": "verification-stages.mdx" - }, - { - "t": "we will need to ensure iommu a technology that secures and isolates communication between pcie devices is set up along with disabling all driver features that interfere with vms.", - "s": "vms.mdx" - }, - { - "t": "the rental contract locks in all of the offer s terms at the time of rental including pricing the rental end date and hardware specs and those terms cannot be changed afterward.", - "s": "hosting-overview.mdx" - }, - { - "t": "think of your listing as a product on a shelf. price is only one factor other factors like availability duration terms and configuration determine whether customers even see it.", - "s": "optimization-guide.mdx" - }, - { - "t": "ensure you have the latest nvidia drivers installed at the time of listing. outdated drivers can cause compatibility issues with customer workloads and result in failed rentals.", - "s": "optimization-guide.mdx" - }, - { - "t": "when a client rents an instance from your offer all of the offer s terms at that moment the offer end date the pricing and the hardware specs are locked into a rental contract.", - "s": "hosting-overview.mdx" - }, - { - "t": "data center hosts: do not set a duration longer than you can reliably honor. breaking a contract early carries a serious penalty. only commit to what you can guarantee. pricing", - "s": "optimization-guide.mdx" - }, - { - "t": "note that default configuration settings for most machines will not support vms and we can detect that so most hosts who do not want vms enabled do not need to take any action.", - "s": "vms.mdx" - }, - { - "t": "settings alone won t help if your machines aren t reliable and up to date. a few operational basics make a significant difference in your listing s performance. driver updates", - "s": "optimization-guide.mdx" - }, - { - "t": "the paid status only reflects the payout status within vast.ai s billing system. it does not indicate whether the funds have completed processing within wise paypal or stripe.", - "s": "payment.mdx" - }, - { - "t": "to generate an invoice: you must have a valid payout method connected to your vast.ai account. your account balance must meet the 20 minimum payout threshold. payment timeline", - "s": "payment.mdx" - }, - { - "t": "on new machines the tests will be run on install for machines configured before the vm-feature release testing for vm-compatability will happen when the machine is unoccupied.", - "s": "vms.mdx" - }, - { - "t": "the on-demand price is the price per hour for the gpu rental. on demand rentals are the highest priority and if met will stop interruptibles. interruptible min price optional", - "s": "hosting-overview.mdx" - }, - { - "t": "the space allocated for volume offers is in the same pool of space as that for gpu offers meaning that space will not be subtracted from available offers unless it is in use.", - "s": "hosting-overview.mdx" - }, - { - "t": "this guide explains how vast.ai host payouts work when invoices are generated when payments are sent and what to do if you experience a payout issue. available payout methods", - "s": "payment.mdx" - }, - { - "t": "verification is one of the most common filters customers apply when searching. ensuring your machines are verified significantly increases your visibility in search results.", - "s": "optimization-guide.mdx" - }, - { - "t": "conversely all-8x can work if competitors in your gpu class are highly fragmented and there s strong demand for full nodes but it s generally not the default recommendation.", - "s": "optimization-guide.mdx" - }, - { - "t": "vm support will allow your machine to take advantage of demand for use cases that docker cannot easily support in addition to demand for conventional docker-based instances.", - "s": "vms.mdx" - }, - { - "t": "equipment that is in a certified datacenter on vast.ai is eligible to be included in the secure cloud offering and receive other benefits such as the blue datacenter label.", - "s": "datacenter-status.mdx" - }, - { - "t": "if your machine has multiple gpus and you ve set mingpu to allow slicing multiple clients can rent from the same offer each creating their own independent rental contract.", - "s": "hosting-overview.mdx" - }, - { - "t": "each rental contract is independent you may have multiple active rental contracts from different clients on the same machine each with its own rental end date and pricing.", - "s": "hosting-overview.mdx" - }, - { - "t": "each endpoint allows up to 5 requests per second per user. for large historical queries the backend automatically adjusts the resolution to keep response sizes reasonable.", - "s": "market-metrics.mdx" - }, - { - "t": "ensure that your internet power source and heat dissipation systems are all functioning and that you have thought through how hosting will affect each one of those items.", - "s": "hosting-overview.mdx" - }, - { - "t": "parameter applies to description --- --- --- verified current history yes no or all hostingtype current history securecloud community or all gpuname history gpu name e.g.", - "s": "market-metrics.mdx" - }, - { - "t": "open /etc/default/grub and add to the grubcmdlinelinux the following: amdiommu on or inteliommu on depending on whether you have an amd or intel cpu. nvidiadrm.modeset 0", - "s": "vms.mdx" - }, - { - "t": "data center hosts: do not set a duration longer than you can reliably honor. breaking a contract early carries a serious penalty. only commit to what you can guarantee.", - "s": "optimization-guide.mdx" - }, - { - "t": "if stored instances are only taking up 400 gb the volume offer will not update as there is still enough space on the machine to cover the volume offer. listing volumes", - "s": "hosting-overview.mdx" - }, - { - "t": "invoices are generated weekly on fridays. once an invoice is generated it enters a pending state and is scheduled for payment during the following friday payout cycle.", - "s": "payment.mdx" - }, - { - "t": "we will check/test your configuration when your machine is idle and enable vms by default if your machine is capable of supporting vms and you have not set vms to off.", - "s": "vms.mdx" - }, - { - "t": "machines that do not have vm support enabled will be hidden in the search page for clients who have vm-based templates selected. vm support benefits/drawbacks benefits", - "s": "vms.mdx" - }, - { - "t": "you can generate earnings by gaining vast credit through template creation via our referral program. you can find more information about vast s referral program here.", - "s": "earning.mdx" - }, - { - "t": "interruptibles work in a bidding system: clients set a bid price for their instance the current highest bid is the instance that runs the others are paused. more info", - "s": "hosting-overview.mdx" - }, - { - "t": "to qualify a machine must pass minimum baseline and health/stability checks. beyond that the system evaluates four primary criteria order not indicative of priority :", - "s": "understanding-verification.mdx" - }, - { - "t": "total earnings: this shows your lifetime earnings x74 he total amount you ve earned from all your referrals since you joined the earnings program or started hosting.", - "s": "earning.mdx" - }, - { - "t": "vm support is currently an optional feature for hosts as it usually requires additional configuration steps on top of those needed to support docker-based instances.", - "s": "vms.mdx" - }, - { - "t": "managing your offers including pricing and offer end dates planning maintenance so that no active rental contracts are disrupted account setup and hosting agreement", - "s": "hosting-overview.mdx" - }, - { - "t": "you must be signed in as a host with at least one registered machine to access this page. alternatively check out gpu market prices or the host earnings calculator.", - "s": "payment.mdx" - }, - { - "t": "verification is entirely automated by proprietary algorithms that assess each machine s operational health and performance incorporating supply-and-demand dynamics.", - "s": "verification-stages.mdx" - }, - { - "t": "tip: meeting these minimum requirements makes your machine eligible for verification but does not automatically guarantee verification. read more about verification", - "s": "verification-stages.mdx" - }, - { - "t": "we also generally recommend multi-gpu hosts with rtx 40x0 series gpus try enabling vms especially if they have plentiful disk space and fast 500mbps+ internet speed", - "s": "vms.mdx" - }, - { - "t": "for windows users we suggest setting up wsl which will require you to install ubuntu on your windows machine and change your bios settings to allow virtualization.", - "s": "hosting-overview.mdx" - }, - { - "t": "host machines are not required to be vm compatible the vast hosting software will automatically test and enable the feature on machines on which vms are supported.", - "s": "vms.mdx" - }, - { - "t": "you can set the offer end date in the hosting interface by clicking on the date field under expiration or via the end date field in the cli list machine command.", - "s": "hosting-overview.mdx" - }, - { - "t": "we do not recommend multi-gpu hosts with datacenter gpus enable vms until we can ensure better gpu p2p communication support in vms including support for nvlink.", - "s": "vms.mdx" - }, - { - "t": "settings alone won t help if your machines aren t reliable and up to date. a few operational basics make a significant difference in your listing s performance.", - "s": "optimization-guide.mdx" - }, - { - "t": "this page in the console allows you to manage your earnings from referrals. you can find more information about vast s referral program here. pages walkthrough", - "s": "earning.mdx" - }, - { - "t": "please verify that your payout method has been connected correctly in your account settings. can i generate an invoice manually customizing invoice information", - "s": "payment.mdx" - }, - { - "t": "if you operate multiple machines distribute your min gpu settings across them rather than using the same value everywhere. a healthy mix might look like this:", - "s": "optimization-guide.mdx" - }, - { - "t": "if they create a volume offer of 500 gb and it is not rented the machine will be available for rent with 2 offers of 1xgpu 500gb and 1 offer of 2xgpu 1000gb.", - "s": "hosting-overview.mdx" - }, - { - "t": "note: meeting these minimum requirements makes your machine eligible for verification but does not automatically guarantee verification. about the self-test", - "s": "how-to-self-test.mdx" - }, - { - "t": "if you are an international host receiving payouts via wise please refer to the international hosts section above. common questions does vast.ai handle vat", - "s": "guide-to-taxes.mdx" - }, - { - "t": "do monitor health uptime thermals power and respond to alerts. keep drivers/cuda on compatible latest stable versions. maintain stable symmetric bandwidth.", - "s": "verification-stages.mdx" - }, - { - "t": "once verified a machine will remain verified unless issues arise such as failing health checks or reliability standards which could lead to deverification.", - "s": "verification-stages.mdx" - }, - { - "t": "currently no other peer-to-peer gpu rental marketplace offers full vms instead full vms are only available from traditional providers at much higher costs.", - "s": "vms.mdx" - }, - { - "t": "market data suggests there is meaningful demand for both 1x and 8x configurations with approximately twice as much search volume for 8x rentals as for 1x.", - "s": "optimization-guide.mdx" - }, - { - "t": "setup: installing ubuntu creating disk partitions installing nvidia drivers opening network ports on the router and installing the vast hosting software.", - "s": "hosting-overview.mdx" - }, - { - "t": "this will automatically remove expired/deleted rental contracts from the machine and available storage will update on offers. extending rental contracts", - "s": "hosting-overview.mdx" - }, - { - "t": "a machine that appears available but fails when rented wastes a customer s time and yours so you lose the rental and risk a negative reliability signal.", - "s": "optimization-guide.mdx" - }, - { - "t": "hosts are responsible for ensuring they can receive business-to-business b2b payments through their selected payout provider in their country or region.", - "s": "payment.mdx" - }, - { - "t": "10-series nvidia gpu or mi25 or newer radeon instinct series gpu or radeon vii or radeon pro vii or radeon rx 7900 gre/xt/xtx or radeon pro w7900/w7800.", - "s": "verification-stages.mdx" - }, - { - "t": "if stored instances are only taking up 400 gb the volume offer will not update as there is still enough space on the machine to cover the volume offer.", - "s": "hosting-overview.mdx" - }, - { - "t": "note: meeting the minimum requirements makes your machine eligible for verification but it does not guarantee that verification will occur immediately.", - "s": "understanding-verification.mdx" - }, - { - "t": "tip: ensure no other jobs or instances are running during the self-test for the most accurate results. step-by-step guide step 0: install the vast cli", - "s": "how-to-self-test.mdx" - }, - { - "t": "a red error indicator will appear on your machine in the machines tab. use this message to identify and investigate the issue in your logs or metrics.", - "s": "verification-stages.mdx" - }, - { - "t": "this guide explains how vast.ai host payouts work when invoices are generated when payments are sent and what to do if you experience a payout issue.", - "s": "payment.mdx" - }, - { - "t": "host earnings depend on several factors including: hardware specifications pricing uptime and reliability geographic location current customer demand", - "s": "payment.mdx" - }, - { - "t": "if you have vms set to off and you d like to retry enabling vms run sudo python3 /var/lib/vastaikaalia/enablevms.py on -f while your machine is idle.", - "s": "vms.mdx" - }, - { - "t": "individual certifications will eventually be highlighted so users can understand if a given host is compliant with hipaa gdpr tier 2/3 or iso 27001.", - "s": "datacenter-status.mdx" - }, - { - "t": "wise if you are a us-based host receiving payouts via wise vast.ai is required to collect your tax information directly. please submit your w9 here:", - "s": "guide-to-taxes.mdx" - }, - { - "t": "to prevent vms from being enabled on your machine or to disable vms after they have been enabled run python3 /var/lib/vastaikaalia/enablevms.py off.", - "s": "vms.mdx" - }, - { - "t": "the latest rental end date across all active rental contracts on a machine is shown in the ui. you must keep the machine available until this date.", - "s": "hosting-overview.mdx" - }, - { - "t": "this discount is not static but rather scales over time that the user rents the machine for. these values are determined by the individual host s .", - "s": "hosting-overview.mdx" - }, - { - "t": "to extend the current rental contracts for all clients on a given machine change the offer end date to a later time with the same or lower pricing.", - "s": "hosting-overview.mdx" - }, - { - "t": "funds are then processed by wise paypal or stripe and may take additional time to appear in your account depending on the provider and your region.", - "s": "payment.mdx" - }, - { - "t": "total referral count: this number represents the total users you ve referred x77 ho have successfully created accounts through your referral link.", - "s": "earning.mdx" - }, - { - "t": "hosts can create offers sometimes called listings through the cli command list machine or the machine control panel gui on the host machines page.", - "s": "hosting-overview.mdx" - }, - { - "t": "once created a rental contract s terms cannot be changed not by modifying the offer not by unlisting the machine and not by any other host action.", - "s": "hosting-overview.mdx" - }, - { - "t": "if you operate out of a data center consider highlighting any certifications you hold e.g. tier 4 data center hipaa compliance as differentiators.", - "s": "optimization-guide.mdx" - }, - { - "t": "disclaimer: as an independent contractor you are solely responsible for tracking your earnings and accurately reporting them in your tax filings.", - "s": "guide-to-taxes.mdx" - }, - { - "t": "invoices are only generated when: a payout method is connected to your vast.ai account. your balance has reached the 20 minimum payout threshold.", - "s": "payment.mdx" - }, - { - "t": "on february 1 client b rents the other 2 gpus from the new offer. a rental contract is created at 2.50/gpu/hr with a rental end date of june 30.", - "s": "hosting-overview.mdx" - }, - { - "t": "to rent your own machine you will need to first search the offers with your machine id to find the id and then create an instance using that id.", - "s": "hosting-overview.mdx" - }, - { - "t": "the earnings x70 age gives you a transparent view of your referral program performance and accumulated rewards. here s what each section means:", - "s": "earning.mdx" - }, - { - "t": "depending on your payout method your payment provider may issue a tax form if you meet their reporting threshold. it is your responsibility to:", - "s": "guide-to-taxes.mdx" - }, - { - "t": "recovery: fix the issue and restore stability the system will automatically transition back to verified once system confirms healthy operation.", - "s": "verification-stages.mdx" - }, - { - "t": "this page in the console allows you to manage your earnings from referrals. you can find more information about vast s referral program here.", - "s": "earning.mdx" - }, - { - "t": "the on-demand price is the price per hour for the gpu rental. on demand rentals are the highest priority and if met will stop interruptibles.", - "s": "hosting-overview.mdx" - }, - { - "t": "once clients rent your machine it is very important to honor the terms of each rental contract until its rental end date. the rental contract", - "s": "hosting-overview.mdx" - }, - { - "t": "connect your vast host account to our discord to access our host-only discord channels to chat or seek help from other hosts on the platform.", - "s": "hosting-overview.mdx" - }, - { - "t": "the optimal mix depends on current market conditions so be sure to consider what your competitors are offering and where unmet demand exists.", - "s": "optimization-guide.mdx" - }, - { - "t": "check that virtualization is enabled in your bios. on most machines this should be enabled by default. configure kernel commandline arguments", - "s": "vms.mdx" - }, - { - "t": "the host must have at least 5 gpu servers listed on vast.ai or otherwise show they have a significant 5+ servers amount of equipment to list", - "s": "datacenter-status.mdx" - }, - { - "t": "rtx 4090 start history unix timestamp for range start end history unix timestamp for range end step history seconds between data points e.g.", - "s": "market-metrics.mdx" - }, - { - "t": "total rental earnings host only : x54 his shows the total lifetime amount you ve earned from your machine being rented out on the platform.", - "s": "earning.mdx" - }, - { - "t": "keep in mind our auto sort that search offers defaults to is comprised of both ranking various factors as well as an element of randomness.", - "s": "hosting-overview.mdx" - }, - { - "t": "different customer types have very different duration preferences. understanding this helps you target the right segment for your hardware:", - "s": "optimization-guide.mdx" - }, - { - "t": "set disk pricing higher than you might expect. this prevents stopped instances from consuming all your storage and starving active rentals.", - "s": "optimization-guide.mdx" - }, - { - "t": "short duration to long duration :-- :-: --: flexibility lower commitment higher expected value price lock-in customer segments by duration", - "s": "optimization-guide.mdx" - }, - { - "t": "you may not run any background gpu processes for vms to work nvidia-persitenced is ok it is managed by our hosting software . enabling vms", - "s": "vms.mdx" - }, - { - "t": "on january 20 you decide to raise the price. you unlist the current offer and relist at 2.50/gpu/hr with a new offer end date of june 30.", - "s": "hosting-overview.mdx" - }, - { - "t": "once you are ready to list your machine come back to this guide to understand pricing and the rental contract lifecycle. general concepts", - "s": "hosting-overview.mdx" - }, - { - "t": "the offer end date becomes the contract s rental end date shown in the ui as client end date and the pricing becomes the contract s rate.", - "s": "hosting-overview.mdx" - }, - { - "t": "customer type typical duration need notes :-- :-- :-- serverless / automated inference short hours to days these workloads are transient.", - "s": "optimization-guide.mdx" - }, - { - "t": "note: meeting these minimum requirements makes your machine eligible for verification but does not automatically guarantee verification.", - "s": "how-to-self-test.mdx" - }, - { - "t": "reserved instance discounts are a feature for clients which allows them to rent machines over a long period of time at a reduced price.", - "s": "hosting-overview.mdx" - }, - { - "t": "market metrics data is updated every 5 minutes. location data is cached for up to 2 hours since it changes less frequently. rate limits", - "s": "market-metrics.mdx" - }, - { - "t": "tip: meeting these minimum requirements makes your machine eligible for verification but does not automatically guarantee verification.", - "s": "verification-stages.mdx" - }, - { - "t": "unlisting the machine prevents new rental contracts entirely but existing ones continue at their original pricing and rental end dates", - "s": "hosting-overview.mdx" - }, - { - "t": "when you set a min gpu value the platform creates listings at all powers of two from your minimum up to the total gpus in the machine.", - "s": "optimization-guide.mdx" - }, - { - "t": "do offer in-demand gpu models with adequate vram and balanced resources. maintain strong reliability to remain attractive once listed.", - "s": "understanding-verification.mdx" - }, - { - "t": "what it means: a previously verified machine no longer meets requirements. system continuous monitoring detects sustained degradation.", - "s": "verification-stages.mdx" - }, - { - "t": "other 6000 series or newer radeon rx/pro w series gpus may be supported but may not be searchable using standard filters for amd rocm.", - "s": "verification-stages.mdx" - }, - { - "t": "important: even with --ignore-requirements your machine must have at least three direct open ports otherwise the self-test will fail.", - "s": "how-to-self-test.mdx" - }, - { - "t": "fix the issue and restore stability the system will automatically transition back to verified once system confirms healthy operation.", - "s": "verification-stages.mdx" - }, - { - "t": "avoid downgrading hardware capacity e.g. reducing gpu count disk or ram . allowing thermal power or bandwidth instability under load.", - "s": "verification-stages.mdx" - }, - { - "t": "either you disabled vms or our previous tests failed. pending: vms are not disabled but will try to enable once the machine is idle.", - "s": "vms.mdx" - }, - { - "t": "it s one of the most impactful settings because it affects both the type of customer you attract and the stability of your revenue.", - "s": "optimization-guide.mdx" - }, - { - "t": "if you have fast unmetered upstream internet you can price bandwidth low or even at zero as this is a strong competitive advantage.", - "s": "optimization-guide.mdx" - }, - { - "t": "this guide covers the configuration steps needed to enable support for vast vms on most setups but is not and cannot be exhausitve.", - "s": "vms.mdx" - }, - { - "t": "price is only one factor other factors like availability duration terms and configuration determine whether customers even see it.", - "s": "optimization-guide.mdx" - }, - { - "t": "please refer to your payout provider s documentation for regional availability account requirements and verification requirements.", - "s": "payment.mdx" - }, - { - "t": "after a payout has been submitted your payout provider may require additional processing time before funds appear in your account.", - "s": "payment.mdx" - }, - { - "t": "> note: higher reliability greatly improves verification likelihood. sustained 99.99% up to 99.9999%+ uptime is typically favored.", - "s": "understanding-verification.mdx" - }, - { - "t": "you can view your payout history for a selected date range. here you can generate and download invoices for your earning payouts.", - "s": "earning.mdx" - }, - { - "t": "machine min gpu available listings :-- :-- :-- machine a 1 1x 2x 4x 8x machine b 2 2x 4x 8x machine c 4 4x 8x machine d 8 8x only", - "s": "optimization-guide.mdx" - }, - { - "t": "definition: estimated gpu performance on typical deep-learning tasks e.g. cnn/transformer training for cross-hardware comparison.", - "s": "understanding-verification.mdx" - }, - { - "t": "users typically are willing to pay more for the security and reliability that comes with equipment that is in a proper facility.", - "s": "datacenter-status.mdx" - }, - { - "t": "the core tradeoff: smaller minimums e.g. 1x let you serve more customers and fill individual gpu slots but create fragmentation.", - "s": "optimization-guide.mdx" - }, - { - "t": "machines that do not have vm support enabled will be hidden in the search page for clients who have vm-based templates selected.", - "s": "vms.mdx" - }, - { - "t": "the min gpu field allows you to set the smallest grouping of gpu rentals available on your machine in powers of 2 or down to 1.", - "s": "hosting-overview.mdx" - }, - { - "t": "by default volume offers will be listed with gpu offers at the same disk price for half of the available space on the machine.", - "s": "hosting-overview.mdx" - }, - { - "t": "after the payout is submitted your payout provider may require additional processing time before funds appear in your account.", - "s": "payment.mdx" - }, - { - "t": "direct bank transfers ach payments wire transfers and swift payments are not available. my account is not generating invoices.", - "s": "payment.mdx" - }, - { - "t": "this will automatically remove expired/deleted rental contracts from the machine and available storage will update on offers.", - "s": "hosting-overview.mdx" - }, - { - "t": "you can use this data to make informed decisions about pricing your machines and understanding demand for specific gpu types.", - "s": "market-metrics.mdx" - }, - { - "t": "once an invoice is generated it enters a pending state and is scheduled for payment during the following friday payout cycle.", - "s": "payment.mdx" - }, - { - "t": "we recommend all hosts with single-gpu rigs to try to ensure vm support as the drawbacks for single-gpu machines are minimal.", - "s": "vms.mdx" - }, - { - "t": "you may not run any background gpu processes for vms to work nvidia-persitenced is ok it is managed by our hosting software .", - "s": "vms.mdx" - }, - { - "t": "shortening the offer end date limits the commitment window for new clients but does not shorten any existing rental end date", - "s": "hosting-overview.mdx" - }, - { - "t": "vast provides real-time and historical data on gpu supply demand pricing and geographic distribution across the marketplace.", - "s": "market-metrics.mdx" - }, - { - "t": "this guide covers the economic decisions that is the settings and strategies that affect your ranking occupancy and revenue.", - "s": "optimization-guide.mdx" - }, - { - "t": "it automatically evaluates key system aspects and simulates real workloads to validate both hardware and network readiness.", - "s": "how-to-self-test.mdx" - }, - { - "t": "market metrics data is updated every 5 minutes. location data is cached for up to 2 hours since it changes less frequently.", - "s": "market-metrics.mdx" - }, - { - "t": "the core tradeoff: longer durations tend to increase expected earnings because customers value the guaranteed availability.", - "s": "optimization-guide.mdx" - }, - { - "t": "the host setup guide is the official documentation for setting up a machine on vast.ai. read through each section closely.", - "s": "hosting-overview.mdx" - }, - { - "t": "it is vital to test your own machine to ensure the ports and software is running smoothly. setup a separate client account", - "s": "hosting-overview.mdx" - }, - { - "t": "vastai metrics gpu all gpu types vastai metrics gpu --verified true --datacenter true vastai metrics gpu --raw json output", - "s": "market-metrics.mdx" - }, - { - "t": "if you operate multiple machines distribute your min gpu settings across them rather than using the same value everywhere.", - "s": "optimization-guide.mdx" - }, - { - "t": "once clients rent your machine it is very important to honor the terms of each rental contract until its rental end date.", - "s": "hosting-overview.mdx" - }, - { - "t": "customers filter and sort listings by a variety of criteria most commonly by verification status duration and disk space.", - "s": "optimization-guide.mdx" - }, - { - "t": "if your listing doesn t pass these filters it won t appear in search results regardless of how competitive your price is.", - "s": "optimization-guide.mdx" - }, - { - "t": "internet download speed must scale with total machine vram at 2.6 mbps per gib with a 100 mbps floor and 500 mbps ceiling", - "s": "verification-stages.mdx" - }, - { - "t": "wise if you are a us-based host receiving payouts via wise vast.ai is required to collect your tax information directly.", - "s": "guide-to-taxes.mdx" - }, - { - "t": "once you are ready to list your machine come back to this guide to understand pricing and the rental contract lifecycle.", - "s": "hosting-overview.mdx" - }, - { - "t": "this process involves no manual intervention ensuring consistent scalable and objective verification across all systems.", - "s": "understanding-verification.mdx" - }, - { - "t": "what it means: the machine passed automated checks for reliability network stability operational health and performance.", - "s": "verification-stages.mdx" - }, - { - "t": "this prevents stopped instances from consuming all your storage and starving active rentals. internet bandwidth pricing", - "s": "optimization-guide.mdx" - }, - { - "t": "definition: ongoing evaluation of market trends and renter behavior to surface configurations most likely to be rented.", - "s": "understanding-verification.mdx" - }, - { - "t": "internet upload speed must scale with total machine vram at 2.6 mbps per gib with a 100 mbps floor and 500 mbps ceiling", - "s": "verification-stages.mdx" - }, - { - "t": "a previously verified machine no longer meets requirements. system continuous monitoring detects sustained degradation.", - "s": "verification-stages.mdx" - }, - { - "t": "in the payout account section you can set up a payout account. common questions how can i have earnings as a vast user", - "s": "earning.mdx" - }, - { - "t": "gpu: type memory and count matter. newer datacenter/workstation gpus are prioritized e.g. b200 > h200 >> 5090 > 4070 .", - "s": "understanding-verification.mdx" - }, - { - "t": "testing and troubleshooting all issues that can arise such as driver conflicts errors bad gpus and bad network ports.", - "s": "hosting-overview.mdx" - }, - { - "t": "do use the latest compatible drivers/cuda. eliminate pcie thermal and power bottlenecks to maintain sustained clocks.", - "s": "understanding-verification.mdx" - }, - { - "t": "this process may take some time as the system ensures that the issue is fully resolved before restoring verification.", - "s": "verification-stages.mdx" - }, - { - "t": "vast now supports vm instances running on kernel virtual machine kvm in addition to docker container based instances.", - "s": "vms.mdx" - }, - { - "t": "for example on a machine with 1000gb of disk available and 2 gpus a host can create a volume offer of up to 1000 gb.", - "s": "hosting-overview.mdx" - }, - { - "t": "if 200 gb of the volume offer are rented the gpu offers will reduce to 2 1xgpu 400gb offers and 1 2xgpu 800gb offer.", - "s": "hosting-overview.mdx" - }, - { - "t": "only machines that meet the platform s defined reliability and performance thresholds are eligible for verification.", - "s": "understanding-verification.mdx" - }, - { - "t": "on january 5 client a rents 2 gpus. a rental contract is created at 2.00/gpu/hr with a rental end date of march 31.", - "s": "hosting-overview.mdx" - }, - { - "t": "if the test fails: the cli will display detailed reasons for failure. apply the suggested fixes and rerun the test.", - "s": "how-to-self-test.mdx" - }, - { - "t": "if you are an international host receiving payouts via wise please refer to the international hosts section above.", - "s": "guide-to-taxes.mdx" - }, - { - "t": "new rental contracts will be created at the new terms while old rental contracts continue at their original terms.", - "s": "hosting-overview.mdx" - }, - { - "t": "the reserved discount pricing factor represents the maximum possible discount a user can achieve on your machines.", - "s": "hosting-overview.mdx" - }, - { - "t": "when a client rents a volume offer they rent a subset of the total space set for the offer up to the total amount.", - "s": "hosting-overview.mdx" - }, - { - "t": "the self-test helps confirm that your machine satisfies vast.ai s minimum performance and configuration standards.", - "s": "how-to-self-test.mdx" - }, - { - "t": "before running the test make sure: your machine has been listed. there are no active clients currently renting it.", - "s": "how-to-self-test.mdx" - }, - { - "t": "returns time-series data for supply demand and pricing. defaults to rtx 5090 4090 and 3090 over the last 24 hours.", - "s": "market-metrics.mdx" - }, - { - "t": "as rendering/gaming users will benefit from those as well as users who need multi-application orchestration tools.", - "s": "vms.mdx" - }, - { - "t": "depending on your payout method your payment provider may issue a tax form if you meet their reporting threshold.", - "s": "guide-to-taxes.mdx" - }, - { - "t": "min gpu 1 to min gpu 8 :-- :-: --: more renters more fragmentation fewer renters cleaner utilization how it works", - "s": "optimization-guide.mdx" - }, - { - "t": "it s the product of your price per hour and your occupancy rate the percentage of time your machines are rented .", - "s": "optimization-guide.mdx" - }, - { - "t": "avoid pairing high-end gpus with under-provisioned cpu/ram. letting hidden background services consume resources.", - "s": "understanding-verification.mdx" - }, - { - "t": "volume offers will be unlisted when the machine is unlisted. they can additionally be unlisted with the command:", - "s": "hosting-overview.mdx" - }, - { - "t": "./vastai create instance --image pytorch/pytorch:latest --jupyter --direct --env -e tz pdt -p 22:22 -p 8080:8080", - "s": "hosting-overview.mdx" - }, - { - "t": "this means a single machine may have active rental contracts at different prices and different rental end dates.", - "s": "hosting-overview.mdx" - }, - { - "t": "you now have two active rental contracts on the same machine at different prices and different rental end dates.", - "s": "hosting-overview.mdx" - }, - { - "t": "you can control the amount of space listed with the -v cli option and the price of the space with the -z option.", - "s": "hosting-overview.mdx" - }, - { - "t": "for large historical queries the backend automatically adjusts the resolution to keep response sizes reasonable.", - "s": "market-metrics.mdx" - }, - { - "t": "the bidding mechanism will bring the price up so you set the minimum you d accept not the price you hope to get.", - "s": "optimization-guide.mdx" - }, - { - "t": "storage is not your bottleneck. you are under-provisioned on disk set disk pricing higher than you might expect.", - "s": "optimization-guide.mdx" - }, - { - "t": "balances below 20 usd will automatically roll forward until the minimum threshold is reached. invoice generation", - "s": "payment.mdx" - }, - { - "t": "total referral earnings host only : this shows the total lifetime amount you ve earned from all your referrals.", - "s": "earning.mdx" - }, - { - "t": "the earnings x70 age gives you a transparent view of your referral program performance and accumulated rewards.", - "s": "earning.mdx" - }, - { - "t": "additionally there is the earning chart section that provides a clear visual overview of your earning history.", - "s": "earning.mdx" - }, - { - "t": "make sure to test the networking. clients require open ports to directly connect to the machine for most jobs.", - "s": "hosting-overview.mdx" - }, - { - "t": "if the test says the machine is not found or not rentable : try un-listing your machine then listing it again.", - "s": "how-to-self-test.mdx" - }, - { - "t": "who this is for: hosts who have already completed the technical setup process and have machines ready to list.", - "s": "optimization-guide.mdx" - }, - { - "t": "avoid ignoring warnings or allowing instability to persist. reducing hardware below the created specification.", - "s": "verification-stages.mdx" - }, - { - "t": "some hosts may also need to add the following settings: rd.driver.blacklist nouveau modprobe.blacklist nouveau", - "s": "vms.mdx" - }, - { - "t": "only rented space will impact the amount of space available for gpu offers not the space in the offer itself.", - "s": "hosting-overview.mdx" - }, - { - "t": "if for some reason this is not working or if you want to free the space automatically you can run the command", - "s": "hosting-overview.mdx" - }, - { - "t": "you can then look at your instance tab to make sure that pytorch loaded correctly along with jupyter and ssh.", - "s": "hosting-overview.mdx" - }, - { - "t": "verification confirms that your machine is stable performant and properly configured to run client workloads.", - "s": "how-to-self-test.mdx" - }, - { - "t": "ensure your machine has no missing data in your machines page such as upload and download speed ram or ports.", - "s": "how-to-self-test.mdx" - }, - { - "t": "only machines that meet the platform s reliability and performance thresholds are eligible for verification.", - "s": "verification-stages.mdx" - }, - { - "t": "vast.ai cannot provide tax advice and we cannot verify the accuracy of any publicly available tax guidance.", - "s": "guide-to-taxes.mdx" - }, - { - "t": "before your machine can be verified on vast.ai it must meet all minimum quality and reliability benchmarks.", - "s": "how-to-self-test.mdx" - }, - { - "t": "for example on an 8-gpu machine with min gpu set to 2 listings are created for 2x 4x and 8x configurations.", - "s": "optimization-guide.mdx" - }, - { - "t": "avoid unnecessary reboots or configuration changes. unrelated background workloads that consume gpu/cpu/io.", - "s": "verification-stages.mdx" - }, - { - "t": "the name and address of the datacenter where the equipment is located along with the relevant certificates", - "s": "datacenter-status.mdx" - }, - { - "t": "the discount schedule param which determines the price difference between on-demand and reserved instances", - "s": "hosting-overview.mdx" - }, - { - "t": "make sure to set an offer end date before listing your machine or the offer will remain open indefinitely.", - "s": "hosting-overview.mdx" - }, - { - "t": "larger minimums e.g. 8x eliminate fragmentation but limit your audience to customers who need a full node.", - "s": "optimization-guide.mdx" - }, - { - "t": "this approach lets you capture demand across all configuration sizes while keeping fragmentation in check.", - "s": "optimization-guide.mdx" - }, - { - "t": "yes but changes only affect future rental contracts. existing rental contracts keep their original terms:", - "s": "hosting-overview.mdx" - }, - { - "t": "gpu count: for the same gpu type more gpus increase verification likelihood e.g. 85090 >> 25090 > 15090 .", - "s": "understanding-verification.mdx" - }, - { - "t": "system optimization upgrades balanced scaling matters cpu/ram/pcie/bandwidth commensurate with gpu tier .", - "s": "understanding-verification.mdx" - }, - { - "t": "in order for your unverified machine to be verified it must also meet the following minimum requirements:", - "s": "verification-stages.mdx" - }, - { - "t": "lifecycle: machines automatically move between these states based on performance and reliability factors.", - "s": "verification-stages.mdx" - }, - { - "t": "the offer end date is your commitment to how long you will keep the machine online and fully functional.", - "s": "hosting-overview.mdx" - }, - { - "t": "for example if you have an 8x 3090 and set min gpu to 2 clients can create instances with 2 4 or 8 gpus.", - "s": "hosting-overview.mdx" - }, - { - "t": "the interruptible price allows for the host to set the minimum interruptible price for a client to rent.", - "s": "hosting-overview.mdx" - }, - { - "t": "the website gui stacks similar offers and so it is not easy to see all the listings for a given machine.", - "s": "hosting-overview.mdx" - }, - { - "t": "situation approach :-- :-- you have excess disk capacity set disk pricing closer to your amortized cost.", - "s": "optimization-guide.mdx" - }, - { - "t": "once vast.ai submits the payout to your selected payout provider the invoice status will change to paid.", - "s": "payment.mdx" - }, - { - "t": "if you have a display manager e.g. gdm or display server xorg wayland etc running you must disable them.", - "s": "vms.mdx" - }, - { - "t": "similarly if stored instances on the machine are taking up 800gb the volume offer will reduce to 200gb.", - "s": "hosting-overview.mdx" - }, - { - "t": "if you have raised the pricing you cannot extend the current rental contracts. testing your own machine", - "s": "hosting-overview.mdx" - }, - { - "t": "follow the official setup guide to install the vast cli: vast cli: get started step 1: set your api key", - "s": "how-to-self-test.mdx" - }, - { - "t": "avoid setting all machines to 1x as this leads to severe fragmentation and reduced overall utilization.", - "s": "optimization-guide.mdx" - }, - { - "t": "testing the recommended pytorch template is vital to ensure that ssh and jupyter are working properly.", - "s": "hosting-overview.mdx" - }, - { - "t": "tip: ensure no other jobs or instances are running during the self-test for the most accurate results.", - "s": "how-to-self-test.mdx" - }, - { - "t": "even if the test passes in this mode your machine does not meet the minimum verification requirements.", - "s": "how-to-self-test.mdx" - }, - { - "t": "before tuning any individual setting it helps to understand where your supply sits relative to demand.", - "s": "optimization-guide.mdx" - }, - { - "t": "check that virtualization is enabled in your bios. on most machines this should be enabled by default.", - "s": "vms.mdx" - }, - { - "t": "international hosts are responsible for understanding and complying with their local tax obligations.", - "s": "guide-to-taxes.mdx" - }, - { - "t": "as a host you can set this number yourself to 0 if you wish to opt out of this feature. volume offers", - "s": "hosting-overview.mdx" - }, - { - "t": "the original vs. the updated price will be shown as denoted by a stikethrough in the original amount:", - "s": "hosting-overview.mdx" - }, - { - "t": "outdated drivers can cause compatibility issues with customer workloads and result in failed rentals.", - "s": "optimization-guide.mdx" - }, - { - "t": "blue datacenter label on all gpu offers in the web interface for equipment that is in the datacenter", - "s": "datacenter-status.mdx" - }, - { - "t": "you can generate earnings by gaining vast credit through template creation via our referral program.", - "s": "earning.mdx" - }, - { - "t": "vast.ai is based in california and does not currently collect or remit vat. is vat shown on invoices", - "s": "guide-to-taxes.mdx" - }, - { - "t": "make sure to disable auto-updates so that your machine doesn t drop a client job to update a driver.", - "s": "hosting-overview.mdx" - }, - { - "t": "take the id number from the first column and use that to create a free instance on your own machine.", - "s": "hosting-overview.mdx" - }, - { - "t": "recommended strategy: set your min bid price close to your cost of power when the gpu is under load.", - "s": "optimization-guide.mdx" - }, - { - "t": "an invoice is marked as paid once vast.ai has submitted the payout to your selected payout provider.", - "s": "payment.mdx" - }, - { - "t": "pcie bandwidth: adequate throughput is essential bottlenecks depress dlperf and overall performance.", - "s": "understanding-verification.mdx" - }, - { - "t": "when the hosting software detects an error your machine is automatically but temporarily deverified.", - "s": "verification-stages.mdx" - }, - { - "t": "vms require more disk space than docker containers as they do not share components with the host os.", - "s": "vms.mdx" - }, - { - "t": "a high price with low occupancy can easily earn less than a moderate price with strong utilization.", - "s": "optimization-guide.mdx" - }, - { - "t": "invoices are generated every friday and are generally scheduled to be paid on the following friday.", - "s": "payment.mdx" - }, - { - "t": "definition: stable uninterrupted operation over time uptime resilience under continuous workloads .", - "s": "understanding-verification.mdx" - }, - { - "t": "vast is a gpu marketplace. hosts sell gpu resources on the marketplace. hosts are responsible for:", - "s": "hosting-overview.mdx" - }, - { - "t": "lower price to higher price :-- :-: --: higher occupancy higher per-hour revenue on-demand pricing", - "s": "optimization-guide.mdx" - }, - { - "t": "many hosts set their interruptible floor too high because they treat it like their on-demand rate.", - "s": "optimization-guide.mdx" - }, - { - "t": "avoid frequent restarts or unplanned outages. overheating undervolting or unstable power delivery.", - "s": "understanding-verification.mdx" - }, - { - "t": "vast.ai does not provide tax documents or tax advice to hosts residing outside the united states.", - "s": "guide-to-taxes.mdx" - }, - { - "t": "the paid status indicates that vast.ai has submitted the payout to your selected payout provider.", - "s": "payment.mdx" - }, - { - "t": "possible results are: on: vms are enabled on your machine. off: vms are disabled on your machine.", - "s": "vms.mdx" - }, - { - "t": "contact your payment provider directly with any questions about your tax forms. by payout method", - "s": "guide-to-taxes.mdx" - }, - { - "t": "you will notice there is now a link to machines in the navigation along with some other changes.", - "s": "hosting-overview.mdx" - }, - { - "t": "this example loads the latest pytorch image along with both jupyter and ssh direct launch modes.", - "s": "hosting-overview.mdx" - }, - { - "t": "you can also query the data directly via the rest api. pass your host api key as a bearer token.", - "s": "market-metrics.mdx" - }, - { - "t": "customers bid above this floor and competition among bidders will drive the actual price higher.", - "s": "optimization-guide.mdx" - }, - { - "t": "bidders will typically pay above this floor so your actual interruptible revenue will be higher.", - "s": "optimization-guide.mdx" - }, - { - "t": "the volume offer will still remain as there is still available space and update to offer 300gb.", - "s": "hosting-overview.mdx" - }, - { - "t": "a pending invoice has been generated and is scheduled for payment during the next payout cycle.", - "s": "payment.mdx" - }, - { - "t": "the latest rental end date across all active rental contracts on a machine is shown in the ui.", - "s": "hosting-overview.mdx" - }, - { - "t": "you must keep the machine online and fully functional through june 30 to honor both contracts.", - "s": "hosting-overview.mdx" - }, - { - "t": "ensuring your machines are verified significantly increases your visibility in search results.", - "s": "optimization-guide.mdx" - }, - { - "t": "it does not indicate whether the funds have completed processing within wise paypal or stripe.", - "s": "payment.mdx" - }, - { - "t": "to generate an invoice: you must have a valid payout method connected to your vast.ai account.", - "s": "payment.mdx" - }, - { - "t": "when a client rents an instance on your machine a rental contract is created from your offer.", - "s": "hosting-overview.mdx" - }, - { - "t": "if you intend to encourage a long term rental this is a factor that you may want to research.", - "s": "hosting-overview.mdx" - }, - { - "t": "balances below 20 usd will automatically roll forward until the minimum threshold is reached.", - "s": "payment.mdx" - }, - { - "t": "invoices generated on friday are generally scheduled to be paid on the following friday. paid", - "s": "payment.mdx" - }, - { - "t": "software drivers/cuda must be correctly installed and compatible use stable latest releases .", - "s": "understanding-verification.mdx" - }, - { - "t": "thus we believe that hosts who have vms enabled can expect to command a substantial preumium.", - "s": "vms.mdx" - }, - { - "t": "log in to stripe express to confirm your tax information name address ssn or ein is current.", - "s": "guide-to-taxes.mdx" - }, - { - "t": "you unlist the current offer and relist at 2.50/gpu/hr with a new offer end date of june 30.", - "s": "hosting-overview.mdx" - }, - { - "t": "this discount is not static but rather scales over time that the user rents the machine for.", - "s": "hosting-overview.mdx" - }, - { - "t": "a well-set interruptible floor ensures your gpus are working even during low-demand periods.", - "s": "optimization-guide.mdx" - }, - { - "t": "this prevents stopped instances from consuming all your storage and starving active rentals.", - "s": "optimization-guide.mdx" - }, - { - "t": "please verify that your payout method has been connected correctly in your account settings.", - "s": "payment.mdx" - }, - { - "t": "off: vms are disabled on your machine. either you disabled vms or our previous tests failed.", - "s": "vms.mdx" - }, - { - "t": "note: the --ignore-requirements flag runs the test in a relaxed mode bypassing some checks.", - "s": "how-to-self-test.mdx" - }, - { - "t": "availability pricing - historical supply/demand counts and p10/median/p90 pricing over time", - "s": "market-metrics.mdx" - }, - { - "t": "it is vital to test your own machine to ensure the ports and software is running smoothly.", - "s": "hosting-overview.mdx" - }, - { - "t": "a single client and hosting account is not supported and you will quickly run into issues.", - "s": "hosting-overview.mdx" - }, - { - "t": "a rental contract is created each time a client accepts your offer by renting an instance.", - "s": "hosting-overview.mdx" - }, - { - "t": "a volume offer is an offer for storage space and can be priced separately from gpu offers.", - "s": "hosting-overview.mdx" - }, - { - "t": "all three require a host api key. regular client keys will receive a 401 error. dashboards", - "s": "market-metrics.mdx" - }, - { - "t": "for an 8-gpu machine this determines whether customers can rent 1 2 4 or 8 gpus at a time.", - "s": "optimization-guide.mdx" - }, - { - "t": "before contacting support please verify: your payout account is active and fully verified.", - "s": "payment.mdx" - }, - { - "t": "--- host responsibilities always keep systems stable well-cooled and correctly configured.", - "s": "verification-stages.mdx" - }, - { - "t": "if the machine is offline at this time there is a job that runs hourly to free the space.", - "s": "hosting-overview.mdx" - }, - { - "t": "these can be meaningful selling points for enterprise and compliance-sensitive customers.", - "s": "optimization-guide.mdx" - }, - { - "t": "you must be signed in as a host with at least one registered machine to access this page.", - "s": "payment.mdx" - }, - { - "t": "do not reduce hardware after creation e.g. fewer gpus/ram - this will trigger deverified.", - "s": "understanding-verification.mdx" - }, - { - "t": "beyond that the system evaluates four primary criteria order not indicative of priority :", - "s": "understanding-verification.mdx" - }, - { - "t": "the client s data must be isolated and protected according to the data protection policy", - "s": "hosting-overview.mdx" - }, - { - "t": "if no one bids consider running your own background jobs on the otherwise-idle hardware.", - "s": "optimization-guide.mdx" - }, - { - "t": "invoices generated on friday are generally scheduled to be paid on the following friday.", - "s": "payment.mdx" - }, - { - "t": "to understand current market pricing and utilization trends visit the market stats page.", - "s": "payment.mdx" - }, - { - "t": "then run sudo update-grub and reboot. disable display managers/background gpu processes.", - "s": "vms.mdx" - }, - { - "t": "as a host you can set this number yourself to 0 if you wish to opt out of this feature.", - "s": "hosting-overview.mdx" - }, - { - "t": "the host setup guide is the official documentation for setting up a machine on vast.ai.", - "s": "hosting-overview.mdx" - }, - { - "t": "expect that the gpu is going to be used at close to max capacity for the rental period.", - "s": "hosting-overview.mdx" - }, - { - "t": "vastai metrics gpu-locations --verified true --datacenter true datacenter-verified only", - "s": "market-metrics.mdx" - }, - { - "t": "the core tradeoff: higher prices increase revenue per rental hour but reduce occupancy.", - "s": "optimization-guide.mdx" - }, - { - "t": "direct bank transfers ach payments wire transfers and swift payments are not available.", - "s": "payment.mdx" - }, - { - "t": "the paid status reflects the status of the payout within vast.ai s billing system only.", - "s": "payment.mdx" - }, - { - "t": "before selecting a payout method verify that: the service is available in your country.", - "s": "payment.mdx" - }, - { - "t": "invoices are only generated when: a payout method is connected to your vast.ai account.", - "s": "payment.mdx" - }, - { - "t": "multi-application server tooling and devops e.g. docker compose kubernetes docker build", - "s": "vms.mdx" - }, - { - "t": "you can also directly create a volume offer by running the vastai list volume command.", - "s": "hosting-overview.mdx" - }, - { - "t": "once that filter is selected hosts who offer that discount will become easily visible.", - "s": "hosting-overview.mdx" - }, - { - "t": "you can see the number of available listings as well as information about the machine.", - "s": "hosting-overview.mdx" - }, - { - "t": "customers often prefer very long durations or no maximum. stable high-value contracts.", - "s": "optimization-guide.mdx" - }, - { - "t": "upgrades adding gpus/ram are allowed but may take time to reflect across the platform.", - "s": "understanding-verification.mdx" - }, - { - "t": "it will appear as unverified in search results until the underlying issue is resolved.", - "s": "verification-stages.mdx" - }, - { - "t": "you will require a cpu and a chipset that support intel vt-d or amd-vi. configure bios", - "s": "vms.mdx" - }, - { - "t": "the owners of the business must be listed on the registration or otherwise verifiable", - "s": "datacenter-status.mdx" - }, - { - "t": "the advertised services must be provided until each rental contract s rental end date", - "s": "hosting-overview.mdx" - }, - { - "t": "you can also unlist and relist with entirely new terms new price new offer end date .", - "s": "hosting-overview.mdx" - }, - { - "t": "a few operational basics make a significant difference in your listing s performance.", - "s": "optimization-guide.mdx" - }, - { - "t": "storage: both capacity and bandwidth e.g. nvme impact responsiveness and reliability.", - "s": "understanding-verification.mdx" - }, - { - "t": "offers are included in the secure cloud searches in the cli and in the web interface", - "s": "datacenter-status.mdx" - }, - { - "t": "the template performance chart displays the earnings history from templates. payouts", - "s": "earning.mdx" - }, - { - "t": "drivers/cuda must be correctly installed and compatible use stable latest releases .", - "s": "understanding-verification.mdx" - }, - { - "t": "if you have questions about your tax obligations please consult a tax professional.", - "s": "guide-to-taxes.mdx" - }, - { - "t": "paypal paypal issues tax forms to qualifying users directly through their platform.", - "s": "guide-to-taxes.mdx" - }, - { - "t": "the offer end date which determines how long the offer accepts new rental contracts", - "s": "hosting-overview.mdx" - }, - { - "t": "as the host you are committing to provide the services as advertised in your offer:", - "s": "hosting-overview.mdx" - }, - { - "t": "newer datacenter/workstation gpus are prioritized e.g. b200 > h200 >> 5090 > 4070 .", - "s": "understanding-verification.mdx" - }, - { - "t": "business information such as a certificate of good standing or other recent record", - "s": "datacenter-status.mdx" - }, - { - "t": "setting an end date on a volume will not update if there is an existing gpu offer.", - "s": "hosting-overview.mdx" - }, - { - "t": "vastai metrics gpu-trends rtx 4090 --start 1773298800 --end 1773817200 --step 3600", - "s": "market-metrics.mdx" - }, - { - "t": "at this floor you re at least covering your electricity costs during idle periods.", - "s": "optimization-guide.mdx" - }, - { - "t": "it s a critical lever for balancing demand capture against utilization efficiency.", - "s": "optimization-guide.mdx" - }, - { - "t": "definition: hardware network and software readiness to meet operational standards.", - "s": "understanding-verification.mdx" - }, - { - "t": "virtualization enabling vm support significantly improves verification likelihood.", - "s": "understanding-verification.mdx" - }, - { - "t": "in order to be listed on vast.ai the machine must follow these minimum guidelines:", - "s": "verification-stages.mdx" - }, - { - "t": "the host must provide the hardware/services according to all the advertised specs", - "s": "hosting-overview.mdx" - }, - { - "t": "dedicated machines only - the machine shouldn t be doing other stuff while rented", - "s": "verification-stages.mdx" - }, - { - "t": "there is no manual intervention ensuring consistency scalability and objectivity.", - "s": "verification-stages.mdx" - }, - { - "t": "hosts with vms enabled may want to set higher disk and internet bandwidth prices.", - "s": "vms.mdx" - }, - { - "t": "as a result of a few factors generally higher search rankings in the marketplace", - "s": "datacenter-status.mdx" - }, - { - "t": "for information on thresholds and delivery refer to paypal s tax help resources.", - "s": "guide-to-taxes.mdx" - }, - { - "t": "disk pricing depends on how much storage you have relative to what clients need:", - "s": "optimization-guide.mdx" - }, - { - "t": "partial rentals can leave awkward hard-to-fill gaps leading to underutilization.", - "s": "optimization-guide.mdx" - }, - { - "t": "your account must accumulate at least 20 usd before an invoice can be generated.", - "s": "payment.mdx" - }, - { - "t": "can vast.ai send my payout via direct bank transfer ach swift wire transfer etc.", - "s": "payment.mdx" - }, - { - "t": "the paid status only reflects the payout status within vast.ai s billing system.", - "s": "payment.mdx" - }, - { - "t": "vms support the following features/use-cases that docker-based instances do not:", - "s": "vms.mdx" - }, - { - "t": "contact your payment provider directly with any questions about your tax forms.", - "s": "guide-to-taxes.mdx" - }, - { - "t": "a rental contract is created at 2.00/gpu/hr with a rental end date of march 31.", - "s": "hosting-overview.mdx" - }, - { - "t": "on demand rentals are the highest priority and if met will stop interruptibles.", - "s": "hosting-overview.mdx" - }, - { - "t": "when a client deletes a volume the space is automatically freed on the machine.", - "s": "hosting-overview.mdx" - }, - { - "t": "all three require a host api key. regular client keys will receive a 401 error.", - "s": "market-metrics.mdx" - }, - { - "t": "gpu overview - current supply/demand counts pricing and stats for each gpu type", - "s": "market-metrics.mdx" - }, - { - "t": "set disk pricing closer to your amortized cost. storage is not your bottleneck.", - "s": "optimization-guide.mdx" - }, - { - "t": "a pending invoice has been generated but has not yet entered the payment phase.", - "s": "payment.mdx" - }, - { - "t": "your cpu must support avx instruction set not all lower end cpus support this .", - "s": "verification-stages.mdx" - }, - { - "t": "a verified machine consistently delivers server services to platform standards.", - "s": "verification-stages.mdx" - }, - { - "t": "use this message to identify and investigate the issue in your logs or metrics.", - "s": "verification-stages.mdx" - }, - { - "t": "amdiommu on or inteliommu on depending on whether you have an amd or intel cpu.", - "s": "vms.mdx" - }, - { - "t": "warning: vms interface much more directly with hardware than docker containers.", - "s": "vms.mdx" - }, - { - "t": "confirm whether you qualify for a tax form based on your earnings and location", - "s": "guide-to-taxes.mdx" - }, - { - "t": "if you have raised the pricing you cannot extend the current rental contracts.", - "s": "hosting-overview.mdx" - }, - { - "t": "as a host plan to offer 100% uptime for your machine during the rental period.", - "s": "hosting-overview.mdx" - }, - { - "t": "a rental contract is created at 2.50/gpu/hr with a rental end date of june 30.", - "s": "hosting-overview.mdx" - }, - { - "t": "if you set min gpus to 1 then clients can make instances with 1 2 4 or 8 gpus.", - "s": "hosting-overview.mdx" - }, - { - "t": "this is the fastest way to also see all the offers listed for a given machine.", - "s": "hosting-overview.mdx" - }, - { - "t": "it reduces churn without requiring you to commit to a longer maximum duration.", - "s": "optimization-guide.mdx" - }, - { - "t": "verification is one of the most common filters customers apply when searching.", - "s": "optimization-guide.mdx" - }, - { - "t": "hosts may customize the information that appears on invoices by navigating to:", - "s": "payment.mdx" - }, - { - "t": "pending: vms are not disabled but will try to enable once the machine is idle.", - "s": "vms.mdx" - }, - { - "t": "important: vast.ai does not automatically withhold taxes. international hosts", - "s": "guide-to-taxes.mdx" - }, - { - "t": "states: unverified to verified to potentially deverified to unverified to ...", - "s": "verification-stages.mdx" - }, - { - "t": "the system hasn t yet completed enough testing to confirm platform standards.", - "s": "verification-stages.mdx" - }, - { - "t": "this is not a judgment of quality-only that no platform guarantee exists yet.", - "s": "verification-stages.mdx" - }, - { - "t": "the template performance chart displays the earnings history from templates.", - "s": "earning.mdx" - }, - { - "t": "clients require open ports to directly connect to the machine for most jobs.", - "s": "hosting-overview.mdx" - }, - { - "t": "a short test workload will be executed to assess actual runtime performance.", - "s": "how-to-self-test.mdx" - }, - { - "t": "however you are locked into your pricing terms for the full contract length.", - "s": "optimization-guide.mdx" - }, - { - "t": "data center hosts: do not set a duration longer than you can reliably honor.", - "s": "optimization-guide.mdx" - }, - { - "t": "balanced scaling matters cpu/ram/pcie/bandwidth commensurate with gpu tier .", - "s": "understanding-verification.mdx" - }, - { - "t": "to qualify a machine must pass minimum baseline and health/stability checks.", - "s": "understanding-verification.mdx" - }, - { - "t": "do verify gpu pcie connections provide full bandwidth and are not throttled.", - "s": "understanding-verification.mdx" - }, - { - "t": "in order to apply you will need to first gather the required documentation:", - "s": "datacenter-status.mdx" - }, - { - "t": "this page in the console allows you to manage your earnings from referrals.", - "s": "earning.mdx" - }, - { - "t": "vast.ai is based in california and does not currently collect or remit vat.", - "s": "guide-to-taxes.mdx" - }, - { - "t": "changing the price does not change the rate on any existing rental contract", - "s": "hosting-overview.mdx" - }, - { - "t": "extending the offer end date allows new clients to rent for a longer period", - "s": "hosting-overview.mdx" - }, - { - "t": "you list a 4a100 machine at 2.00/gpu/hr with an offer end date of march 31.", - "s": "hosting-overview.mdx" - }, - { - "t": "location data is cached for up to 2 hours since it changes less frequently.", - "s": "market-metrics.mdx" - }, - { - "t": "the optimum sits somewhere in the middle and shifts with supply and demand.", - "s": "optimization-guide.mdx" - }, - { - "t": "the min bid price is a floor for the bidding system not an on-demand price.", - "s": "optimization-guide.mdx" - }, - { - "t": "ensure you have the latest nvidia drivers installed at the time of listing.", - "s": "optimization-guide.mdx" - }, - { - "t": "then for each machine id you will need to find the available instance ids.", - "s": "hosting-overview.mdx" - }, - { - "t": "during the self-test the following components and conditions are verified:", - "s": "how-to-self-test.mdx" - }, - { - "t": "your floor price should not be close to your expected actual rental price.", - "s": "optimization-guide.mdx" - }, - { - "t": "settings alone won t help if your machines aren t reliable and up to date.", - "s": "optimization-guide.mdx" - }, - { - "t": "there are no restrictions limitations or compliance holds on your account.", - "s": "payment.mdx" - }, - { - "t": "there are no account limitations restrictions compliance reviews or holds.", - "s": "payment.mdx" - }, - { - "t": "alternatively check out gpu market prices or the host earnings calculator.", - "s": "payment.mdx" - }, - { - "t": "eliminate pcie thermal and power bottlenecks to maintain sustained clocks.", - "s": "understanding-verification.mdx" - }, - { - "t": "what it means: a previously verified machine no longer meets requirements.", - "s": "verification-stages.mdx" - }, - { - "t": "once you accept your account will then be converted to a hosting account.", - "s": "hosting-overview.mdx" - }, - { - "t": "by listing your machine you create an offer visible to potential clients.", - "s": "hosting-overview.mdx" - }, - { - "t": "these workloads are transient. use short-term instances for this segment.", - "s": "optimization-guide.mdx" - }, - { - "t": "researchers and developers testing models before committing to long runs.", - "s": "optimization-guide.mdx" - }, - { - "t": "verify gpu pcie connections provide full bandwidth and are not throttled.", - "s": "understanding-verification.mdx" - }, - { - "t": "the final verification outcome still depends on the factors listed below.", - "s": "understanding-verification.mdx" - }, - { - "t": "ensure drivers/cuda and networking are correctly installed and reachable.", - "s": "verification-stages.mdx" - }, - { - "t": "hardware/system errors e.g. failing storage insufficient pcie bandwidth .", - "s": "verification-stages.mdx" - }, - { - "t": "avoid downgrading hardware capacity e.g. reducing gpu count disk or ram .", - "s": "verification-stages.mdx" - }, - { - "t": "program analysis for cuda-performance optimization e.g. via nvidia nsight", - "s": "vms.mdx" - }, - { - "t": "your account can now list machines that are running the daemon software.", - "s": "hosting-overview.mdx" - }, - { - "t": "hover over the rental button to see the discount rates that are offered.", - "s": "hosting-overview.mdx" - }, - { - "t": "understanding this helps you target the right segment for your hardware:", - "s": "optimization-guide.mdx" - }, - { - "t": "this allows rentals to automatically continue beyond their initial term.", - "s": "optimization-guide.mdx" - }, - { - "t": "cpu: favor strong server-grade cpus actual measured performance matters.", - "s": "understanding-verification.mdx" - }, - { - "t": "do offer in-demand gpu models with adequate vram and balanced resources.", - "s": "understanding-verification.mdx" - }, - { - "t": "vastai metrics gpu-trends rtx 4090 --full all data points vs sampled 20", - "s": "market-metrics.mdx" - }, - { - "t": "over-committing especially data centers price lock-in on long contracts", - "s": "optimization-guide.mdx" - }, - { - "t": "gpu issues e.g. nvidia-smi/nvml failures container device init errors .", - "s": "verification-stages.mdx" - }, - { - "t": "you will require a cpu and a chipset that support intel vt-d or amd-vi.", - "s": "vms.mdx" - }, - { - "t": "make sure to read the section on iommu if you have an amd epyc system.", - "s": "hosting-overview.mdx" - }, - { - "t": "cli via vastai metrics subcommands requires pip install vastai v1.0.4+", - "s": "market-metrics.mdx" - }, - { - "t": "vastai metrics gpu-locations --gpu rtx 4090 h100sxm specific gpu types", - "s": "market-metrics.mdx" - }, - { - "t": "test your machines before listing and after any configuration changes.", - "s": "optimization-guide.mdx" - }, - { - "t": "any required identity tax or business verification has been completed.", - "s": "payment.mdx" - }, - { - "t": "you must have a valid payout method connected to your vast.ai account.", - "s": "payment.mdx" - }, - { - "t": "when issues arise fix them promptly-the automation will update status.", - "s": "verification-stages.mdx" - }, - { - "t": "a red error indicator will appear on your machine in the machines tab.", - "s": "verification-stages.mdx" - }, - { - "t": "vms interface much more directly with hardware than docker containers.", - "s": "vms.mdx" - }, - { - "t": "here you can generate and download invoices for your earning payouts.", - "s": "earning.mdx" - }, - { - "t": "planning maintenance so that no active rental contracts are disrupted", - "s": "hosting-overview.mdx" - }, - { - "t": "in addition to gpu offers hosts can create volume offers on machines.", - "s": "hosting-overview.mdx" - }, - { - "t": "if the test fails: the cli will display detailed reasons for failure.", - "s": "how-to-self-test.mdx" - }, - { - "t": "week 2 friday: payment is submitted to your selected payout provider.", - "s": "payment.mdx" - }, - { - "t": "offer in-demand gpu models with adequate vram and balanced resources.", - "s": "understanding-verification.mdx" - }, - { - "t": "favor dc/workstation gpus ensure pcie lanes match cpu/ram to gpu tier", - "s": "understanding-verification.mdx" - }, - { - "t": "maintain compatible drivers/cuda and dependable symmetric networking.", - "s": "verification-stages.mdx" - }, - { - "t": "open /etc/default/grub and add to the grubcmdlinelinux the following:", - "s": "vms.mdx" - }, - { - "t": "ensure your tax information is up to date with your payment provider", - "s": "guide-to-taxes.mdx" - }, - { - "t": "market conditions change over time so earnings cannot be guaranteed.", - "s": "payment.mdx" - }, - { - "t": "> note: higher reliability greatly improves verification likelihood.", - "s": "understanding-verification.mdx" - }, - { - "t": "do investigate red error indicators quickly review logs and metrics.", - "s": "verification-stages.mdx" - }, - { - "t": "stripe connect stripe manages tax form delivery via stripe express.", - "s": "guide-to-taxes.mdx" - }, - { - "t": "the pricing you set is the rate you ll be paid for that commitment.", - "s": "hosting-overview.mdx" - }, - { - "t": "the ui shows june 30 as the latest rental end date on this machine.", - "s": "hosting-overview.mdx" - }, - { - "t": "the preferred method of testing your own machine is to run the cli.", - "s": "hosting-overview.mdx" - }, - { - "t": "gpu locations - geographic distribution of gpus across the platform", - "s": "market-metrics.mdx" - }, - { - "t": "why does my invoice show paid when i haven t received the funds yet", - "s": "payment.mdx" - }, - { - "t": "enabling vm support significantly improves verification likelihood.", - "s": "understanding-verification.mdx" - }, - { - "t": "downgrading hardware capacity e.g. reducing gpu count disk or ram .", - "s": "verification-stages.mdx" - }, - { - "t": "pip install --upgrade vastai current snapshot - vastai metrics gpu", - "s": "market-metrics.mdx" - }, - { - "t": "different customer types have very different duration preferences.", - "s": "optimization-guide.mdx" - }, - { - "t": "use market data and your competitors pricing as a reference point.", - "s": "optimization-guide.mdx" - }, - { - "t": "the min gpu setting controls the smallest gpu partition you offer.", - "s": "optimization-guide.mdx" - }, - { - "t": "if either requirement is not met an invoice will not be generated.", - "s": "payment.mdx" - }, - { - "t": "government issued ids such as a passport for the business owner s", - "s": "datacenter-status.mdx" - }, - { - "t": "once you have the requiremed documentation to apply please visit:", - "s": "datacenter-status.mdx" - }, - { - "t": "you can find more information about vast s referral program here.", - "s": "earning.mdx" - }, - { - "t": "if you are using vast.ai as a client do not use the same account.", - "s": "hosting-overview.mdx" - }, - { - "t": "on february 1 client b rents the other 2 gpus from the new offer.", - "s": "hosting-overview.mdx" - }, - { - "t": "when clicking on the set pricing button there is a min gpu field.", - "s": "hosting-overview.mdx" - }, - { - "t": "this has the benefit of showing you the entire client experience.", - "s": "hosting-overview.mdx" - }, - { - "t": "see full reference. historical trends - vastai metrics gpu-trends", - "s": "market-metrics.mdx" - }, - { - "t": "your account can receive business payments for services provided.", - "s": "payment.mdx" - }, - { - "t": "run jobs only through the jobs tab or the create job cli command.", - "s": "verification-stages.mdx" - }, - { - "t": "investigate red error indicators quickly review logs and metrics.", - "s": "verification-stages.mdx" - }, - { - "t": "what it means: newly added machines or machines under evaluation.", - "s": "verification-stages.mdx" - }, - { - "t": "there is a link in the first paragraph to the hosting agreement.", - "s": "hosting-overview.mdx" - }, - { - "t": "setting a gpu offer end date will update volume offer end dates.", - "s": "hosting-overview.mdx" - }, - { - "t": "before running the test make sure: your machine has been listed.", - "s": "how-to-self-test.mdx" - }, - { - "t": "see full reference. location data - vastai metrics gpu-locations", - "s": "market-metrics.mdx" - }, - { - "t": "lower prices fill your machines faster but each hour earns less.", - "s": "optimization-guide.mdx" - }, - { - "t": "it typically takes up to two weeks to receive your first payout.", - "s": "payment.mdx" - }, - { - "t": "your payout provider is not requesting additional documentation.", - "s": "payment.mdx" - }, - { - "t": "ensure required ports are open and accessible a static ip helps.", - "s": "understanding-verification.mdx" - }, - { - "t": "common causes network instability closed ports or low bandwidth.", - "s": "verification-stages.mdx" - }, - { - "t": "if you qualify for a form stripe will issue it directly to you.", - "s": "guide-to-taxes.mdx" - }, - { - "t": "the show machine command will show all your connected machines.", - "s": "hosting-overview.mdx" - }, - { - "t": "for example if market rates rise you can t adjust mid-contract.", - "s": "optimization-guide.mdx" - }, - { - "t": "your account balance must meet the 20 minimum payout threshold.", - "s": "payment.mdx" - }, - { - "t": "avoid niche/mismatched configurations with low renter interest.", - "s": "understanding-verification.mdx" - }, - { - "t": "most error messages are cleared within 1-2 hours of resolution.", - "s": "verification-stages.mdx" - }, - { - "t": "do pass the self-test maintain steady uptime during evaluation.", - "s": "verification-stages.mdx" - }, - { - "t": "a contract or invoice from the datacenter linking the business", - "s": "datacenter-status.mdx" - }, - { - "t": "in the payout account section you can set up a payout account.", - "s": "earning.mdx" - }, - { - "t": "vast.ai currently supports payouts through: wise paypal stripe", - "s": "payment.mdx" - }, - { - "t": "do monitor health uptime thermals power and respond to alerts.", - "s": "verification-stages.mdx" - }, - { - "t": "configuring vms on your machine checking vm enablement status.", - "s": "vms.mdx" - }, - { - "t": "one of the following third party certificates must be active:", - "s": "datacenter-status.mdx" - }, - { - "t": "the business must be registered and up to date on all filings", - "s": "datacenter-status.mdx" - }, - { - "t": "vast does not offer support for getting your machine working.", - "s": "hosting-overview.mdx" - }, - { - "t": "the on-demand price is the price per hour for the gpu rental.", - "s": "hosting-overview.mdx" - }, - { - "t": "maintain strong reliability to remain attractive once listed.", - "s": "understanding-verification.mdx" - }, - { - "t": "install latest stable compatible versions use create job only", - "s": "understanding-verification.mdx" - }, - { - "t": "sustained 99.99% up to 99.9999%+ uptime is typically favored.", - "s": "understanding-verification.mdx" - }, - { - "t": "keep the environment clean schedule work via create job only.", - "s": "verification-stages.mdx" - }, - { - "t": "volume offers will be unlisted when the machine is unlisted.", - "s": "hosting-overview.mdx" - }, - { - "t": "vastai set api-key 123123123123123 step 2: run the self-test", - "s": "how-to-self-test.mdx" - }, - { - "t": "returns current supply demand and pricing for all gpu types.", - "s": "market-metrics.mdx" - }, - { - "t": "setting it like an on-demand price leaving gpus idle instead", - "s": "optimization-guide.mdx" - }, - { - "t": "proactively monitor hardware health and perform maintenance.", - "s": "understanding-verification.mdx" - }, - { - "t": "proactive monitoring steady power/thermals minimize restarts", - "s": "understanding-verification.mdx" - }, - { - "t": "fix pcie/thermal bottlenecks maintain clocks correct drivers", - "s": "understanding-verification.mdx" - }, - { - "t": "scale up add gpus/ram avoid reductions that cause deverified", - "s": "understanding-verification.mdx" - }, - { - "t": "avoid misconfigurations that suppress benchmark performance.", - "s": "understanding-verification.mdx" - }, - { - "t": "you can view your payout history for a selected date range.", - "s": "earning.mdx" - }, - { - "t": "volume offer end dates must align with gpu offer end dates.", - "s": "hosting-overview.mdx" - }, - { - "t": "if the test says the machine is not found or not rentable :", - "s": "how-to-self-test.mdx" - }, - { - "t": "if the test passes you ll see: test completed successfully.", - "s": "how-to-self-test.mdx" - }, - { - "t": "all machines at 1x fragmentation or all at 8x missed demand", - "s": "optimization-guide.mdx" - }, - { - "t": "choose popular gpus/vram balance specs maintain reliability", - "s": "understanding-verification.mdx" - }, - { - "t": "avoid pairing high-end gpus with under-provisioned cpu/ram.", - "s": "understanding-verification.mdx" - }, - { - "t": "monitor health uptime thermals power and respond to alerts.", - "s": "verification-stages.mdx" - }, - { - "t": "allowing thermal power or bandwidth instability under load.", - "s": "verification-stages.mdx" - }, - { - "t": "a previously verified machine no longer meets requirements.", - "s": "verification-stages.mdx" - }, - { - "t": "system continuous monitoring detects sustained degradation.", - "s": "verification-stages.mdx" - }, - { - "t": "avoid ignoring warnings or allowing instability to persist.", - "s": "verification-stages.mdx" - }, - { - "t": "managing your offers including pricing and offer end dates", - "s": "hosting-overview.mdx" - }, - { - "t": "for full details see the hosting agreement. offer end date", - "s": "hosting-overview.mdx" - }, - { - "t": "defaults to rtx 5090 4090 and 3090 over the last 24 hours.", - "s": "market-metrics.mdx" - }, - { - "t": "each endpoint allows up to 5 requests per second per user.", - "s": "market-metrics.mdx" - }, - { - "t": "i see my invoice is marked as pending. what does this mean", - "s": "payment.mdx" - }, - { - "t": "other billing details you would like displayed on invoices", - "s": "payment.mdx" - }, - { - "t": "important: vast.ai does not automatically withhold taxes.", - "s": "guide-to-taxes.mdx" - }, - { - "t": "the reserved discount pricing is determined by the hosts.", - "s": "hosting-overview.mdx" - }, - { - "t": "common issues to check: make sure to test the networking.", - "s": "hosting-overview.mdx" - }, - { - "t": "vastai self-test machine 12345 step 3: review the results", - "s": "how-to-self-test.mdx" - }, - { - "t": "vastai metrics gpu-locations --rented false only unrented", - "s": "market-metrics.mdx" - }, - { - "t": "customers often prefer very long durations or no maximum.", - "s": "optimization-guide.mdx" - }, - { - "t": "review your utilization patterns and adjust periodically.", - "s": "optimization-guide.mdx" - }, - { - "t": "your balance has reached the 20 minimum payout threshold.", - "s": "payment.mdx" - }, - { - "t": "vast.ai only supports payouts through: wise paypal stripe", - "s": "payment.mdx" - }, - { - "t": "niche/mismatched configurations with low renter interest.", - "s": "understanding-verification.mdx" - }, - { - "t": "network high-speed symmetric stable bandwidth is favored.", - "s": "understanding-verification.mdx" - }, - { - "t": "keep systems stable well-cooled and correctly configured.", - "s": "verification-stages.mdx" - }, - { - "t": "at least 1x pcie for every 2.5 tflops of gpu performance.", - "s": "verification-stages.mdx" - }, - { - "t": "container launch failures or repeated runtime exceptions.", - "s": "verification-stages.mdx" - }, - { - "t": "validate thermal/power headroom and bandwidth under load.", - "s": "verification-stages.mdx" - }, - { - "t": "example: multiple rental contracts from different offers", - "s": "hosting-overview.mdx" - }, - { - "t": "follow the official setup guide to install the vast cli:", - "s": "how-to-self-test.mdx" - }, - { - "t": "three views are available at cloud.vast.ai/host/market/:", - "s": "market-metrics.mdx" - }, - { - "t": "vastai metrics gpu-trends rtx 4090 h100sxm multiple gpus", - "s": "market-metrics.mdx" - }, - { - "t": "this is one of the most commonly misconfigured settings.", - "s": "optimization-guide.mdx" - }, - { - "t": "keep network connectivity stable avoid jitter and drops.", - "s": "understanding-verification.mdx" - }, - { - "t": "common questions how can i have earnings as a vast user", - "s": "earning.mdx" - }, - { - "t": "vastai list machine -v -z -g .5 -e 12/23/2027 -r 0 -m 1", - "s": "hosting-overview.mdx" - }, - { - "t": "once your account is created open the host setup guide.", - "s": "hosting-overview.mdx" - }, - { - "t": "the offer accepts new rentals until the offer end date.", - "s": "hosting-overview.mdx" - }, - { - "t": "returns time-series data for supply demand and pricing.", - "s": "market-metrics.mdx" - }, - { - "t": "unrelated background workloads that consume gpu/cpu/io.", - "s": "verification-stages.mdx" - }, - { - "t": "keep drivers/cuda on compatible latest stable versions.", - "s": "verification-stages.mdx" - }, - { - "t": "some hosts may also need to add the following settings:", - "s": "vms.mdx" - }, - { - "t": "direct discord or slack channel to vast.ai for support", - "s": "datacenter-status.mdx" - }, - { - "t": "the company must sign the datacenter hosting agreement", - "s": "datacenter-status.mdx" - }, - { - "t": "it s a great way to track how your outreach is growing", - "s": "earning.mdx" - }, - { - "t": "clients have high expectations coming from aws or gcp.", - "s": "hosting-overview.mdx" - }, - { - "t": "these values are determined by the individual host s .", - "s": "hosting-overview.mdx" - }, - { - "t": "there are two supported ways to test your own machine.", - "s": "hosting-overview.mdx" - }, - { - "t": "then you can start an ubuntu terminal and run the cli.", - "s": "hosting-overview.mdx" - }, - { - "t": "replace 12345 with your actual machine id in question.", - "s": "hosting-overview.mdx" - }, - { - "t": "you can also query the data directly via the rest api.", - "s": "market-metrics.mdx" - }, - { - "t": "duration controls how long a rental contract can last.", - "s": "optimization-guide.mdx" - }, - { - "t": "upgrade links verify routing/ports monitor jitter/loss", - "s": "understanding-verification.mdx" - }, - { - "t": "proper vm support is very sensitive to hardware setup.", - "s": "vms.mdx" - }, - { - "t": "overall machine reliability under simulated workloads", - "s": "how-to-self-test.mdx" - }, - { - "t": "a payout method is connected to your vast.ai account.", - "s": "payment.mdx" - }, - { - "t": "keep systems clean run workloads via create job only.", - "s": "understanding-verification.mdx" - }, - { - "t": "pairing high-end gpus with under-provisioned cpu/ram.", - "s": "understanding-verification.mdx" - }, - { - "t": "letting hidden background services consume resources.", - "s": "understanding-verification.mdx" - }, - { - "t": "ignoring warnings or allowing instability to persist.", - "s": "verification-stages.mdx" - }, - { - "t": "> note: high-end gpus are more likely to be verified.", - "s": "verification-stages.mdx" - }, - { - "t": "either you disabled vms or our previous tests failed.", - "s": "vms.mdx" - }, - { - "t": "the mingpu param controlling slicing explained below", - "s": "hosting-overview.mdx" - }, - { - "t": "space is listed in gigabytes and price in /gb/month.", - "s": "hosting-overview.mdx" - }, - { - "t": "yes but changes only affect future rental contracts.", - "s": "hosting-overview.mdx" - }, - { - "t": "existing rental contracts keep their original terms:", - "s": "hosting-overview.mdx" - }, - { - "t": "you must keep the machine available until this date.", - "s": "hosting-overview.mdx" - }, - { - "t": "1.2 authenticate your cli with your vast.ai account:", - "s": "how-to-self-test.mdx" - }, - { - "t": "vastai metrics gpu --verified true --datacenter true", - "s": "market-metrics.mdx" - }, - { - "t": "vastai metrics gpu-trends rtx 4090 --raw json output", - "s": "market-metrics.mdx" - }, - { - "t": "breaking a contract early carries a serious penalty.", - "s": "optimization-guide.mdx" - }, - { - "t": "overheating undervolting or unstable power delivery.", - "s": "understanding-verification.mdx" - }, - { - "t": "keep the latest drivers/cuda aligned with workloads.", - "s": "understanding-verification.mdx" - }, - { - "t": "prefer nvme monitor smart ensure sustained bandwidth", - "s": "understanding-verification.mdx" - }, - { - "t": "do maintain consistent uptime with minimal downtime.", - "s": "understanding-verification.mdx" - }, - { - "t": "fast reliable internet: at least 10mbps per machine.", - "s": "verification-stages.mdx" - }, - { - "t": "at least 1 physical cpu core 2 hyperthreads per gpu.", - "s": "verification-stages.mdx" - }, - { - "t": "re-check health after changes to confirm resolution.", - "s": "verification-stages.mdx" - }, - { - "t": "vat is not currently specified on vast.ai invoices.", - "s": "guide-to-taxes.mdx" - }, - { - "t": "the hardware can not be used for any other purposes", - "s": "hosting-overview.mdx" - }, - { - "t": "./vastai search offers machineid 12345 verified any", - "s": "hosting-overview.mdx" - }, - { - "t": "client a s contract stays at 2.00 through march 31.", - "s": "hosting-overview.mdx" - }, - { - "t": "they can additionally be unlisted with the command:", - "s": "hosting-overview.mdx" - }, - { - "t": "friday: invoice is generated and marked as pending.", - "s": "payment.mdx" - }, - { - "t": "--- frequently asked questions when will i get paid", - "s": "payment.mdx" - }, - { - "t": "confirm required ports and end-to-end reachability.", - "s": "understanding-verification.mdx" - }, - { - "t": "avoid unnecessary reboots or configuration changes.", - "s": "verification-stages.mdx" - }, - { - "t": "windows graphics e.g. for rendering or cloud gaming", - "s": "vms.mdx" - }, - { - "t": "for further reference refer to preparing the iommu.", - "s": "vms.mdx" - }, - { - "t": "on most machines this should be enabled by default.", - "s": "vms.mdx" - }, - { - "t": "client b s contract stays at 2.50 through june 30.", - "s": "hosting-overview.mdx" - }, - { - "t": "the cli will display detailed reasons for failure.", - "s": "how-to-self-test.mdx" - }, - { - "t": "try un-listing your machine then listing it again.", - "s": "how-to-self-test.mdx" - }, - { - "t": "host earnings depend on several factors including:", - "s": "payment.mdx" - }, - { - "t": "network instability closed ports or low bandwidth.", - "s": "verification-stages.mdx" - }, - { - "t": "reducing hardware below the created specification.", - "s": "verification-stages.mdx" - }, - { - "t": "check that virtualization is enabled in your bios.", - "s": "vms.mdx" - }, - { - "t": "vastai unlist volume out of sync rental contracts", - "s": "hosting-overview.mdx" - }, - { - "t": "there are no active clients currently renting it.", - "s": "how-to-self-test.mdx" - }, - { - "t": "what s the right fragmentation vs. demand balance", - "s": "optimization-guide.mdx" - }, - { - "t": "every setting in this guide affects that balance.", - "s": "optimization-guide.mdx" - }, - { - "t": "your payout account is active and fully verified.", - "s": "payment.mdx" - }, - { - "t": "maintain consistent uptime with minimal downtime.", - "s": "understanding-verification.mdx" - }, - { - "t": "high-speed symmetric stable bandwidth is favored.", - "s": "understanding-verification.mdx" - }, - { - "t": "all gpus on the machine must be of the same type.", - "s": "verification-stages.mdx" - }, - { - "t": "seconds between data points e.g. 3600 for hourly", - "s": "market-metrics.mdx" - }, - { - "t": "pricing in a vacuum without checking competitors", - "s": "optimization-guide.mdx" - }, - { - "t": "manage thermals and power to prevent throttling.", - "s": "understanding-verification.mdx" - }, - { - "t": "step-by-step guide step 0: install the vast cli", - "s": "how-to-self-test.mdx" - }, - { - "t": "market metrics data is updated every 5 minutes.", - "s": "market-metrics.mdx" - }, - { - "t": "set disk pricing closer to your amortized cost.", - "s": "optimization-guide.mdx" - }, - { - "t": "other due dilligence documentation as required", - "s": "datacenter-status.mdx" - }, - { - "t": "there are three ways to access market metrics:", - "s": "market-metrics.mdx" - }, - { - "t": "vastai metrics gpu-locations --raw json output", - "s": "market-metrics.mdx" - }, - { - "t": "think of your listing as a product on a shelf.", - "s": "optimization-guide.mdx" - }, - { - "t": "set disk pricing higher than you might expect.", - "s": "optimization-guide.mdx" - }, - { - "t": "vram: more vram improves performance profiles.", - "s": "understanding-verification.mdx" - }, - { - "t": "the min bid price for interruptible instances", - "s": "hosting-overview.mdx" - }, - { - "t": "use the filters in the ui to select reserved.", - "s": "hosting-overview.mdx" - }, - { - "t": "apply the suggested fixes and rerun the test.", - "s": "how-to-self-test.mdx" - }, - { - "t": "historical trends - vastai metrics gpu-trends", - "s": "market-metrics.mdx" - }, - { - "t": "vastai metrics gpu-trends rtx 4090 single gpu", - "s": "market-metrics.mdx" - }, - { - "t": "regular client keys will receive a 401 error.", - "s": "market-metrics.mdx" - }, - { - "t": "are you over- or under-provisioned on storage", - "s": "optimization-guide.mdx" - }, - { - "t": "when your machines are idle you earn nothing.", - "s": "optimization-guide.mdx" - }, - { - "t": "before selecting a payout method verify that:", - "s": "payment.mdx" - }, - { - "t": "avoid frequent restarts or unplanned outages.", - "s": "understanding-verification.mdx" - }, - { - "t": "fast ssd storage with at least 128gb per gpu.", - "s": "verification-stages.mdx" - }, - { - "t": "at least 3 open ports per gpu 100 recommended", - "s": "verification-stages.mdx" - }, - { - "t": "--- minimum guidelines for listing on vast.ai", - "s": "verification-stages.mdx" - }, - { - "t": "the owner must undergo identity verification", - "s": "datacenter-status.mdx" - }, - { - "t": "hosts sell gpu resources on the marketplace.", - "s": "hosting-overview.mdx" - }, - { - "t": "together these form the terms of your offer.", - "s": "hosting-overview.mdx" - }, - { - "t": "on january 20 you decide to raise the price.", - "s": "hosting-overview.mdx" - }, - { - "t": "1.1 get your api key: api keys documentation", - "s": "how-to-self-test.mdx" - }, - { - "t": "location data - vastai metrics gpu-locations", - "s": "market-metrics.mdx" - }, - { - "t": "this depends entirely on your network setup.", - "s": "optimization-guide.mdx" - }, - { - "t": "--- payout schedule minimum payout threshold", - "s": "payment.mdx" - }, - { - "t": "for full details see the hosting agreement.", - "s": "hosting-overview.mdx" - }, - { - "t": "vastai metrics gpu-trends all all gpu types", - "s": "market-metrics.mdx" - }, - { - "t": "current snapshot - verified datacenter gpus", - "s": "market-metrics.mdx" - }, - { - "t": "your account can receive business payments.", - "s": "payment.mdx" - }, - { - "t": "hardware gpu: type memory and count matter.", - "s": "understanding-verification.mdx" - }, - { - "t": "you must create a new account for hosting.", - "s": "hosting-overview.mdx" - }, - { - "t": "rest api endpoints see api reference below", - "s": "market-metrics.mdx" - }, - { - "t": "use short-term instances for this segment.", - "s": "optimization-guide.mdx" - }, - { - "t": "to view and download invoices navigate to:", - "s": "payment.mdx" - }, - { - "t": "do use the latest compatible drivers/cuda.", - "s": "understanding-verification.mdx" - }, - { - "t": "an open port range mapped to each machine.", - "s": "verification-stages.mdx" - }, - { - "t": "cuda version greater than or equal to 12.0", - "s": "verification-stages.mdx" - }, - { - "t": "the equipment must be owned by a business", - "s": "datacenter-status.mdx" - }, - { - "t": "it includes both paid and unpaid amounts.", - "s": "earning.mdx" - }, - { - "t": "historical trends - rtx 4090 hourly steps", - "s": "market-metrics.mdx" - }, - { - "t": "pass your host api key as a bearer token.", - "s": "market-metrics.mdx" - }, - { - "t": "--- quick reference: settings at a glance", - "s": "optimization-guide.mdx" - }, - { - "t": "the service is available in your country.", - "s": "payment.mdx" - }, - { - "t": "invoices are generated weekly on fridays.", - "s": "payment.mdx" - }, - { - "t": "minimum guidelines for listing on vast.ai", - "s": "verification-stages.mdx" - }, - { - "t": "common questions does vast.ai handle vat", - "s": "guide-to-taxes.mdx" - }, - { - "t": "what rate balances occupancy and revenue", - "s": "optimization-guide.mdx" - }, - { - "t": "what s your absolute floor cost of power", - "s": "optimization-guide.mdx" - }, - { - "t": "from the payout history section you can:", - "s": "payment.mdx" - }, - { - "t": "configuring your machine to support vms.", - "s": "vms.mdx" - }, - { - "t": "how the offer becomes a rental contract", - "s": "hosting-overview.mdx" - }, - { - "t": "how can i have earnings as a vast user", - "s": "earning.mdx" - }, - { - "t": "file your taxes accurately and on time", - "s": "guide-to-taxes.mdx" - }, - { - "t": "are drivers current at time of listing", - "s": "optimization-guide.mdx" - }, - { - "t": "only commit to what you can guarantee.", - "s": "optimization-guide.mdx" - }, - { - "t": "my account is not generating invoices.", - "s": "payment.mdx" - }, - { - "t": "how much can i make hosting on vast.ai", - "s": "payment.mdx" - }, - { - "t": "i see my invoice is marked as pending.", - "s": "payment.mdx" - }, - { - "t": "off: vms are disabled on your machine.", - "s": "vms.mdx" - } -]; - const OLD_DOC_ASSETS = [ - { - "src": "/images/console-earning.webp", - "s": "earning.mdx" - }, - { - "src": "/images/console-earning-2.webp", - "s": "earning.mdx" - }, - { - "src": "/images/console-earning-3.webp", - "s": "earning.mdx" - }, - { - "src": "/images/console-earning-4.webp", - "s": "earning.mdx" - }, - { - "src": "/images/offer-contract-lifecycle.png", - "s": "hosting-overview.mdx" - }, - { - "src": "/images/hosting-overview.webp", - "s": "hosting-overview.mdx" - }, - { - "src": "/images/hosting-overview-2.webp", - "s": "hosting-overview.mdx" - } -]; - const MOVED_OLD_DOC_GUIDANCE = [ - { - "path": "/host/account-hosting-agreement", - "t": "Use this page when a host account, hosting agreement, or Machines tab is not behaving as expected.", - "s": "hosting-overview.mdx" - }, - { - "path": "/host/account-hosting-agreement", - "t": "Yes. Use a dedicated account for hosting. Do not use the same account for both client rentals and host operations, because that setup is unsupported and can cause account and machine-management issues.", - "s": "hosting-overview.mdx" - }, - { - "path": "/host/account-hosting-agreement", - "t": "Once your host account is created, open the host setup guide. There is a link in the first paragraph to the hosting agreement. Read through the agreement. Once you accept, your account is converted to a hosting account, and a Machines link appears in the navigation.", - "s": "hosting-overview.mdx" - }, - { - "path": "/host/account-hosting-agreement", - "t": "Your account must be enabled for hosting and the hosting agreement must be accepted. After the account is converted to a host account, the Machines navigation and other host features should become available.", - "s": "hosting-overview.mdx" - }, - { - "path": "/host/hardware-prep", - "t": "Prepare the host machine before installing the Vast host software, including OS, BIOS, driver, power, thermal, and stability checks.", - "s": "hosting-overview.mdx" - }, - { - "path": "/host/hardware-prep", - "t": "Before installing, make sure the host has supported same-type GPUs, native Ubuntu/Linux, an AVX-capable CPU, at least one physical CPU core per listed GPU, adequate RAM, fast SSD/NVMe storage, compatible GPU drivers, stable public networking, and enough direct ports.", - "s": "verification-stages.mdx" - }, - { - "path": "/host/hardware-prep", - "t": "For verification, the self-test preflight enforces the current minimum thresholds (CUDA support, reliability gate, direct ports, PCIe bandwidth, internet bandwidth, VRAM, system RAM).", - "s": "how-to-self-test.mdx" - }, - { - "path": "/host/hardware-prep", - "t": "Current listing guidance requires Ubuntu 24.04 LTS. Confirm it works with your GPU driver, Docker, storage setup, and the Vast host installer before listing a production host.", - "s": "verification-stages.mdx" - }, - { - "path": "/host/hardware-prep", - "t": "Use a stable NVIDIA driver that supports your GPU and a CUDA runtime compatible with the Vast self-test image family.", - "s": "understanding-verification.mdx" - }, - { - "path": "/host/hardware-prep", - "t": "Enable virtualization and IOMMU in BIOS if you plan to support VMs; check IOMMU guidance especially on AMD EPYC systems.", - "s": "vms.mdx" - }, - { - "path": "/host/hardware-prep", - "t": "Disable unattended kernel and driver updates; plan updates through Maintenance Windows instead.", - "s": "hosting-overview.mdx" - }, - { - "path": "/host/installing-host-software", - "t": "Install the Vast host software from the official setup flow, then verify that the daemon, Docker, storage, and GPU runtime are healthy.", - "s": "hosting-overview.mdx" - }, - { - "path": "/host/installing-host-software", - "t": "Copy the current install command from the official Vast host setup page after your account is host-enabled.", - "s": "hosting-overview.mdx" - }, - { - "path": "/host/storage-setup", - "t": "Use fast SSD/NVMe storage mounted predictably for Docker and Vast workloads. Current listing guidance expects at least 128 GB of fast SSD storage per GPU.", - "s": "verification-stages.mdx" - }, - { - "path": "/host/storage-setup", - "t": "Space allocated to rented volume offers is subtracted from the storage available to GPU offers.", - "s": "hosting-overview.mdx" - }, - { - "path": "/host/network-ports", - "t": "Configure public networking, direct ports, firewalls, and router forwarding before verification.", - "s": "hosting-overview.mdx" - }, - { - "path": "/host/network-ports", - "t": "The self-test requires at least 3 direct ports per listed GPU.", - "s": "verification-stages.mdx" - }, - { - "path": "/host/supported-hardware", - "t": "Use this page before buying hardware, installing the host software, or listing a machine.", - "s": "verification-stages.mdx" - }, - { - "path": "/host/supported-hardware", - "t": "Passing the minimum requirements makes a machine eligible for verification. It does not guarantee verification, search placement, rentals, or earnings.", - "s": "how-to-self-test.mdx" - }, - { - "path": "/host/supported-hardware", - "t": "These are baseline expectations for listing a machine:", - "s": "verification-stages.mdx" - }, - { - "path": "/host/supported-hardware", - "t": "Do not size the rest of the machine as an afterthought. A high-end GPU host with weak CPU, low RAM, poor PCIe layout, slow storage, or unstable networking is less likely to pass verification or deliver good renter experience.", - "s": "understanding-verification.mdx" - }, - { - "path": "/host/supported-hardware", - "t": "VM support is optional, but it can affect search visibility and demand for some renters. VM support depends on CPU, chipset, BIOS, IOMMU, kernel, and GPU behavior.", - "s": "vms.mdx" - }, - { - "path": "/host/maintenance-windows", - "t": "Wait until active rental contracts have ended or there are no running instances before planned maintenance. Unlisting prevents new rental contracts, but it does not end existing contracts.", - "s": "hosting-overview.mdx" - }, - { - "path": "/host/reliability-uptime", - "t": "Reliability can drop when the platform observes instability, failed starts, disconnections, downtime, network failures, driver or GPU failures, thermal or power events, or active rental disruption.", - "s": "understanding-verification.mdx" - }, - { - "path": "/host/reliability-uptime", - "t": "Reliability greater than 0.90 is a self-test preflight gate.", - "s": "how-to-self-test.mdx" - } -]; - const PAGE_PARENT_SOURCES = { - "/host/account-hosting-agreement": ["hosting-overview.mdx"], - "/host/common-errors-diagnostics": ["how-to-self-test.mdx", "verification-stages.mdx", "vms.mdx"], - "/host/common-host-questions": ["hosting-overview.mdx", "how-to-self-test.mdx", "verification-stages.mdx", "payment.mdx", "optimization-guide.mdx"], - "/host/community": ["hosting-overview.mdx"], - "/host/first-24-hours": ["hosting-overview.mdx", "how-to-self-test.mdx"], - "/host/fleet-operations": ["hosting-overview.mdx", "optimization-guide.mdx", "market-metrics.mdx"], - "/host/glossary": ["hosting-overview.mdx", "how-to-self-test.mdx", "optimization-guide.mdx", "verification-stages.mdx", "understanding-verification.mdx"], - "/host/hardware-prep": ["hosting-overview.mdx", "verification-stages.mdx", "understanding-verification.mdx", "how-to-self-test.mdx", "vms.mdx"], - "/host/headless-install": ["hosting-overview.mdx", "how-to-self-test.mdx", "vms.mdx"], - "/host/hosting-agreement": ["hosting-overview.mdx"], - "/host/installing-host-software": ["hosting-overview.mdx"], - "/host/maintenance-windows": ["hosting-overview.mdx"], - "/host/network-ports": ["hosting-overview.mdx", "how-to-self-test.mdx", "verification-stages.mdx"], - "/host/not-in-search": ["hosting-overview.mdx", "verification-stages.mdx", "optimization-guide.mdx"], - "/host/persona-decision-guide": ["hosting-overview.mdx", "understanding-verification.mdx", "verification-stages.mdx"], - "/host/pricing-your-listing": ["optimization-guide.mdx", "hosting-overview.mdx"], - "/host/quickstart": ["hosting-overview.mdx", "how-to-self-test.mdx"], - "/host/reliability-uptime": ["understanding-verification.mdx", "verification-stages.mdx", "how-to-self-test.mdx"], - "/host/removing-recreating-machines": ["hosting-overview.mdx", "verification-stages.mdx"], - "/host/self-test-reference": ["how-to-self-test.mdx"], - "/host/storage-setup": ["verification-stages.mdx", "hosting-overview.mdx"], - "/host/supported-hardware": ["verification-stages.mdx", "understanding-verification.mdx", "how-to-self-test.mdx", "vms.mdx"], - "/host/workload-policy": ["hosting-overview.mdx"] - }; - const STATE_KEY = 'vast-old-docs-highlight-enabled'; - let active = false; - let lastPath = ''; - let observer = null; - - function normalize(text) { - return String(text || '') - .toLowerCase() - .replace(/[\u2018\u2019\u201A\u201B]/g, "'") - .replace(/[\u201C\u201D\u201E\u201F]/g, '"') - .replace(/[\u2013\u2014]/g, '-') - .replace(/https?:\/\/\S+/g, ' ') - .replace(/\$+/g, '') - .replace(/[^a-z0-9./:+_<>%$ -]+/g, ' ') - .replace(/\s+/g, ' ') - .trim(); - } - - function hostLikePath() { - return location.pathname === '/host/docs-change-review' || location.pathname.startsWith('/host/'); - } - - function normalizeAssetPath(value) { - if (!value) return ''; - const raw = String(value).trim(); - try { - const url = new URL(raw, location.origin); - const proxied = url.searchParams.get('url'); - if (proxied && url.pathname.includes('/_next/image')) { - return normalizeAssetPath(proxied); - } - return decodeURIComponent(url.pathname).replace(/\/+$/, ''); - } catch { - return raw.split(/[?#]/)[0].replace(/\/+$/, ''); - } - } - - function assetPathsFromSrcset(srcset) { - return String(srcset || '') - .split(',') - .map((part) => normalizeAssetPath(part.trim().split(/\s+/)[0])) - .filter(Boolean); - } - - function ensureStyle() { - if (document.getElementById('vast-old-docs-highlight-style')) return; - const style = document.createElement('style'); - style.id = 'vast-old-docs-highlight-style'; - style.textContent = ` - .vast-old-docs-toggle { - position: fixed; - right: 18px; - bottom: 88px; - z-index: 2147483000; - display: none; - align-items: center; - gap: 8px; - border: 1px solid rgba(245, 158, 11, 0.75); - border-radius: 999px; - padding: 8px 12px; - background: rgba(24, 24, 27, 0.94); - color: #fff7ed; - font: 600 12px/1.1 ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; - box-shadow: 0 12px 30px rgba(0, 0, 0, 0.25); - cursor: pointer; - } - .vast-old-docs-toggle[data-visible="true"] { display: inline-flex; } - .vast-old-docs-toggle[data-active="true"] { background: #7c2d12; color: #fff7ed; } - .vast-old-docs-toggle-count { - display: inline-flex; - min-width: 20px; - height: 20px; - align-items: center; - justify-content: center; - border-radius: 999px; - background: rgba(255, 255, 255, 0.16); - font-size: 11px; - } - .vast-old-docs-reused { - outline: 1px solid rgba(245, 158, 11, 0.75) !important; - background: rgba(245, 158, 11, 0.20) !important; - box-shadow: inset 0 -0.55em rgba(245, 158, 11, 0.20) !important; - border-radius: 4px; - } - .vast-old-docs-reused:hover { - outline-color: rgba(251, 191, 36, 1) !important; - } - .vast-old-docs-reused::selection { background: rgba(245, 158, 11, 0.45); } - .vast-old-docs-reused-media { - position: relative; - outline: 3px solid rgba(14, 165, 233, 0.9) !important; - outline-offset: 3px; - background: rgba(14, 165, 233, 0.10) !important; - border-radius: 6px; - } - .vast-old-docs-reused-media img, - img.vast-old-docs-reused-media { - outline: 3px solid rgba(14, 165, 233, 0.9) !important; - outline-offset: 3px; - border-radius: 6px; - } - .vast-old-docs-reused-media::after { - content: attr(data-vast-old-doc-kind); - position: absolute; - top: 8px; - left: 8px; - z-index: 3; - padding: 4px 7px; - border-radius: 999px; - background: rgba(2, 132, 199, 0.94); - color: #f0f9ff; - font: 700 11px/1 ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; - letter-spacing: 0; - pointer-events: none; - } - .vast-old-docs-parent-badge { - display: inline-flex; - align-items: center; - max-width: 100%; - margin: 0 0 1rem 0; - padding: 0.45rem 0.65rem; - border: 1px solid rgba(14, 165, 233, 0.55); - border-radius: 6px; - background: rgba(14, 165, 233, 0.10); - color: #075985; - font: 600 12px/1.35 ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; - letter-spacing: 0; - overflow-wrap: anywhere; - } - .dark .vast-old-docs-parent-badge { - color: #bae6fd; - background: rgba(14, 165, 233, 0.18); - border-color: rgba(125, 211, 252, 0.50); - } - `; - document.head.appendChild(style); - } - - function ensureButton() { - ensureStyle(); - let btn = document.getElementById('vast-old-docs-highlight-toggle'); - if (btn) return btn; - btn = document.createElement('button'); - btn.id = 'vast-old-docs-highlight-toggle'; - btn.className = 'vast-old-docs-toggle'; - btn.type = 'button'; - btn.title = 'Demo helper: highlight content reused from the old host docs, including text blocks and images. Remove old-docs-highlight-demo.js before PR.'; - btn.innerHTML = 'Old content0'; - btn.addEventListener('click', () => { - active = !active; - localStorage.setItem(STATE_KEY, active ? '1' : '0'); - applyHighlights(); - }); - document.body.appendChild(btn); - return btn; - } - - function contentRoot() { - return document.querySelector('[data-page-href]') || - document.querySelector('main article') || - document.querySelector('main [data-page-content]') || - document.querySelector('main') || - document.body; - } - - function candidateElements() { - const root = contentRoot(); - return Array.from(root.querySelectorAll('p, [data-as="p"], li, td, th, h1, h2, h3, h4, blockquote, code, pre')) - .filter((el) => { - if (el.closest('#vast-old-docs-highlight-toggle')) return false; - if (el.closest('nav, header, footer, aside, button')) return false; - const text = normalize(el.textContent); - return text.length >= 38; - }); - } - - function mediaElements() { - const root = contentRoot(); - return Array.from(root.querySelectorAll('img, source, video, object, embed')) - .filter((el) => { - if (el.closest('#vast-old-docs-highlight-toggle')) return false; - if (el.closest('nav, header, footer, aside, button')) return false; - return true; - }); - } - - function mediaPaths(el) { - const paths = [ - el.currentSrc, - el.getAttribute('src'), - el.getAttribute('data-src'), - el.getAttribute('poster'), - el.getAttribute('data-poster') - ].map(normalizeAssetPath).filter(Boolean); - - paths.push(...assetPathsFromSrcset(el.getAttribute('srcset'))); - return Array.from(new Set(paths)); - } - - function findAssetMatch(el) { - const paths = mediaPaths(el); - for (const path of paths) { - for (const asset of OLD_DOC_ASSETS) { - const oldPath = normalizeAssetPath(asset.src); - if (path === oldPath || path.endsWith(oldPath)) return asset; - } - } - return null; - } - - function mediaHighlightTarget(el) { - const linked = el.closest('a'); - if (linked && linked.querySelectorAll('img, source, video, object, embed').length === 1) return linked; - const picture = el.closest('picture'); - if (picture) return picture; - const figure = el.closest('figure'); - if (figure) return figure; - const parent = el.parentElement; - if (parent && ['P', 'DIV'].includes(parent.tagName) && parent.querySelectorAll('img, source, video, object, embed').length === 1) { - return parent; - } - return el; - } - - function findMatch(text) { - if (!text) return null; - for (const phrase of OLD_DOC_PHRASES) { - if (text.includes(phrase.t)) return phrase; - if (text.length >= 50 && phrase.t.length >= 70 && phrase.t.includes(text)) return phrase; - } - return null; - } - - function findMovedGuidanceMatch(text) { - if (!text) return null; - for (const item of MOVED_OLD_DOC_GUIDANCE) { - if (item.path && item.path !== location.pathname) continue; - const movedText = normalize(item.t); - if (text.includes(movedText)) { - return { - s: item.s, - moved: true - }; - } - } - return null; - } - - function currentParentSources() { - return PAGE_PARENT_SOURCES[location.pathname] || []; - } - - function clearHighlights() { - document.querySelectorAll('.vast-old-docs-parent-badge').forEach((el) => el.remove()); - document.querySelectorAll('.vast-old-docs-reused, .vast-old-docs-reused-media').forEach((el) => { - el.classList.remove('vast-old-docs-reused'); - el.classList.remove('vast-old-docs-reused-media'); - el.removeAttribute('data-vast-old-doc-source'); - el.removeAttribute('data-vast-old-doc-kind'); - if (el.getAttribute('title') === el.dataset.vastOldTitle) el.removeAttribute('title'); - delete el.dataset.vastOldTitle; - }); - } - - function markOldContent(el, className, source, title, kind) { - el.classList.add(className); - el.dataset.vastOldDocSource = source; - el.dataset.vastOldTitle = title; - if (kind) el.dataset.vastOldDocKind = kind; - el.title = el.dataset.vastOldTitle; - } - - function addParentBadge() { - const sources = currentParentSources(); - if (!sources.length) return; - const root = contentRoot(); - const badge = document.createElement('div'); - badge.className = 'vast-old-docs-parent-badge'; - badge.textContent = 'Old parent docs: ' + sources.join(', '); - - const persona = root.querySelector(':scope > .persona-chips'); - if (persona && persona.nextSibling) { - persona.parentNode.insertBefore(badge, persona.nextSibling); - } else if (persona) { - persona.parentNode.appendChild(badge); - } else { - root.insertBefore(badge, root.firstChild); - } - } - - function applyHighlights() { - const btn = ensureButton(); - btn.dataset.visible = hostLikePath() ? 'true' : 'false'; - btn.dataset.active = active ? 'true' : 'false'; - const label = btn.querySelector('.vast-old-docs-toggle-label'); - const count = btn.querySelector('.vast-old-docs-toggle-count'); - clearHighlights(); - - let matches = 0; - const highlighted = new Set(); - if (active && hostLikePath()) { - addParentBadge(); - for (const el of candidateElements()) { - const normalizedText = normalize(el.textContent); - const match = findMatch(normalizedText) || findMovedGuidanceMatch(normalizedText); - if (!match) continue; - if (!highlighted.has(el)) { - matches += 1; - highlighted.add(el); - } - const title = match.moved - ? 'Old docs moved/reworked guidance from ' + match.s - : 'Old docs reused text from ' + match.s; - markOldContent(el, 'vast-old-docs-reused', match.s, title); - } - for (const el of mediaElements()) { - const match = findAssetMatch(el); - if (!match) continue; - const target = mediaHighlightTarget(el); - if (!highlighted.has(target)) { - matches += 1; - highlighted.add(target); - } - markOldContent(target, 'vast-old-docs-reused-media', match.s, 'Old docs reused image from ' + match.s, 'old image'); - } - } - - label.textContent = active ? 'Old content on' : 'Old content off'; - count.textContent = String(matches); - } - - function scheduleApply() { - window.clearTimeout(window.__vastOldDocsHighlightTimer); - window.__vastOldDocsHighlightTimer = window.setTimeout(applyHighlights, 180); - } - - function boot() { - active = localStorage.getItem(STATE_KEY) === '1'; - ensureButton(); - applyHighlights(); - observer = new MutationObserver(scheduleApply); - observer.observe(document.body, { childList: true, subtree: true }); - window.addEventListener('popstate', scheduleApply); - document.addEventListener('click', () => { - window.setTimeout(() => { - if (location.pathname !== lastPath) { - lastPath = location.pathname; - scheduleApply(); - } - }, 250); - }, true); - window.setInterval(() => { - if (location.pathname !== lastPath) { - lastPath = location.pathname; - scheduleApply(); - } - }, 700); - } - - if (document.readyState === 'loading') { - document.addEventListener('DOMContentLoaded', boot, { once: true }); - } else { - boot(); - } -})(); diff --git a/snippets/host/cli/self-test-machine.mdx b/snippets/host/cli/self-test-machine.mdx index 94727b4a..98259301 100644 --- a/snippets/host/cli/self-test-machine.mdx +++ b/snippets/host/cli/self-test-machine.mdx @@ -5,7 +5,7 @@ Perform a self-test on the specified machine ## Usage ```bash -vastai self-test machine [--debugging] [--explain] [--api_key API_KEY] [--url URL] [--retry RETRY] [--raw] [--ignore-requirements] +vastai self-test machine [--debugging] [--ignore-requirements] [--test-image IMAGE] [--support-bundle-dir DIR] [--no-support-bundle] ``` ## Arguments @@ -24,6 +24,18 @@ vastai self-test machine [--debugging] [--explain] [--api_key API_K Ignore the minimum system requirements and run the self test regardless + + Use a custom self-test image for testing custom self-test images. Overrides environment and CUDA image mapping. + + + + Directory for failure diagnostic bundles. Defaults to `/tmp`. + + + + Do not create a diagnostic tarball when the self-test fails. + + ## Description This command tests if a machine meets specific requirements and @@ -33,9 +45,8 @@ runs a series of tests to ensure it's functioning correctly. ```bash vast self-test machine 12345 - vast self-test machine 12345 --debugging - vast self-test machine 12345 --explain - vast self-test machine 12345 --api_key +vast self-test machine 12345 --debugging +vast self-test machine 12345 --support-bundle-dir /tmp/vast-bundles ``` ## Global Options From c649bcf47a59b3658c804deadce478c8c85f924c Mon Sep 17 00:00:00 2001 From: Hannes Zietsman Date: Fri, 19 Jun 2026 13:27:01 +0200 Subject: [PATCH 05/20] docs(host): fix hardware prep anchor jump --- host/common-host-questions.mdx | 2 +- host/hardware-prep.mdx | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/host/common-host-questions.mdx b/host/common-host-questions.mdx index 6e5bb4a6..75340dc8 100644 --- a/host/common-host-questions.mdx +++ b/host/common-host-questions.mdx @@ -29,7 +29,7 @@ Use this page to route common host questions to the page that owns the answer. | Question | Read | | --- | --- | -| What should be ready before installing? | [Hardware Prep](/host/hardware-prep#install-prerequisites) | +| What should be ready before installing? | [Hardware Prep](/host/hardware-prep) | | What is the Host Installer Wizard? | [Install Host Software](/host/installing-host-software#host-installer-wizard) | | Why did install fail? | [Install failures](/host/installing-host-software#install-failures) | | How should Docker storage be mounted? | [Storage Setup](/host/storage-setup#docker-storage-layout) | diff --git a/host/hardware-prep.mdx b/host/hardware-prep.mdx index 290c634f..61009951 100644 --- a/host/hardware-prep.mdx +++ b/host/hardware-prep.mdx @@ -12,7 +12,6 @@ personas: Prepare the host machine before installing the Vast host software, including OS, BIOS, driver, power, thermal, and stability checks. - ## What should be ready before I run the host installer? Before installing, make sure the host has supported same-type GPUs, native Ubuntu/Linux, an AVX-capable CPU, at least one physical CPU core per listed GPU, adequate RAM, fast SSD/NVMe storage, working compatible GPU drivers, stable public networking, and enough direct ports forwarded for both TCP and UDP. From 0525852df6f11c780619a3f30ae9b8a15e9ad53b Mon Sep 17 00:00:00 2001 From: Hannes Zietsman Date: Fri, 19 Jun 2026 13:33:45 +0200 Subject: [PATCH 06/20] docs(host): surface common dashboard errors --- host/common-errors-diagnostics.mdx | 39 +++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/host/common-errors-diagnostics.mdx b/host/common-errors-diagnostics.mdx index 429d59de..646ed369 100644 --- a/host/common-errors-diagnostics.mdx +++ b/host/common-errors-diagnostics.mdx @@ -12,6 +12,16 @@ personas: Use this page for host errors that are not covered by install, networking, or self-test pages. +## Common Dashboard Messages + +| Message | Start here | +| --- | --- | +| `Port issue` or `vericode=8` | [Port Issue / vericode=8](#port-issue) | +| `GPU PCIE issue` or repeated AER messages | [GPU PCIE Issue / AER](#gpu-pcie-issue) | +| `failed to inject CDI devices` or `unresolvable CDI devices` | [Failed To Inject CDI Devices](#failed-cdi) | +| `bad bandwidthtest2` | [`bad bandwidthtest2`](#bad-bandwidthtest2) | +| `nvidia-smi` fails or NVML mismatch | [`nvidia-smi` Fails](#nvidia-smi-fails) | + ## Logs @@ -94,11 +104,25 @@ sudo dmesg -T | grep -Ei 'NVRM|Xid|AER|PCIe|fallen|GPU has fallen' Treat repeated Xid, NVRM, PCIe, or AER errors as host hardware/driver health signals, not as isolated self-test messages. + +## GPU PCIE Issue / AER + +`GPU PCIE issue` means the PCIe link should be investigated. Corrected AER at boot can be harmless, but repeated AER messages, uncorrectable AER, errors under load, downgraded PCIe links under load, Xid 79, or `bad bandwidthtest2` point to a real hardware path problem. + +Inspect risers, slots, cables, contacts, power, BIOS lane settings, motherboard health, and GPU health before listing again. + ## Red Machine Error The Machines page shows red errors detected by the host software. Fix the cause, then allow the platform to refresh. Many resolved errors clear automatically after 1-2 hours. + +## Port Issue / vericode=8 + +`Port issue`, `vericode=8`, and self-test progress timeouts usually mean a direct-port reachability problem. Confirm the configured host port range, forward the same range to the host LAN IP, and test from outside the LAN because same-LAN tests can be misleading. + +Forward both TCP and UDP. CGNAT, double NAT without a real public forwarding path, no inbound public IP, blocked inbound ports, or incompatible IPv6-only service are not supported hosting setups. See [Network & Ports](/host/network-ports) for the full checklist. + ## Full Client Storage @@ -127,7 +151,20 @@ Treat this as a machine health or verification error. Check PCIe bandwidth, lane ## Failed To Inject CDI Devices -This points to GPU device injection or container runtime setup. Gather diagnostics, confirm GPUs are visible on the host, check Docker/NVIDIA runtime/CDI configuration, and inspect daemon/container logs. Do not assume regenerating CDI configuration fixes an unhealthy GPU, driver, or PCIe link. Escalate with logs if containers still cannot receive GPUs. +This points to GPU device injection or container runtime setup. First confirm the host can see every GPU and Docker can inject those GPUs into a normal container: + +```bash +nvidia-smi -L +sudo docker run --rm --gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi -L +``` + +If the machine is idle and not rented, you can also run a short load test with a GPU burn image you trust: + +```bash +sudo docker run --rm --gpus all oguzpastirmaci/gpu-burn 60 +``` + +If the container test fails, gather diagnostics, check Docker/NVIDIA runtime/CDI configuration, and inspect daemon/container logs. Do not assume regenerating CDI configuration fixes an unhealthy GPU, driver, or PCIe link. Escalate with logs if containers still cannot receive GPUs. ## Before Asking For Help From d7d31ff92b658d8bb9522d5448f60dcb7d2bbbaf Mon Sep 17 00:00:00 2001 From: Hannes Zietsman Date: Fri, 19 Jun 2026 13:36:03 +0200 Subject: [PATCH 07/20] docs(host): add AER log search commands --- host/common-errors-diagnostics.mdx | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/host/common-errors-diagnostics.mdx b/host/common-errors-diagnostics.mdx index 646ed369..cba3222e 100644 --- a/host/common-errors-diagnostics.mdx +++ b/host/common-errors-diagnostics.mdx @@ -111,6 +111,24 @@ Treat repeated Xid, NVRM, PCIe, or AER errors as host hardware/driver health sig Inspect risers, slots, cables, contacts, power, BIOS lane settings, motherboard health, and GPU health before listing again. +Search kernel and syslog history for AER/PCIe evidence: + +```bash +sudo journalctl -k -b --no-pager | grep -Ei 'AER|PCIe Bus Error|pcieport|NVRM|Xid' +sudo journalctl -k -b -1 --no-pager | grep -Ei 'AER|PCIe Bus Error|pcieport|NVRM|Xid' +sudo dmesg -T | grep -Ei 'AER|PCIe Bus Error|pcieport|NVRM|Xid' +sudo grep -Ei 'AER|PCIe Bus Error|pcieport|NVRM|Xid' /var/log/syslog /var/log/syslog.1 /var/log/kern.log /var/log/kern.log.1 2>/dev/null +sudo zgrep -Ei 'AER|PCIe Bus Error|pcieport|NVRM|Xid' /var/log/syslog.*.gz /var/log/kern.log.*.gz 2>/dev/null +``` + +While reproducing under load, watch live kernel messages in another SSH session: + +```bash +sudo journalctl -kf | grep --line-buffered -Ei 'AER|PCIe Bus Error|pcieport|NVRM|Xid' +``` + +Correlate timestamps with self-test runs, rentals, `gpu-burn`, or other load tests. Repeated messages during load are much more concerning than a small number of corrected messages during boot. + ## Red Machine Error From 45aadf669a4b2137457383fb56d9e933131b0bba Mon Sep 17 00:00:00 2001 From: Hannes Zietsman Date: Fri, 19 Jun 2026 13:39:29 +0200 Subject: [PATCH 08/20] docs(host): clarify host account signup path --- host/hosting-overview.mdx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/host/hosting-overview.mdx b/host/hosting-overview.mdx index ece8fc7a..bfec75a0 100644 --- a/host/hosting-overview.mdx +++ b/host/hosting-overview.mdx @@ -26,7 +26,9 @@ Vast does not provide setup support for getting a machine working. For community ## Start Here -Use a dedicated host account. Do not reuse your renter/client account. See [Account & Hosting Agreement](/host/account-hosting-agreement). +Create a dedicated host account from the [Vast host setup page](https://cloud.vast.ai/host/setup/). That flow links to the hosting agreement and starts host onboarding, including access to the Machines area after the agreement is accepted. + +After signup, use this docs path for hardware, storage, networking, install, and self-test details. For account conversion or Machines-tab troubleshooting, see [Account & Hosting Agreement](/host/account-hosting-agreement). For setup, follow: From 8638b09b5c65dca93e64fc52535cfa3d18d749ac Mon Sep 17 00:00:00 2001 From: Hannes Zietsman Date: Mon, 22 Jun 2026 12:48:55 +0200 Subject: [PATCH 09/20] CON-1518 add GPU overview income estimate --- host/earning.mdx | 2 ++ host/market-metrics.mdx | 30 +++++++++++++++++++++++++++++- host/pricing-your-listing.mdx | 4 +++- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/host/earning.mdx b/host/earning.mdx index 964bbb8c..e3c32c23 100644 --- a/host/earning.mdx +++ b/host/earning.mdx @@ -68,6 +68,8 @@ For planning compute revenue, compare similar machines over the last 30 days: Use P90 only when your machine has a real advantage: strong reliability, better network, fast storage, better location, datacenter status, or scarce GPU supply. Then add realistic storage, bandwidth, and volume assumptions separately. +For a fast market-dashboard estimate, use the **GPU Overview** tab in [Host Market](https://cloud.vast.ai/host/market/): multiply `$/HR MED` by `% Rented (30D Avg)`, then multiply by `720` hours and your GPU count. See [GPU Market Metrics: GPU Overview Income Estimate](/host/market-metrics#gpu-overview-income-estimate). + ## Compute-Only Example A 4-GPU host at 55% utilization: diff --git a/host/market-metrics.mdx b/host/market-metrics.mdx index 4a4fc617..d6de7571 100644 --- a/host/market-metrics.mdx +++ b/host/market-metrics.mdx @@ -28,10 +28,38 @@ If you are evaluating hardware before registering a machine, public third-party ## Dashboard Views - **Availability & Pricing**: historical supply/demand and P10/median/P90 prices. -- **GPU Overview**: current supply/demand and pricing by GPU type. +- **GPU Overview**: current supply/demand, 30-day rental rate, and median price by GPU type. - **GPU Locations**: geographic distribution. - If the page is blocked by the registered-machine requirement, use the Vast hosting calculator or public market dashboards for preliminary planning until the host account has a registered machine. +## GPU Overview Income Estimate + +In [Host Market](https://cloud.vast.ai/host/market/), open **GPU Overview** to compare demand and pricing by GPU model. + +For a quick compute-only estimate, combine: + +| Column | Use | +| --- | --- | +| `% Rented (30D Avg)` | Approximate utilization for that GPU type over the last 30 days. | +| `$/HR MED` | Median hourly GPU price for that GPU type. | + +```text +average compute revenue per GPU-hour = + $/HR MED x (% Rented (30D Avg) / 100) + +monthly compute estimate = + GPUs x $/HR MED x 720 x (% Rented (30D Avg) / 100) +``` + +Example: if `RTX 5090` shows `% Rented (30D Avg)` of `65.0%` and `$/HR MED` of `$0.361/hr`: + +```text +0.361 x 0.65 = $0.23465 average gross compute revenue per hour per GPU +0.361 x 720 x 0.65 = $168.95 gross compute revenue per month per GPU +``` + +This is a better starting point than price alone because utilization matters. A GPU with a higher hourly price can still earn less if it is rented less often. Treat this as a rough gross compute estimate; it does not include storage, bandwidth, volume revenue, power, cooling, hardware cost, taxes, payout timing, or downtime. + ## CLI Install or upgrade: diff --git a/host/pricing-your-listing.mdx b/host/pricing-your-listing.mdx index dad290ed..866b02c9 100644 --- a/host/pricing-your-listing.mdx +++ b/host/pricing-your-listing.mdx @@ -41,13 +41,15 @@ DPH means dollars per hour, usually GPU compute price. ## Starting Workflow 1. Compare same GPU model, GPU count, verification state, region, and machine quality. -2. Check P10, median, and P90 pricing for the last 30 days. +2. Check P10, median, P90, and `% Rented (30D Avg)` for the last 30 days. 3. Pick an on-demand price for your goal: occupancy, hourly rate, or balance. 4. Set `min_gpu`/`--min_chunk` to `1` unless you have a reason to require larger rentals. 5. Set an interruptible min bid only as a floor, not as your target price. 6. Use reserved discounts only if you can support longer rentals. 7. Set an offer end date you can honor. +Use [GPU Market Metrics](/host/market-metrics#gpu-overview-income-estimate) to estimate income from both utilization and median price. Price alone is not enough; a machine that rents at a slightly lower rate for more hours may earn more than a high-priced idle listing. + ## Example For a 4-GPU machine with comparable prices of P10 `$0.35`, median `$0.45`, and P90 `$0.65` per GPU-hour: From c3bb70e9b488be2897c50dddccc632a435303fb8 Mon Sep 17 00:00:00 2001 From: Hannes Zietsman Date: Mon, 22 Jun 2026 13:43:26 +0200 Subject: [PATCH 10/20] CON-1518 verify host fleet CLI docs --- host/fleet-operations.mdx | 4 ++-- snippets/host/cli/defrag-machines.mdx | 2 +- snippets/host/cli/list-machines.mdx | 2 +- snippets/host/cli/schedule-maint.mdx | 2 +- snippets/host/cli/set-min-bid.mdx | 2 +- snippets/host/cli/show-maints.mdx | 10 +++++----- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/host/fleet-operations.mdx b/host/fleet-operations.mdx index e3e60bdd..31285d18 100644 --- a/host/fleet-operations.mdx +++ b/host/fleet-operations.mdx @@ -40,8 +40,8 @@ Price changes affect new rental contracts only. Extending the offer end date at ```bash vastai schedule maint --sdate 1782950400 --duration 2 --maintenance_category power -vastai show maints -vastai cancel maint +vastai show maints --ids +vastai cancel maint ``` `--sdate` is Unix epoch seconds UTC. Categories are `power`, `internet`, `disk`, `gpu`, `software`, or `other`. See [Maintenance Windows](/host/maintenance-windows). diff --git a/snippets/host/cli/defrag-machines.mdx b/snippets/host/cli/defrag-machines.mdx index 285eb549..5cfb3789 100644 --- a/snippets/host/cli/defrag-machines.mdx +++ b/snippets/host/cli/defrag-machines.mdx @@ -5,7 +5,7 @@ Defragment machines ## Usage ```bash -vastai defragment machines IDs +vastai defrag machines IDs ``` ## Arguments diff --git a/snippets/host/cli/list-machines.mdx b/snippets/host/cli/list-machines.mdx index 92c32fe4..faddac39 100644 --- a/snippets/host/cli/list-machines.mdx +++ b/snippets/host/cli/list-machines.mdx @@ -11,7 +11,7 @@ vastai list machines IDs [options] ## Arguments - ids of instance to list + ids of machines to list ## Options diff --git a/snippets/host/cli/schedule-maint.mdx b/snippets/host/cli/schedule-maint.mdx index 196ca1ba..7d7e4af5 100644 --- a/snippets/host/cli/schedule-maint.mdx +++ b/snippets/host/cli/schedule-maint.mdx @@ -5,7 +5,7 @@ Schedule upcoming maint window ## Usage ```bash -vastai schedule maintenance id [--sdate START_DATE --duration DURATION --maintenance_category MAINTENANCE_CATEGORY] +vastai schedule maint id [--sdate START_DATE --duration DURATION --maintenance_category MAINTENANCE_CATEGORY] ``` ## Arguments diff --git a/snippets/host/cli/set-min-bid.mdx b/snippets/host/cli/set-min-bid.mdx index 96817f56..8733c483 100644 --- a/snippets/host/cli/set-min-bid.mdx +++ b/snippets/host/cli/set-min-bid.mdx @@ -5,7 +5,7 @@ Set the minimum bid/rental price for a machine ## Usage ```bash -vastai set min_bid id [--price PRICE] +vastai set min-bid id [--price PRICE] ``` ## Arguments diff --git a/snippets/host/cli/show-maints.mdx b/snippets/host/cli/show-maints.mdx index ecc1d31e..bc6521d0 100644 --- a/snippets/host/cli/show-maints.mdx +++ b/snippets/host/cli/show-maints.mdx @@ -5,14 +5,14 @@ Show maintenance information for host machines ## Usage ```bash -vastai show maints -ids 'machine_id_1' [OPTIONS] -vastai show maints -ids 'machine_id_1, machine_id_2' [OPTIONS] +vastai show maints --ids 'machine_id_1' [OPTIONS] +vastai show maints --ids 'machine_id_1,machine_id_2' [OPTIONS] ``` ## Options - - comma seperated string of machine_ids for which to get maintenance information + + comma separated string of machine IDs for which to get maintenance information (alias: `--ids`) @@ -22,7 +22,7 @@ vastai show maints -ids 'machine_id_1, machine_id_2' [OPTIONS] ## Examples ```bash -vastai show maints +vastai show maints --ids ``` ## Global Options From 748ba516dc48e438be030bf5eaebcfa26b7189fe Mon Sep 17 00:00:00 2001 From: Hannes Zietsman Date: Mon, 22 Jun 2026 13:47:31 +0200 Subject: [PATCH 11/20] CON-1518 clarify maintenance window commands --- host/maintenance-windows.mdx | 75 +++++++++++++++++++++++++++++++++--- 1 file changed, 69 insertions(+), 6 deletions(-) diff --git a/host/maintenance-windows.mdx b/host/maintenance-windows.mdx index 775c977b..d667373c 100644 --- a/host/maintenance-windows.mdx +++ b/host/maintenance-windows.mdx @@ -12,16 +12,79 @@ personas: Use maintenance windows to plan host work without surprising active renters. - -## How should I handle maintenance? + +## Before Maintenance -Wait until active rental contracts have ended or there are no running instances before planned maintenance. Unlisting prevents new rental contracts, but it does not end existing contracts. Always honor active rental end dates. +Wait until active rental contracts have ended, or until the machine has no running instances, before planned maintenance. Unlisting prevents new rental contracts, but it does not end existing contracts. -If you have active rental contracts, you can set the offer end date to match the latest rental end date, allowing new clients to rent instances that end at the same time. Once the end date is reached, unlist the machine and perform the maintenance. +Check the machine before you change its listing state: -Remember that a single machine may have multiple active rental contracts from different clients, each with its own rental end date. You cannot take the machine offline until every active rental contract has ended. +```bash +vastai show machines +vastai show machine +``` -For unplanned or unscheduled maintenance, schedule a maintenance window from the CLI. That notifies clients that you **have** to take the machine down and that they should save their work; you can specify a date and duration. See [vastai schedule maint](/host/cli/schedule-maint) and [vastai cancel maint](/host/cli/cancel-maint). + + A single machine can have multiple active rental contracts from different clients. Do not take the machine offline until every active rental contract has ended. + + + +## Planned Maintenance + +For planned work, set the offer end date to the maintenance date so new rentals do not run past your planned downtime. Existing contracts keep their accepted end date, so choose a date that still honors the latest active rental. + +```bash +vastai list machine --end_date MM/DD/YYYY +``` + +For multiple machines, use the fleet command: + +```bash +vastai list machines --end_date MM/DD/YYYY --retry 6 +``` + +When the active contracts have ended, unlist the machine before taking it down: + +```bash +vastai unlist machine +``` + +See [vastai list machine](/host/cli/list-machine), [vastai list machines](/host/cli/list-machines), and [vastai unlist machine](/host/cli/unlist-machine). + + +## Schedule An Unplanned Window + +If you must take the machine down unexpectedly, schedule a maintenance window so clients are notified and can save their work. The start date is Unix epoch seconds in UTC, and the duration is in hours. + +```bash +vastai schedule maint --sdate --duration --maintenance_category software +``` + +Example: + +```bash +vastai schedule maint 8207 --sdate 1782950400 --duration 2 --maintenance_category power +``` + +Maintenance categories are `power`, `internet`, `disk`, `gpu`, `software`, or `other`. See [vastai schedule maint](/host/cli/schedule-maint). + + +## Check Or Cancel Maintenance + +Check scheduled maintenance for one or more machines: + +```bash +vastai show maints --ids +vastai show maints --ids , +``` + +Cancel scheduled maintenance for a machine: + +```bash +vastai cancel maint +``` + +See [vastai show maints](/host/cli/show-maints) and [vastai cancel maint](/host/cli/cancel-maint). ## Should I disable automatic updates? From 8a14c7fccad9033ab9b330230790f716ad7f301e Mon Sep 17 00:00:00 2001 From: Hannes Zietsman Date: Mon, 22 Jun 2026 13:50:03 +0200 Subject: [PATCH 12/20] CON-1518 fix anchored section offset --- style.css | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/style.css b/style.css index 9cd7ea44..f1d57767 100644 --- a/style.css +++ b/style.css @@ -3,6 +3,17 @@ * Mintlify automatically loads a root-level style.css on every page. */ +/* + * Keep hash-linked sections below the sticky Mintlify header. + * + * Many host pages use explicit `` markers before headings so + * support replies and table-of-contents links can target stable anchors. The + * sticky top navigation otherwise covers the first lines after a hash jump. + */ +:where(h1, h2, h3, h4, h5, h6, a[id]) { + scroll-margin-top: 8rem; +} + /* * Use the full viewport width on large screens. * From 16db19756695c45322f4e8a5d23048a0208d9807 Mon Sep 17 00:00:00 2001 From: Hannes Zietsman Date: Mon, 22 Jun 2026 13:53:12 +0200 Subject: [PATCH 13/20] CON-1518 clarify XFS project quota setup --- host/storage-setup.mdx | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/host/storage-setup.mdx b/host/storage-setup.mdx index 546655c2..5a222205 100644 --- a/host/storage-setup.mdx +++ b/host/storage-setup.mdx @@ -42,6 +42,29 @@ Back up `/etc/fstab` before editing mounts: sudo cp /etc/fstab /etc/fstab.pre-vast-docker.$(date -u +%Y%m%d%H%M%S) ``` + +## XFS Project Quotas + +XFS project quotas are required. Vast uses them for per-container storage quotas. + +Add `pquota` or `prjquota` to the mount-options column for the `/var/lib/docker` XFS mount in `/etc/fstab`. In the example below, the mount-options column is `rw,auto,pquota,nofail`: + +```text +UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 /var/lib/docker xfs rw,auto,pquota,nofail 0 0 +``` + +After editing `/etc/fstab`, mount and verify: + +```bash +sudo mount -a +findmnt /var/lib/docker -no SOURCE,FSTYPE,OPTIONS +sudo xfs_quota -x -c "state" /var/lib/docker +``` + +The mount should be XFS, include `pquota` or `prjquota`, and show project quota accounting/enforcement as ON. + +Do not work around quota errors by removing Docker quota settings. Fix the filesystem and mount instead. + ## Disposable Device Example @@ -88,13 +111,6 @@ sudo xfs_quota -x -c "state" /var/lib/docker The mount should be XFS, include `pquota` or `prjquota`, and show project quota accounting/enforcement as ON. - -## XFS Project Quotas - -Yes, XFS project quotas are required. Vast uses them for per-container storage quotas. - -Do not work around quota errors by removing Docker quota settings. Fix the filesystem and mount instead. - ## Single NVMe vs RAID From 73861dd6c5ae5f6fc224da850b3b41e884496ae4 Mon Sep 17 00:00:00 2001 From: Hannes Zietsman Date: Mon, 22 Jun 2026 13:54:26 +0200 Subject: [PATCH 14/20] CON-1518 clarify RAID monitoring expectations --- host/storage-setup.mdx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/host/storage-setup.mdx b/host/storage-setup.mdx index 5a222205..524fd770 100644 --- a/host/storage-setup.mdx +++ b/host/storage-setup.mdx @@ -114,7 +114,11 @@ The mount should be XFS, include `pquota` or `prjquota`, and show project quota ## Single NVMe vs RAID -One NVMe is simplest. Multiple NVMes in RAID0 can improve capacity and throughput, but one failed drive can break the array. Pick the layout that matches your reliability goals and monitor drive health. +One NVMe is simplest. Multiple NVMes in RAID0 can improve capacity and throughput, but RAID0 has no redundancy: one failed drive can break the array. + +Redundant RAID layouts only help if you know when a device has failed. Set up disk health monitoring and failure notifications for the RAID layer, NVMe/SMART health, and any controller or storage software you use. Without notifications, a degraded array can leave you blind until another failure causes downtime or data loss. + +Pick the layout that matches your reliability goals, then monitor it like production storage. ## Docker pquota Error From 71ead28f842aea7a3dc41b841d69f076f5009316 Mon Sep 17 00:00:00 2001 From: Hannes Zietsman Date: Mon, 22 Jun 2026 14:00:59 +0200 Subject: [PATCH 15/20] CON-1518 clarify canonical host setup flow --- host/account-hosting-agreement.mdx | 2 ++ host/installing-host-software.mdx | 6 +++++- host/quickstart.mdx | 4 ++-- host/vms.mdx | 2 ++ 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/host/account-hosting-agreement.mdx b/host/account-hosting-agreement.mdx index ae14da5c..52304469 100644 --- a/host/account-hosting-agreement.mdx +++ b/host/account-hosting-agreement.mdx @@ -23,6 +23,8 @@ Yes. Use a dedicated account for hosting. Do not use the same account for both c Once your host account is created, open the [host setup page](https://cloud.vast.ai/host/setup/). There is a link in the first paragraph to the hosting agreement. Read through the agreement. Once you accept, your account is converted to a hosting account, and a Machines link appears in the navigation. Your account can now list machines that are running the daemon software. +The setup page is the canonical place for the current agreement link and generated install command. Do not rely on copied buttons, screenshots, or old setup instructions. + ## What must happen before I can see host features or the Machines tab? diff --git a/host/installing-host-software.mdx b/host/installing-host-software.mdx index 0906c79d..bb551a51 100644 --- a/host/installing-host-software.mdx +++ b/host/installing-host-software.mdx @@ -13,6 +13,10 @@ personas: Install from the official Vast host setup flow, then confirm the daemon, Docker storage, network, and GPUs are healthy. + + The [Vast host setup page](https://cloud.vast.ai/host/setup/) is the source of truth for the current installer command and setup flow. Use this docs page for preparation, headless guidance, log locations, and troubleshooting. + + ## Before You Install Complete [Hardware Prep](/host/hardware-prep), [Storage Setup](/host/storage-setup), and [Network & Ports](/host/network-ports). Your account must be host-enabled and the hosting agreement accepted; see [Account & Hosting Agreement](/host/account-hosting-agreement). @@ -31,7 +35,7 @@ The Host Installer Wizard is Vast's terminal UI for new host machines. ![Host Installer Wizard terminal review screen](/images/host-installer-wizard-tui.png) -Use it as the default install path: +Use the current command from the official setup page as the default install path: 1. Sign in to the host-enabled account. 2. Open the [host setup page](https://cloud.vast.ai/host/setup/). diff --git a/host/quickstart.mdx b/host/quickstart.mdx index f9ea3bcf..c449717a 100644 --- a/host/quickstart.mdx +++ b/host/quickstart.mdx @@ -14,9 +14,9 @@ Follow this ordered path for a first-time Vast host setup. Each step links to th ## Setup Path 1. **Decide whether Vast fits your hardware and expectations.** Read [Is Vast for Me?](/host/persona-decision-guide) and check your hardware against [Supported Hardware](/host/supported-hardware). -2. **Create a dedicated host account and accept the hosting agreement.** See [Account & Hosting Agreement](/host/account-hosting-agreement). +2. **Create a dedicated host account and accept the hosting agreement.** Start from the official [Vast host setup page](https://cloud.vast.ai/host/setup/), then see [Account & Hosting Agreement](/host/account-hosting-agreement) if the account flow gets stuck. 3. **Prepare the machine.** Set up Ubuntu, drivers, and BIOS with [Hardware Prep](/host/hardware-prep), disks with [Storage Setup](/host/storage-setup), and port forwarding with [Network & Ports](/host/network-ports). -4. **Install the Vast host software with the Host Installer Wizard (TUI).** Follow [Installing Host Software](/host/installing-host-software#host-installer-wizard). Running over SSH only? Use the [Headless Install Path](/host/headless-install). +4. **Install the Vast host software with the Host Installer Wizard (TUI).** Copy the current command from the official [Vast host setup page](https://cloud.vast.ai/host/setup/), then use [Installing Host Software](/host/installing-host-software#host-installer-wizard) to understand the install flow. Running over SSH only? Use the [Headless Install Path](/host/headless-install). 5. **List the machine.** Set your price and terms with [Pricing Your Listing](/host/pricing-your-listing). 6. **Run the self-test.** Follow [How to Self-Test](/host/how-to-self-test), and decode any failures with the [Self-Test Reference](/host/self-test-reference). 7. **Understand verification and first-rental expectations.** Read [Understanding Verification](/host/understanding-verification) and [First 24 Hours After Install](/host/first-24-hours). diff --git a/host/vms.mdx b/host/vms.mdx index 79da5b38..1b2cb3ba 100644 --- a/host/vms.mdx +++ b/host/vms.mdx @@ -16,6 +16,8 @@ Vast can run KVM virtual machines in addition to Docker containers. VM support i VMs interact more directly with hardware than containers. Enable them only when the machine supports IOMMU and remains stable. +Default host onboarding should still start from the official [Vast host setup page](https://cloud.vast.ai/host/setup/). Use this page only for optional VM/IOMMU planning or troubleshooting after the normal host setup path is understood. + ## When VM Support Helps VM support can make a host visible to renters using VM templates and can help with workloads that need: From f37319121827cbeba28b86eb02954082a1763762 Mon Sep 17 00:00:00 2001 From: Hannes Zietsman Date: Wed, 24 Jun 2026 11:32:59 +0200 Subject: [PATCH 16/20] Add host machine error reference --- docs.json | 1 + host/common-errors-diagnostics.mdx | 16 +- host/how-to-self-test.mdx | 2 +- host/machine-errors.mdx | 284 +++++++++++++++++++++++++++++ host/self-test-reference.mdx | 26 ++- 5 files changed, 320 insertions(+), 9 deletions(-) create mode 100644 host/machine-errors.mdx diff --git a/docs.json b/docs.json index c203841c..e4bbde04 100644 --- a/docs.json +++ b/docs.json @@ -636,6 +636,7 @@ "host/removing-recreating-machines", "host/fleet-operations", "host/common-errors-diagnostics", + "host/machine-errors", "host/datacenter-status", "host/payment", "host/workload-policy" diff --git a/host/common-errors-diagnostics.mdx b/host/common-errors-diagnostics.mdx index cba3222e..be9668c7 100644 --- a/host/common-errors-diagnostics.mdx +++ b/host/common-errors-diagnostics.mdx @@ -10,16 +10,17 @@ personas:
Pro OperatorHeadless / DC
-Use this page for host errors that are not covered by install, networking, or self-test pages. +Use this page to collect logs and diagnose host health issues. For exact Machines-page error strings and what they usually mean, start with [Machine Error Reference](/host/machine-errors). ## Common Dashboard Messages | Message | Start here | | --- | --- | -| `Port issue` or `vericode=8` | [Port Issue / vericode=8](#port-issue) | -| `GPU PCIE issue` or repeated AER messages | [GPU PCIE Issue / AER](#gpu-pcie-issue) | -| `failed to inject CDI devices` or `unresolvable CDI devices` | [Failed To Inject CDI Devices](#failed-cdi) | -| `bad bandwidthtest2` | [`bad bandwidthtest2`](#bad-bandwidthtest2) | +| `Port issue` or `vericode=8` | [Machine Errors: Port Networking Issues](/host/machine-errors#port-networking-issues) | +| TCP works but UDP fails | [Machine Errors: TCP works but UDP fails](/host/machine-errors#tcp-works-but-udp-fails) | +| `GPU PCIE issue` or repeated AER messages | [Machine Errors: GPU PCIe Issue](/host/machine-errors#gpu-pcie-issue) | +| `failed to inject CDI devices` or `unresolvable CDI devices` | [Machine Errors: CDI Device Injection](/host/machine-errors#cdi-device-injection) | +| `bad bandwidthtest2` | [Machine Errors: bad bandwidthtest2](/host/machine-errors#bad-bandwidthtest2) | | `nvidia-smi` fails or NVML mismatch | [`nvidia-smi` Fails](#nvidia-smi-fails) |
@@ -132,7 +133,7 @@ Correlate timestamps with self-test runs, rentals, `gpu-burn`, or other load tes ## Red Machine Error -The Machines page shows red errors detected by the host software. Fix the cause, then allow the platform to refresh. Many resolved errors clear automatically after 1-2 hours. +The Machines page shows red errors detected by the host software or platform. Fix the specific cause, then allow the platform to refresh. Do not assume immediate clearing after a single fix or reboot. For exact message meanings, see [Machine Error Reference](/host/machine-errors). ## Port Issue / vericode=8 @@ -190,7 +191,7 @@ If the container test fails, gather diagnostics, check Docker/NVIDIA runtime/CDI Include: - Account context and exact command. -- Machine ID, offer ID if relevant, and whether the account is the host account. +- The affected machine record in the console, relevant offer/contract context if support asks, and whether the account is the host account. - Exact timestamps with timezone. - Exact error strings, screenshots, or CLI output. - What changed recently: reboot, driver, kernel, Docker, BIOS, storage, router, or ISP. @@ -213,5 +214,6 @@ Local Ubuntu, Docker, GPU driver, hardware, power, thermals, and consumer networ | Topic | Read next | | --- | --- | | Install failures | [Installing Host Software](/host/installing-host-software#install-failures) | +| Machine error strings | [Machine Error Reference](/host/machine-errors) | | Self-test errors | [Self-Test Reference](/host/self-test-reference) | | Connectivity | [Network & Ports](/host/network-ports) | diff --git a/host/how-to-self-test.mdx b/host/how-to-self-test.mdx index 5bfd4bec..e8ae81d6 100644 --- a/host/how-to-self-test.mdx +++ b/host/how-to-self-test.mdx @@ -56,7 +56,7 @@ Inside the temporary self-test image, checks include: - At least one visible physical CPU core per visible GPU. - CUDA ResNet workload across all visible GPUs. - GPU memory allocation, including ECC-capable memory allocation checks where applicable. -- NCCL initialization and synchronization across visible GPUs. +- NCCL initialization and synchronization across visible GPUs; see [`nccl_failed`](/host/self-test-reference#nccl-failed) if this stage fails. - `stress-ng` and `gpu-burn` running together for 60 seconds. Hyperthreads and logical CPUs do not count as physical cores. diff --git a/host/machine-errors.mdx b/host/machine-errors.mdx new file mode 100644 index 00000000..abd04e49 --- /dev/null +++ b/host/machine-errors.mdx @@ -0,0 +1,284 @@ +--- +title: "Machine Error Reference" +sidebarTitle: "Machine Errors" +description: "Host Machines page error strings, meanings, and next checks." +"canonical": "/host/machine-errors" +personas: + - pro-operator + - headless-operator +--- + +
Pro OperatorHeadless / DC
+ +Use this page when the Machines page shows a red machine error or a host-facing runtime message. Start with the exact text shown in the console, fix the likely host-side cause, then allow the platform to refresh the machine state. + + +Do not reset machine identity, force-refresh machine specs with internal scripts, or delete renter data as a first response. If the page state looks wrong after the host is healthy, collect logs and escalate to Vast support. + + +## What Machine Errors Mean + +Machine errors usually mean the host software or platform detected a problem with networking, Docker, NVIDIA runtime, GPU health, storage, VM support, or self-test runtime behavior. Some errors affect verification or listing eligibility. Others are informational symptoms that need logs before the cause is clear. + +Resolved errors may take time to clear because the host daemon and platform need to observe healthy state again. Do not assume immediate clearing after a single fix or reboot. + +## Quick Lookup + +| Message or symptom | Likely area | Start here | +| --- | --- | --- | +| `Port issue`, `port networking issues`, `Port Networking Issues`, `vericode=8` | Public port reachability | [Port Networking Issues](#port-networking-issues) | +| TCP works but UDP fails | Public port protocol mismatch | [TCP works but UDP fails](#tcp-works-but-udp-fails) | +| `nvidia-container-cli: device error:` | NVIDIA container runtime or GPU device state | [NVIDIA container runtime](#nvidia-container-runtime) | +| `failed to inject CDI devices: unresolvable CDI devices` | NVIDIA CDI / Docker GPU injection | [CDI device injection](#cdi-device-injection) | +| `unknown or invalid runtime nvidia` | NVIDIA container runtime not available to Docker | [Docker runtime configuration](#docker-runtime-configuration) | +| `unknown flag: runtime` | Docker CLI/runtime invocation problem | [Docker runtime configuration](#docker-runtime-configuration) | +| `Cannot connect to the Docker daemon` | Docker daemon unavailable | [Docker daemon unavailable](#docker-daemon-unavailable) | +| `GPU PCIE issue`, AER, PCIe, Xid 79, fallen off bus | Hardware path / PCIe / power / riser | [GPU PCIe issue](#gpu-pcie-issue) | +| `bad bandwidthtest2` | GPU transfer or PCIe bandwidth health | [`bad bandwidthtest2`](#bad-bandwidthtest2) | +| `Unable to determine the device handle for` | GPU disappeared or cannot be enumerated | [GPU missing or unhealthy](#gpu-missing-or-unhealthy) | +| `CUDA error: uncorrectable ECC error encountered` | GPU memory / ECC fault | [ECC and GPU memory errors](#ecc-and-gpu-memory-errors) | +| `CUDA is not available` | Driver/runtime/container CUDA visibility | [CUDA unavailable](#cuda-unavailable) | +| `nccl_failed`, NCCL initialization, sync, or communicator error | Multi-GPU communication | [NCCL failed](#nccl-failed) | +| `--storage-opt is supported only for overlay over xfs` | Docker storage filesystem/quota | [XFS project quota error](#xfs-project-quota-error) | +| Full client storage, `no space left on device` | Docker storage capacity | [Full client storage](#full-client-storage) | +| Machine not found or not rentable | Offer/listing/rentability state | [Machine not rentable](#machine-not-rentable) | +| Red machine error / unhealthy / deverified | Machine health or platform state | [Generic red machine error](#generic-red-machine-error) | +| VM/IOMMU/GDM/KVM guest driver error | VM host support | [VM and IOMMU errors](#vm-and-iommu-errors) | + +
+## Port Networking Issues + +`Port issue`, `port networking issues`, `Port Networking Issues`, and `vericode=8` usually mean Vast could not reach the machine through the configured direct ports. + +Check: + +- The host port range configured in the installer or `/var/lib/vastai_kaalia/host_port_range`. +- Router, firewall, or datacenter ACL forwarding for the same range. +- Public inbound IP availability. +- Both TCP and UDP forwarding. +- Outside-LAN reachability. Same-LAN tests can pass because of NAT hairpinning. + +If a self-test failure prints a public IP and port, troubleshoot that exact endpoint. See [Network & Ports](/host/network-ports) and [Self-Test Reference: vericode=8](/host/self-test-reference#vericode-8). + + +## TCP Works But UDP Fails + +TCP-only forwarding can make web or progress checks pass while UDP workloads fail. The direct port range must forward both TCP and UDP. + +The paid dogfood run on 2026-06-24 reproduced this shape: the TCP progress endpoint was reachable, but the UDP echo probe timed out. Treat this as a network-path issue first, not a CUDA or NCCL failure. + +Check router/firewall rules, datacenter ACLs, host firewall rules, and whether the provider blocks UDP. Test from outside the LAN with `tcpdump` on the host and a UDP packet from an external machine. See [Network & Ports: TCP and UDP](/host/network-ports#tcp-udp). + + +## NVIDIA Container Runtime + +`nvidia-container-cli: device error:` means Docker attempted to start a GPU container, but the NVIDIA runtime could not expose one or more GPU devices. + +Possible causes include unhealthy or missing GPUs, driver/NVML issues, CDI/runtime configuration, PCIe errors, or a stale device state after a GPU reset. + +Start with: + +```bash +nvidia-smi -L +sudo docker run --rm --gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi -L +sudo journalctl -k -b --no-pager | grep -Ei 'NVRM|Xid|AER|PCIe|fallen' +``` + +If Docker cannot inject GPUs into a normal container, fix driver/runtime/GPU health before listing again. See [Errors & Diagnostics: Failed To Inject CDI Devices](/host/common-errors-diagnostics#failed-cdi). + + +## CDI Device Injection + +`failed to inject CDI devices: unresolvable CDI devices` points to GPU device injection or container runtime setup. It can also be a symptom of a GPU that disappeared from the host after a reset or PCIe fault. + +Confirm host GPU visibility and Docker GPU injection: + +```bash +nvidia-smi -L +sudo docker run --rm --gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi -L +``` + +If both fail, investigate driver, NVML, PCIe, Xid, and Docker/NVIDIA runtime health. Do not assume a CDI regeneration command fixes the underlying issue. + + +## Docker Runtime Configuration + +`unknown or invalid runtime nvidia` usually means Docker cannot use the NVIDIA runtime. + +`unknown flag: runtime` means the Docker command rejected the `--runtime` option. This can happen if the command is being handled by a nonstandard wrapper or incompatible Docker path. + +Check: + +```bash +type docker +docker --version +docker create --help | grep -- --runtime +docker info | grep -i runtime +``` + +Then confirm a normal GPU container can run. Repair Docker/NVIDIA runtime configuration before accepting rentals. + + +## Docker Daemon Unavailable + +`Cannot connect to the Docker daemon` means the host software could not talk to Docker. + +Check: + +```bash +systemctl is-active docker +sudo journalctl -u docker -n 100 --no-pager +sudo docker ps +``` + +Fix Docker startup, storage, or daemon configuration errors before rerunning self-test or listing the machine. + + +## GPU PCIe Issue + +`GPU PCIE issue`, repeated AER messages, Xid 79, or “GPU has fallen off the bus” point to the hardware path between the GPU and the host. + +Check risers, slots, cabling, PSU capacity, thermals, BIOS lane settings, motherboard health, GPU seating, and overclock/undervolt settings. Review kernel logs under load: + +```bash +sudo journalctl -k -b --no-pager | grep -Ei 'AER|PCIe|NVRM|Xid|fallen' +sudo dmesg -T | grep -Ei 'AER|PCIe|NVRM|Xid|fallen' +``` + +Corrected AER at boot can be harmless, but repeated messages during load are a stronger signal. See [Errors & Diagnostics: GPU PCIE Issue](/host/common-errors-diagnostics#gpu-pcie-issue). + + +## `bad bandwidthtest2` + +`bad bandwidthtest2` means a GPU transfer or bandwidth health check failed. Treat it as a machine-health or verification error. + +Use the reported GPU index if present, then check PCIe bandwidth, lane configuration, GPU seating, risers, thermals, power, driver/NVML health, Xid errors, Docker GPU runtime behavior, and self-test output. + + +## GPU Missing Or Unhealthy + +`Unable to determine the device handle for` usually means NVIDIA tooling could not enumerate a GPU that should exist. + +Check whether the GPU is visible to the PCIe bus and NVIDIA driver: + +```bash +lspci | grep -i nvidia +nvidia-smi -L +sudo journalctl -k -b --no-pager | grep -Ei 'NVRM|Xid|fallen|AER|PCIe' +``` + +If a GPU has fallen off the bus, power-cycle the host and fix the hardware path before listing again. + + +## ECC And GPU Memory Errors + +`CUDA error: uncorrectable ECC error encountered` means CUDA reported an uncorrectable GPU memory error. This is a hardware-health signal, not a pricing or marketplace issue. + +Check ECC and remapping state: + +```bash +nvidia-smi -q -d ECC +nvidia-smi -q | grep -iE 'Xid|Remapped|Pending' +sudo journalctl -k -b --no-pager | grep -i xid +``` + +If the error repeats, remove the machine from active hosting until the GPU is repaired or replaced. + + +## CUDA Unavailable + +`CUDA is not available` means the container or self-test image could not use the GPU through CUDA. + +Check that `nvidia-smi` works on the host, Docker GPU injection works, the NVIDIA driver supports the CUDA runtime used by the image, and no GPU is missing or unhealthy. Verification requires CUDA-compatible driver/runtime support for CUDA 11.8 or newer. + + +## NCCL Failed + +`nccl_failed` or NCCL initialization/synchronization errors mean multi-GPU communication failed after the test started. + +First confirm basic GPU visibility and container GPU access. Then check CUDA/NCCL/framework compatibility, PCIe/NVLink/P2P topology, shared memory, overloaded or unhealthy GPUs, and network/IB configuration if present. + +On HGX, DGX, or other NVSwitch systems, also check Fabric Manager/NVLSM on the host. The self-test container can show NCCL symptoms, but it cannot prove host service state: + +```bash +systemctl status nvidia-fabricmanager +journalctl -u nvidia-fabricmanager --since "-24h" +nvidia-smi -q | grep -i -A 2 Fabric +nvidia-smi topo -m +``` + +See [Self-Test Reference: nccl_failed](/host/self-test-reference#nccl-failed). + + +## XFS Project Quota Error + +`--storage-opt is supported only for overlay over xfs` means Docker storage is not on the expected XFS mount with project quotas. + +Vast uses Docker storage quotas for renter containers. Do not bypass the error by removing Docker quota settings. Move or remount `/var/lib/docker` onto the intended XFS filesystem, enable `pquota` or `prjquota` in `/etc/fstab`, verify quota state, then restart Docker and host software. + +See [Storage Setup: XFS Project Quotas](/host/storage-setup#xfs-prjquota). + + +## Full Client Storage + +Full client storage, `no space left on device`, or missing expected disk space usually means Docker storage is full, mounted on the wrong disk, or still holding images, stopped containers, volumes, or expired rental data. + +Check: + +```bash +df -h /var/lib/docker +sudo docker system df +findmnt /var/lib/docker -no SOURCE,FSTYPE,OPTIONS +``` + +Do not manually delete renter data. For expired or deleted rentals that did not release storage, use [vastai cleanup machine](/host/cli/cleanup-machine). + + +## Machine Not Rentable + +“Machine not found or not rentable” can mean the machine is offline, unlisted, already rented, missing active offers, below a threshold, showing a red machine error, missing required details, or not visible to the account running the command. + +Start in the Machines page for the host account. Confirm the machine is listed, online, not currently rented in a way that hides the expected offer, has active offers, and shows required details such as ports, RAM, upload speed, and download speed. Then confirm the CLI is authenticated to the same host-enabled account. + +See [Self-Test Reference: machine not rentable](/host/self-test-reference#machine-not-rentable) and [Not in Search](/host/not-in-search). + + +## Generic Red Machine Error + +A red machine error means the host software or platform detected a machine-health, network, storage, driver, container, VM, or policy issue. Fix the specific cause first, then allow the platform to refresh. + +If the host looks healthy but the console state remains wrong, collect logs and escalate to Vast support. Do not assume support can manually verify ordinary machines; verification and most eligibility checks are automated. + + +## VM And IOMMU Errors + +VM-related messages such as “machine does not support VMs,” unexpected configuration changes, IOMMU grouping failures, or KVM guest driver test failures need host-specific review. + +Check VM prerequisites, BIOS/IOMMU settings, GPU isolation, and whether the machine configuration changed after listing. VM entries still need backend/support review before the public reference should give exact clearing or deverification timing. + +See [VMs & IOMMU](/host/vms). + + +## What To Collect + +Before asking for help, collect: + +- Exact error string and screenshot. +- The affected machine record in the console and whether you are using the host account. +- Timestamp with timezone. +- Recent changes: reboot, driver, kernel, Docker, BIOS, storage, router, ISP, or GPU swap. +- `nvidia-smi -L`, Docker GPU container test output, and relevant kernel logs. +- Host daemon logs and installer logs if this started during install. +- Self-test support bundle if the error came from self-test. + +Review bundles before sharing them. Share sensitive account or machine details only in the appropriate support channel. + +## Related Pages + +| Topic | Read next | +| --- | --- | +| General diagnostics and logs | [Errors & Diagnostics](/host/common-errors-diagnostics) | +| Self-test failures | [Self-Test Reference](/host/self-test-reference) | +| Port forwarding | [Network & Ports](/host/network-ports) | +| Docker storage | [Storage Setup](/host/storage-setup) | +| Search and visibility | [Not in Search](/host/not-in-search) | diff --git a/host/self-test-reference.mdx b/host/self-test-reference.mdx index 5377e494..bfd21b9d 100644 --- a/host/self-test-reference.mdx +++ b/host/self-test-reference.mdx @@ -47,6 +47,30 @@ Start with: 5. Search directly for the machine ID; see [Why Isn't My Machine in Search?](/host/not-in-search#check-machine-listed). 6. If the console state looks wrong after refresh and rerun, collect logs and escalate to support. + +## `nccl_failed` + +`nccl_failed` means the temporary self-test instance could not initialize and synchronize NCCL workers across the visible GPUs. Treat this as a multi-GPU communication failure, not as proof of one specific root cause. + +Start with: + +1. Inspect the self-test support bundle for the NCCL error output. +2. Confirm every GPU is visible with `nvidia-smi` and Docker GPU access. +3. Check driver/CUDA/PyTorch/NCCL compatibility. +4. Check GPU peer-to-peer communication, PCIe/NVLink topology, Xid errors, and any GPU reset or bus errors. +5. On HGX, DGX, or other NVSwitch systems, check Fabric Manager/NVLSM on the host. The self-test container can show NCCL symptoms, but it cannot confirm whether host services such as `nvidia-fabricmanager` are running or healthy. + +Useful host-side checks for NVSwitch systems include: + +```bash +systemctl status nvidia-fabricmanager +journalctl -u nvidia-fabricmanager --since "-24h" +nvidia-smi -q | grep -i -A 2 Fabric +nvidia-smi topo -m +``` + +Fabric state should normally show completed/successful registration on systems where NVIDIA exposes fabric state through NVML. If Fabric Manager is not applicable to the hardware, focus on driver/runtime compatibility, PCIe/NVLink topology, and the raw NCCL error. + ## Which warnings can be ignored? @@ -58,4 +82,4 @@ Reliability greater than 0.9 is a self-test and verification gate; if the machin ## Errors not specific to the self-test -For `bad bandwidthtest2`, CDI device injection failures, NVML mismatches, and other machine-health errors, see [Common Errors & Diagnostics](/host/common-errors-diagnostics). +For `bad bandwidthtest2`, CDI device injection failures, NVML mismatches, and other machine-health errors, see [Machine Error Reference](/host/machine-errors) and [Common Errors & Diagnostics](/host/common-errors-diagnostics). From 64bd694bd1be59326778c765a35a1ee4292bacee Mon Sep 17 00:00:00 2001 From: Hannes Zietsman Date: Wed, 24 Jun 2026 11:39:33 +0200 Subject: [PATCH 17/20] Clarify UDP machine error evidence --- host/machine-errors.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/host/machine-errors.mdx b/host/machine-errors.mdx index abd04e49..a80b9007 100644 --- a/host/machine-errors.mdx +++ b/host/machine-errors.mdx @@ -65,7 +65,7 @@ If a self-test failure prints a public IP and port, troubleshoot that exact endp TCP-only forwarding can make web or progress checks pass while UDP workloads fail. The direct port range must forward both TCP and UDP. -The paid dogfood run on 2026-06-24 reproduced this shape: the TCP progress endpoint was reachable, but the UDP echo probe timed out. Treat this as a network-path issue first, not a CUDA or NCCL failure. +A UDP failure can still happen when the UDP port appears mapped and the container-side responder starts. The public UDP path still has to work end to end. The paid dogfood run on 2026-06-24 reproduced this shape: the TCP progress endpoint was reachable, but the external UDP echo probe timed out. Treat this as a network-path issue first, not a CUDA or NCCL failure. Check router/firewall rules, datacenter ACLs, host firewall rules, and whether the provider blocks UDP. Test from outside the LAN with `tcpdump` on the host and a UDP packet from an external machine. See [Network & Ports: TCP and UDP](/host/network-ports#tcp-udp). From a8a935c32b099b814818c5257b97240df9fa30e9 Mon Sep 17 00:00:00 2001 From: Hannes Zietsman Date: Wed, 24 Jun 2026 12:01:32 +0200 Subject: [PATCH 18/20] CON-1531 clarify vericode error meaning --- host/common-errors-diagnostics.mdx | 7 ++++--- host/common-host-questions.mdx | 2 +- host/glossary.mdx | 6 +++--- host/machine-errors.mdx | 5 +++-- host/network-ports.mdx | 2 +- host/self-test-reference.mdx | 6 +++--- 6 files changed, 15 insertions(+), 13 deletions(-) diff --git a/host/common-errors-diagnostics.mdx b/host/common-errors-diagnostics.mdx index be9668c7..3b1d70d3 100644 --- a/host/common-errors-diagnostics.mdx +++ b/host/common-errors-diagnostics.mdx @@ -16,7 +16,8 @@ Use this page to collect logs and diagnose host health issues. For exact Machine | Message | Start here | | --- | --- | -| `Port issue` or `vericode=8` | [Machine Errors: Port Networking Issues](/host/machine-errors#port-networking-issues) | +| `Port issue` or `Port Networking Issues` | [Machine Errors: Port Networking Issues](/host/machine-errors#port-networking-issues) | +| `vericode=8` with another visible message | [Machine Error Reference](/host/machine-errors) | | TCP works but UDP fails | [Machine Errors: TCP works but UDP fails](/host/machine-errors#tcp-works-but-udp-fails) | | `GPU PCIE issue` or repeated AER messages | [Machine Errors: GPU PCIe Issue](/host/machine-errors#gpu-pcie-issue) | | `failed to inject CDI devices` or `unresolvable CDI devices` | [Machine Errors: CDI Device Injection](/host/machine-errors#cdi-device-injection) | @@ -136,9 +137,9 @@ Correlate timestamps with self-test runs, rentals, `gpu-burn`, or other load tes The Machines page shows red errors detected by the host software or platform. Fix the specific cause, then allow the platform to refresh. Do not assume immediate clearing after a single fix or reboot. For exact message meanings, see [Machine Error Reference](/host/machine-errors). -## Port Issue / vericode=8 +## Port Issue / Port Networking Issues -`Port issue`, `vericode=8`, and self-test progress timeouts usually mean a direct-port reachability problem. Confirm the configured host port range, forward the same range to the host LAN IP, and test from outside the LAN because same-LAN tests can be misleading. +`Port issue`, `Port Networking Issues`, and self-test progress timeouts usually mean a direct-port reachability problem. `vericode=8` means a host-facing machine error is present; use the exact visible message to decide whether it is a port issue or another machine error. For port-networking cases, confirm the configured host port range, forward the same range to the host LAN IP, and test from outside the LAN because same-LAN tests can be misleading. Forward both TCP and UDP. CGNAT, double NAT without a real public forwarding path, no inbound public IP, blocked inbound ports, or incompatible IPv6-only service are not supported hosting setups. See [Network & Ports](/host/network-ports) for the full checklist. diff --git a/host/common-host-questions.mdx b/host/common-host-questions.mdx index 75340dc8..a27426eb 100644 --- a/host/common-host-questions.mdx +++ b/host/common-host-questions.mdx @@ -47,7 +47,7 @@ Use this page to route common host questions to the page that owns the answer. | What if I am behind CGNAT, Starlink, IPv6-only, or no public IP? | [Network & Ports](/host/network-ports#cgnat-starlink-ipv6) | | How do I test ports from outside my LAN? | [Network & Ports](/host/network-ports#test-ports-outside-lan) | | What does self-test check? | [How to Self-Test](/host/how-to-self-test#what-the-self-test-checks) | -| What does `vericode=8` mean? | [Self-Test Reference](/host/self-test-reference#vericode-8) | +| What does `vericode=8` mean? | [Glossary](/host/glossary#vericode) and [Machine Error Reference](/host/machine-errors) | | Why is my machine not found, not rentable, or not in search? | [Why Isn't My Machine in Search?](/host/not-in-search) | | How does verification work? | [Understanding Verification](/host/understanding-verification) | diff --git a/host/glossary.mdx b/host/glossary.mdx index 21aefa7f..6f0a1604 100644 --- a/host/glossary.mdx +++ b/host/glossary.mdx @@ -104,11 +104,11 @@ Automated status indicating a machine meets platform standards. See [Verificatio ### vericode -A numeric verification-status signal. +A numeric verification-status signal used on offers. -`vericode=8` means **Port Networking Issues**: Vast could not verify direct public port connectivity. +`vericode=8` means the platform has a host-facing machine `error_msg`. `Port Networking Issues` is one common `vericode=8` message, but the same bit can also appear for other machine errors such as Docker/NVIDIA runtime, CDI, PCIe, or daemon errors. -Common causes include closed external ports, forwarding to the wrong LAN IP, CGNAT or double NAT without a real public forwarding path, no inbound public IP, host firewall rules, TCP/UDP mismatch, or stale port range. See [Self-Test Reference: vericode=8](/host/self-test-reference#vericode-8) and [Network & Ports](/host/network-ports). +Use the exact console message when choosing a fix. For `Port Networking Issues`, common causes include closed external ports, forwarding to the wrong LAN IP, CGNAT or double NAT without a real public forwarding path, no inbound public IP, host firewall rules, TCP/UDP mismatch, or stale port range. See [Self-Test Reference: vericode=8](/host/self-test-reference#vericode-8), [Machine Error Reference](/host/machine-errors), and [Network & Ports](/host/network-ports). ### Volume offer diff --git a/host/machine-errors.mdx b/host/machine-errors.mdx index a80b9007..e3458b6b 100644 --- a/host/machine-errors.mdx +++ b/host/machine-errors.mdx @@ -26,7 +26,8 @@ Resolved errors may take time to clear because the host daemon and platform need | Message or symptom | Likely area | Start here | | --- | --- | --- | -| `Port issue`, `port networking issues`, `Port Networking Issues`, `vericode=8` | Public port reachability | [Port Networking Issues](#port-networking-issues) | +| `Port issue`, `port networking issues`, `Port Networking Issues` | Public port reachability | [Port Networking Issues](#port-networking-issues) | +| `vericode=8` with another visible message | Host-facing machine `error_msg` | Use the exact message in this table | | TCP works but UDP fails | Public port protocol mismatch | [TCP works but UDP fails](#tcp-works-but-udp-fails) | | `nvidia-container-cli: device error:` | NVIDIA container runtime or GPU device state | [NVIDIA container runtime](#nvidia-container-runtime) | | `failed to inject CDI devices: unresolvable CDI devices` | NVIDIA CDI / Docker GPU injection | [CDI device injection](#cdi-device-injection) | @@ -48,7 +49,7 @@ Resolved errors may take time to clear because the host daemon and platform need ## Port Networking Issues -`Port issue`, `port networking issues`, `Port Networking Issues`, and `vericode=8` usually mean Vast could not reach the machine through the configured direct ports. +`Port issue`, `port networking issues`, and `Port Networking Issues` usually mean Vast could not reach the machine through the configured direct ports. `vericode=8` by itself only tells you a host-facing machine `error_msg` exists; use the exact visible message to decide whether it is a port issue, CDI issue, PCIe issue, daemon issue, or another machine error. Check: diff --git a/host/network-ports.mdx b/host/network-ports.mdx index 7460ab2b..74b7fd72 100644 --- a/host/network-ports.mdx +++ b/host/network-ports.mdx @@ -112,7 +112,7 @@ During self-test, troubleshoot the exact public IP and port reported by the CLI, ## Connectivity Failures -Self-test timeouts and [`vericode=8`](/host/glossary#vericode) usually mean a network-path problem. See [Self-Test Reference: vericode=8](/host/self-test-reference#vericode-8) and [no response for 120s](/host/self-test-reference#no-response-120s). +Self-test timeouts and `Port Networking Issues` usually mean a network-path problem. [`vericode=8`](/host/glossary#vericode) means a host-facing machine error is present; use the exact visible message to confirm whether it is the port-networking case. See [Self-Test Reference: vericode=8](/host/self-test-reference#vericode-8) and [no response for 120s](/host/self-test-reference#no-response-120s). ## Related Pages diff --git a/host/self-test-reference.mdx b/host/self-test-reference.mdx index bfd21b9d..6654515c 100644 --- a/host/self-test-reference.mdx +++ b/host/self-test-reference.mdx @@ -13,13 +13,13 @@ personas: Use this reference to look up self-test failures, understand what they usually mean, and choose the next diagnostic step. Each failure has its own anchor so CLI errors and support replies can link directly to it. -## vericode=8 / Port Networking Issues +## vericode=8 And Port Networking Issues [Glossary: vericode](/host/glossary#vericode) -[vericode=8](/host/glossary#vericode) is a platform-detected direct-port or connectivity problem. Common causes include closed external ports, forwarding to the wrong LAN IP, CGNAT or double NAT without a real public forwarding path, no inbound public IP, firewall rules, TCP/UDP mismatch, asymmetric protocol handling, or a stale port range. +`vericode=8` means the machine has a host-facing `error_msg` in the platform state. If the visible message is `Port Networking Issues`, `Port issue`, or similar wording, treat it as a direct-port or connectivity problem. Other `vericode=8` cases can point to Docker/NVIDIA runtime, CDI, PCIe, daemon, or other machine errors, so use the exact console message when choosing the next fix. -Test the public IP:port if available, verify router and host firewall rules, then rerun the self-test after fixing the network path. See [Network & Ports](/host/network-ports) for the full connectivity checklist. +For port-networking cases, common causes include closed external ports, forwarding to the wrong LAN IP, CGNAT or double NAT without a real public forwarding path, no inbound public IP, firewall rules, TCP/UDP mismatch, asymmetric protocol handling, or a stale port range. Test the public IP:port if available, verify router and host firewall rules, then rerun the self-test after fixing the network path. See [Network & Ports](/host/network-ports) for the full connectivity checklist and [Machine Error Reference](/host/machine-errors) for non-port `vericode=8` errors. ## No response for 120s From a761af3e02213452eea3f55640023fb83a5810d6 Mon Sep 17 00:00:00 2001 From: Hannes Zietsman Date: Wed, 24 Jun 2026 13:15:14 +0200 Subject: [PATCH 19/20] CON-1531 expand machine error guidance --- host/machine-errors.mdx | 63 +++++++++++++++++++++++++++++++++--- host/self-test-reference.mdx | 21 ++++++++++++ 2 files changed, 79 insertions(+), 5 deletions(-) diff --git a/host/machine-errors.mdx b/host/machine-errors.mdx index e3458b6b..928d55ae 100644 --- a/host/machine-errors.mdx +++ b/host/machine-errors.mdx @@ -18,10 +18,20 @@ Do not reset machine identity, force-refresh machine specs with internal scripts ## What Machine Errors Mean -Machine errors usually mean the host software or platform detected a problem with networking, Docker, NVIDIA runtime, GPU health, storage, VM support, or self-test runtime behavior. Some errors affect verification or listing eligibility. Others are informational symptoms that need logs before the cause is clear. +Machine errors usually mean the host software or platform detected a problem with networking, Docker, NVIDIA runtime, GPU health, storage, VM support, or self-test runtime behavior. + +Errors have different impact levels. Some de-verify the whole machine and take it off the market until the error clears. Some only disable VM GPU-passthrough offers while container rentals can remain listed. Some are logged against a single rental attempt and do not change the machine's listing state by themselves. Resolved errors may take time to clear because the host daemon and platform need to observe healthy state again. Do not assume immediate clearing after a single fix or reboot. +## Listing Impact + +| Impact | What happens | Examples | What to do | +| --- | --- | --- | --- | +| Machine de-verified | The machine is marked unverified and taken off the market until the error clears. | Port networking issues, Docker/NVIDIA runtime errors, GPU PCIe/ECC faults, Docker daemon unavailable, XFS project quota errors | Fix the host-side cause, verify the host is healthy, then allow the platform to refresh. | +| VM offers disabled | The machine can stay listed for container rentals, but VM GPU-passthrough rentals are disabled while the VM condition persists. | IOMMU changes, GDM holding a GPU, VM memory preflight failure, machine authentication denied while fetching VM secrets | Fix the VM-specific prerequisite, then wait for the machine to report clean state again. | +| Logged only | The message is recorded against a specific rental attempt and does not de-verify or unlist the machine by itself. | Container create, build, volume, template-update, or secrets-service messages | Use the message as support context if the rental failed or repeats. | + ## Quick Lookup | Message or symptom | Likely area | Start here | @@ -44,7 +54,9 @@ Resolved errors may take time to clear because the host daemon and platform need | Full client storage, `no space left on device` | Docker storage capacity | [Full client storage](#full-client-storage) | | Machine not found or not rentable | Offer/listing/rentability state | [Machine not rentable](#machine-not-rentable) | | Red machine error / unhealthy / deverified | Machine health or platform state | [Generic red machine error](#generic-red-machine-error) | -| VM/IOMMU/GDM/KVM guest driver error | VM host support | [VM and IOMMU errors](#vm-and-iommu-errors) | +| `` | Manual Vast admin review flag | [Admin-set machine error](#admin-set-machine-error) | +| IOMMU, GDM, machine does not support VMs, VM memory preflight, or VM secrets HTTP 401 | VM host support | [VM offer errors](#vm-offer-errors) | +| Container create, build, volume, template update, or secrets-service message | Single rental attempt | [Rental-attempt messages](#rental-attempt-messages) | ## Port Networking Issues @@ -250,15 +262,56 @@ A red machine error means the host software or platform detected a machine-healt If the host looks healthy but the console state remains wrong, collect logs and escalate to Vast support. Do not assume support can manually verify ordinary machines; verification and most eligibility checks are automated. + +## Admin-Set Machine Error + +`` means a Vast administrator manually flagged the machine for investigation. This is not an automatic host self-test result. + +Do not try to clear this by resetting machine identity or running internal scripts. Review the visible console message, collect host logs and recent-change details, then follow up with Vast support. + + -## VM And IOMMU Errors +## VM Offer Errors -VM-related messages such as “machine does not support VMs,” unexpected configuration changes, IOMMU grouping failures, or KVM guest driver test failures need host-specific review. +VM-related messages can disable VM GPU-passthrough offers while leaving ordinary container rentals listed. These errors clear after the underlying condition is fixed and the machine reports clean state again, but exact timing can vary. -Check VM prerequisites, BIOS/IOMMU settings, GPU isolation, and whether the machine configuration changed after listing. VM entries still need backend/support review before the public reference should give exact clearing or deverification timing. +| Message | Likely cause | Start here | +| --- | --- | --- | +| `IOMMU config or Nvidia DRM Modeset has changed to no longer support VMs` | IOMMU or passthrough setup changed, a GPU shares an incompatible IOMMU group, or NVIDIA DRM modeset became enabled. | Check BIOS IOMMU/VT-d/AMD-Vi, GPU isolation, and NVIDIA modeset settings. | +| `GDM is on; VMs will no longer work.` | GDM is running and holding a GPU, which conflicts with VFIO passthrough. | Disable the display manager for VM-capable headless hosting, then reboot or re-check GPU ownership. | +| `Error: machine does not support VMs.` | A VM failed because hardware virtualization or IOMMU is not enabled or available. | Enable Intel VT-d or AMD-Vi/IOMMU in BIOS if the hardware supports it. | +| `Error: Unexpected configuration change; cannot assign GPUs to VMs.` | GPU IOMMU grouping changed since verification. | Review BIOS, kernel, driver, and GPU-slot changes made after listing. | +| `Error: Machine incompatible with VMs after host change. Please destroy the instance and find a new machine.` | Host configuration changed and the machine no longer meets VM-passthrough prerequisites. | Treat this as VM-specific incompatibility; do not reset machine identity to work around it. | +| `Error: unable to complete out-of-memory-check` | VM preflight could not confirm enough usable host memory. | Check host RAM pressure, reserved memory, and whether too many workloads are active. | +| `Secrets fetch failed: machine authentication denied (HTTP 401)` | Machine credentials were rejected while fetching instance secrets. | Collect logs and escalate if it repeats; do not use machine-ID reset workflows. | +| `Error: GPU error, unable to start instance.` | A GPU error blocked VM startup. Repeated occurrences can disable VM offers. | Check GPU health, driver/NVML state, Xid logs, and VM prerequisites. | See [VMs & IOMMU](/host/vms). + +## Rental-Attempt Messages + +Some messages are logged against a specific rental attempt and do not change the machine's verification or listing by themselves. They can still explain why a specific rental failed. + +| Message | Meaning | +| --- | --- | +| `Error: Internal error.` | Unexpected internal error while creating the container. | +| `Error: container is mounted` | A leftover mount from a previous run blocked the operation. | +| `Error: Requested volume does not exist: ` | The requested storage volume was deleted or never existed. | +| `docker_build(): ` | Docker build failed and wrapped the build's own output. | +| `Waiting for template update` | Transitional state while the image or template updates. This is not a machine fault by itself. | +| `unknown` | The failed operation did not provide a more specific message. | +| `Secrets fetch failed: network/subprocess error` | The secrets service could not be reached because of network or local subprocess failure before a response. | +| `Secrets fetch failed: empty response` | The secrets service returned an empty body. | +| `Secrets fetch failed: instance not found or access denied (HTTP 404)` | The instance was not found, or access was denied. | +| `Secrets fetch failed: bad request (HTTP 400)` | The secrets request was malformed. | +| `Secrets fetch rate limited (HTTP 429)` | The secrets service rate-limited the request. | +| `Secrets fetch failed: server error (HTTP )` | The secrets service returned a 5xx server error. | +| `Secrets fetch failed: unexpected HTTP ` | The secrets service returned another non-success status. | +| `Secrets fetch JSON parse error` | The secrets response was not valid JSON. | + +If one of these repeats across rentals, collect the exact message, timestamp, instance details, and host logs before asking for help. + ## What To Collect diff --git a/host/self-test-reference.mdx b/host/self-test-reference.mdx index 6654515c..f1cdd037 100644 --- a/host/self-test-reference.mdx +++ b/host/self-test-reference.mdx @@ -12,6 +12,27 @@ personas: Use this reference to look up self-test failures, understand what they usually mean, and choose the next diagnostic step. Each failure has its own anchor so CLI errors and support replies can link directly to it. +## Quick Error Lookup + +Use the exact message printed by the CLI. Fix the host-side cause, then rerun self-test. + +| Message or stage | Usually means | Host action | +| --- | --- | --- | +| `Machine not found or not rentable` | The machine is not testable from the current account or has no rentable offer. | Check listing state, active offers, account/API key, reliability, red errors, and missing machine details. | +| `Reliability <= 0.90` | The machine has not met the reliability gate. | Keep the host online and stable; use diagnostic mode only for troubleshooting, not verification proof. | +| `Authorization Error`, `HTTP 401`, or missing permission | The API key cannot inspect the machine or offer. | Use a host-enabled account/API key with the needed machine and offer permissions. | +| `CUDA compatibility` failure | Driver/runtime support is too old for the self-test image. | Update or repair the NVIDIA driver stack, then confirm Docker GPU access. | +| Direct ports below requirement | The machine does not expose enough direct ports for the listed GPUs. | Configure and forward at least 3 TCP/UDP ports per listed GPU for self-test; use more headroom for production hosting. | +| PCIe bandwidth failure or `bad bandwidthtest2` | GPU transfer or PCIe health is below the gate. | Check PCIe lanes, risers, slots, power, thermals, Xid/AER logs, and GPU seating. | +| Upload/download bandwidth failure | Network throughput is below the machine requirement. | Check ISP/datacenter bandwidth, routing, host load, and repeated speed results. | +| VRAM, RAM, or physical CPU core failure | Hardware resources do not meet the listed GPU requirement. | Confirm visible GPUs, host RAM, and at least one physical CPU core per visible GPU. | +| `progress_endpoint_unreachable`, `progress_empty_timeout`, `progress_endpoint_lost`, or `No response for 120s` | The temporary test instance did not provide progress. | Check public TCP reachability, container startup, Docker/NVIDIA runtime, daemon logs, and the support bundle. | +| UDP echo failure | TCP may work, but the public UDP path failed. | Forward UDP for the same direct port range and test from outside the LAN. | +| System requirements failure | The container could not confirm core host resources. | Check RAM, CPU cores, GPU visibility, and container logs in the bundle. | +| ResNet, ECC, or `gpu-burn` failure | GPU compute, memory, ECC, thermal, or stability issue. | Check `nvidia-smi`, Xid/NVRM logs, thermals, power, and rerun after fixing hardware/driver issues. | +| `failed to inject CDI devices` or `nvidia-container-cli` | Docker could not inject GPUs into the container. | Confirm `nvidia-smi` and a normal Docker GPU container both work. | +| `nccl_failed` | Multi-GPU communication failed. | Check CUDA/NCCL compatibility, PCIe/NVLink topology, P2P, Xid logs, and Fabric Manager on NVSwitch systems. | + ## vericode=8 And Port Networking Issues From f16f886dda0a8867b7e65907b397dad08a18ce99 Mon Sep 17 00:00:00 2001 From: Hannes Zietsman Date: Mon, 29 Jun 2026 10:37:05 +0200 Subject: [PATCH 20/20] Stack headless host guide onto IA mockup --- host/headless-install.mdx | 193 ++++++++++++++++++++++++++---------- host/optimization-guide.mdx | 5 + 2 files changed, 147 insertions(+), 51 deletions(-) diff --git a/host/headless-install.mdx b/host/headless-install.mdx index c615de3c..75ba41ab 100644 --- a/host/headless-install.mdx +++ b/host/headless-install.mdx @@ -1,5 +1,5 @@ --- -title: "Headless Install Path" +title: "Headless Hosting Guide" sidebarTitle: "Headless Install" description: "SSH-only, Ubuntu Server install path for datacenter and remote-managed hosts." "canonical": "/host/headless-install" @@ -9,28 +9,26 @@ personas:
Headless / DC
-Use this path for hosts managed over SSH, BMC, or IPMI with no local display or desktop environment. +Use this path when the host is installed and operated entirely over SSH, BMC, or IPMI: no display, keyboard, or desktop environment. It takes a clean Ubuntu Server machine to a listed Vast host from the command line. -Start from a clean Ubuntu 24.04.x Server install with OpenSSH enabled. Check [Supported Hardware](/host/supported-hardware) before installing. +Start with a **clean install of Ubuntu 24.04.x Server** (HWE kernel recommended). During the Ubuntu installer, add OpenSSH and nothing else. Confirm the machine meets the host hardware expectations before buying, reinstalling, or listing it. -## 1. Connect Over SSH +## First SSH Connection After Provisioning -After a reinstall, SSH may show a new host-key fingerprint. Confirm the fingerprint through your provider console or BMC/IPMI before accepting it. - -If the reinstall was expected: +On a newly installed or reprovisioned host, SSH may show a new host-key fingerprint. Confirm the fingerprint against your provider console, BMC/IPMI console, or expected reprovision event before accepting it. If the host was intentionally reinstalled and the new fingerprint is correct, remove the old known-host entry and reconnect: ```bash ssh-keygen -R HOST_PUBLIC_IP ssh ubuntu@HOST_PUBLIC_IP ``` -Do not accept an unexplained fingerprint change. +Do not accept a changed fingerprint if you cannot explain why it changed. -## 2. Update Ubuntu +## Step 1: Update The System -Use noninteractive `apt-get` so SSH sessions do not hang on config prompts: +For SSH-only installs, use noninteractive `apt-get` so provider image config prompts do not block the session: ```bash sudo apt-get update @@ -40,58 +38,79 @@ sudo DEBIAN_FRONTEND=noninteractive apt-get $APT_OPTS dist-upgrade -y sudo DEBIAN_FRONTEND=noninteractive apt-get $APT_OPTS install -y update-manager-core ``` -If the HWE kernel is not installed: +This keeps existing local config files if Ubuntu asks about files such as `/etc/issue` during an SSH upgrade. + +If you did not select the HWE kernel during install, install it now: ```bash +APT_OPTS="-o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold" sudo DEBIAN_FRONTEND=noninteractive apt-get $APT_OPTS install --install-recommends linux-generic-hwe-24.04 -y +``` + +Reboot after kernel changes: + +```bash sudo reboot ``` -## 3. Install NVIDIA Drivers +## Step 2: Install NVIDIA Drivers ```bash APT_OPTS="-o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold" sudo DEBIAN_FRONTEND=noninteractive apt-get $APT_OPTS install -y build-essential ubuntu-drivers-common sudo apt-get update +``` + +Ask Ubuntu which NVIDIA driver it recommends for the installed GPUs: + +```bash ubuntu-drivers devices ``` -Install the recommended stable driver. Example from one Ubuntu 24.04 test host: +Install the recommended stable driver. On a clean Ubuntu 24.04 test host, Ubuntu recommended `nvidia-driver-595-open`; your machine may recommend a different version. ```bash +APT_OPTS="-o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold" sudo DEBIAN_FRONTEND=noninteractive apt-get $APT_OPTS install -y nvidia-driver-595-open +``` + +Reboot: + +```bash sudo reboot ``` -After reconnecting: +After SSH reconnects, verify: ```bash nvidia-smi ``` -If `nvidia-smi` fails, fix the driver stack before running the Vast installer. +If `nvidia-smi` still fails after the package install, check whether `nouveau` is still bound to the GPUs and reboot before retrying the Vast installer. -## 4. Disable Automatic Updates +## Step 3: Disable Automatic Updates -Automatic package updates can disrupt drivers during rentals. Disable them and update only during planned maintenance: +Automatic updates can break drivers while clients are renting your machine. Disable them and only update manually when the host is unlisted and idle: ```bash sudo DEBIAN_FRONTEND=noninteractive apt-get purge --auto-remove unattended-upgrades -y -sudo systemctl disable apt-daily-upgrade.timer apt-daily.timer -sudo systemctl mask apt-daily-upgrade.service apt-daily.service +sudo systemctl disable apt-daily-upgrade.timer +sudo systemctl mask apt-daily-upgrade.service +sudo systemctl disable apt-daily.timer +sudo systemctl mask apt-daily.service ``` -See [Maintenance Windows](/host/maintenance-windows). +Only update manually when your machine is unlisted and idle, inside a planned maintenance window. See [Maintenance Windows](/host/maintenance-windows). -## 5. Configure X +## Step 4: X Server Config -Ubuntu Server does not need a desktop, but Vast containers need NVIDIA X configuration: +Vast containers need the X server configuration but not a desktop environment. On Ubuntu Server, run: ```bash sudo nvidia-xconfig -a --cool-bits=28 --allow-empty-initial-configuration --enable-all-gpus ``` -If the machine started as Ubuntu Desktop, remove GNOME first: +If the machine started life as Ubuntu Desktop, remove GNOME first: ```bash sudo apt-get update @@ -102,44 +121,77 @@ sudo update-grub sudo nvidia-xconfig -a --cool-bits=28 --allow-empty-initial-configuration --enable-all-gpus ``` -## 6. Mount Docker Storage +## Step 5: Mount NVMe For Docker Storage -Vast stores client data under `/var/lib/docker`. Put it on a dedicated XFS filesystem with project quotas. See [Storage Setup](/host/storage-setup). +This is the most important step. Vast stores client container data at `/var/lib/docker`, which should be on a dedicated drive or volume formatted as **XFS with project quotas**. See [Storage Setup](/host/storage-setup). -The example below wipes the target device. Do not use your OS disk. +The steps below **wipe the target drive**. If your OS is on `/dev/nvme0n1`, do not use that device. Check with `lsblk` first. -Identify the target: +**5a. Identify your drives:** ```bash lsblk -f findmnt / -findmnt /var/lib/docker || true findmnt /data0 || true +findmnt /var/lib/docker || true ``` -Create a partition if needed: +Find the NVMe, partition, RAID device, or LVM volume to use for Docker. It must be separate from the OS filesystem or intentionally reserved for Docker. Some bare-metal providers create a `/data0` mount; only reuse it if you have confirmed it is empty or disposable. + +**5b. Partition the drive** (replace `/dev/nvme0n1` with your device): ```bash sudo cfdisk /dev/nvme0n1 ``` -Format, mount, and verify: +In the menu: choose **gpt** if asked for a label type, select **New** (Enter for the full disk), select **Write** and type **yes**, then **Quit**. This creates a partition at `/dev/nvme0n1p1`. + +**5c. Format as XFS:** + +If the target is already mounted somewhere else, such as `/data0`, unmount it first: + +```bash +if findmnt -S /dev/nvme0n1p1 >/dev/null; then + sudo umount /dev/nvme0n1p1 +fi +``` ```bash sudo mkfs.xfs /dev/nvme0n1p1 +``` + +Do not use `mkfs.ext4`: Vast requires XFS for per-container storage quotas. + +**5d. Create the Docker directory:** + +```bash sudo mkdir -p /var/lib/docker +``` + +**5e. Get the drive's UUID:** + +```bash sudo blkid /dev/nvme0n1p1 ``` -Add an `/etc/fstab` line using your UUID: +Copy the UUID value from the output. Using the UUID is safer than device names, which can change between reboots. + +**5f. Add to `/etc/fstab`** (replace the UUID with yours). If the same device already has an older `/data0` line, comment out or remove that old line first. ```text UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 /var/lib/docker xfs rw,auto,pquota,nofail 0 0 ``` -Then mount: +| Option | Purpose | +| --- | --- | +| `rw` | Read-write access. | +| `auto` | Mount automatically at boot. | +| `pquota` | Required by Vast; enables per-container storage quotas. | +| `nofail` | System still boots if the drive has an issue. | + +**5g. Mount and verify:** ```bash sudo mount -a @@ -148,27 +200,29 @@ findmnt /var/lib/docker -no SOURCE,FSTYPE,OPTIONS sudo xfs_quota -x -c "state" /var/lib/docker ``` -Project quota accounting and enforcement must be ON. +You should see the NVMe or LVM volume mounted at `/var/lib/docker` with the correct size. The mount must be XFS with `pquota` or `prjquota`, and project quota accounting/enforcement must be ON. + +## Step 6: Enable GPU Persistence Mode -## 7. Enable GPU Persistence +GPU persistence keeps GPUs initialized between jobs so they idle at low power instead of fully reinitializing each time: ```bash sudo bash -c '(crontab -l 2>/dev/null; echo "@reboot nvidia-smi -pm 1" ) | crontab -' ``` -## 8. Run The Vast Installer +## Step 7: Install The Vast Host Software -Use the official Host Installer Wizard from the [Vast host setup page](https://cloud.vast.ai/host/setup/). Copy a fresh command from the host-enabled account and run it over SSH. +Use the official Host Installer Wizard (TUI) for headless machines. Sign in to the host-enabled account, open the [Vast host setup page](https://cloud.vast.ai/host/setup/), copy the current installer command, and run it over SSH on the host machine. -Use `tmux` if the SSH session may drop: +Keep the SSH session open until the wizard finishes. If the connection might drop, start a `tmux` or `screen` session first: ```bash tmux new -s vast-install ``` -Do not reuse old installer commands, screenshots, third-party commands, or a command copied from another account. +The wizard should validate account access, drivers, hardware, storage, ports, network speed, installation, and self-test readiness. Do not reuse old `wget`/`python3 install` commands from notes, screenshots, third-party guides, or another account. The setup-page machine installation key is not the same as a normal Vast API key. -If the TUI cannot run reliably in your SSH terminal, use the [headless fallback](/host/installing-host-software#headless-fallback): +If the SSH terminal cannot drive the TUI reliably, use the raw installer as a headless fallback. Include both the prepared Docker storage device and the direct port range: ```bash read -rsp "Paste fresh Vast host setup key: " VAST_HOST_KEY @@ -180,11 +234,31 @@ sudo python3 ./install "$VAST_HOST_KEY" \ unset VAST_HOST_KEY ``` -Use `--no-driver` only after `nvidia-smi` shows all GPUs. +Use `--no-driver` only after `nvidia-smi` shows all GPUs. Replace the Docker storage device and ports with your actual host values. -## 9. Configure Networking +## Step 8: Configure GRUB Only When Needed -Forward the direct port range from outside your network to the host for both TCP and UDP. If the installer did not set the range, configure it: +Do not change kernel boot parameters during a normal Docker-only install unless you are fixing a specific driver problem or enabling [VM support](/host/vms). If you are preparing VM support, edit `/etc/default/grub` and add the VM-related options for your CPU platform: + +```text +GRUB_CMDLINE_LINUX="amd_iommu=on nvidia_drm.modeset=0" +``` + +| Option | Purpose | +| --- | --- | +| `amd_iommu=on` | Enables IOMMU on AMD CPUs; needed for [VM support](/host/vms) and PCIe passthrough. | +| `intel_iommu=on` | Use this instead of `amd_iommu=on` on Intel platforms. | +| `nvidia_drm.modeset=0` | Disables NVIDIA kernel modesetting for VM compatibility. | + +Apply the changes: + +```bash +sudo update-grub +``` + +## Step 9: Configure Networking + +Forward the direct port range from outside your network to the host for both TCP and UDP. Set the port range for client instances if you did not already pass it to the installer. This 8-GPU example gives about 100 direct ports per listed GPU: ```bash echo -n "40000-40799" | sudo tee /var/lib/vastai_kaalia/host_port_range @@ -192,36 +266,53 @@ sudo systemctl restart vastai.service sudo tail -n 50 /var/lib/vastai_kaalia/kaalia.log | grep host_port_range ``` -Size the range with [Network & Ports](/host/network-ports#ports-per-gpu). Test from outside the LAN; same-LAN tests can be misleading because of NAT hairpinning. +Use `echo -n` so the file contains only the dash-separated range. -## 10. Reboot And Verify +Size the range for the number of GPUs you plan to list with [Network & Ports](/host/network-ports#ports-per-gpu). Test that ports are reachable **from outside your LAN**: same-LAN tests can fail from NAT hairpinning. One option is to run `sudo nc -l -p PORT` on the host and check from an external network or [portchecker.co](https://portchecker.co). + +## Step 10: Fix NVML Error If Needed + +If the installer reports an NVML error, treat it as an NVIDIA driver/library mismatch or GPU driver health issue. Plan downtime, reboot first, then reinstall or repair the NVIDIA driver stack if the mismatch remains. + +## Step 11: Reboot And Verify ```bash sudo reboot ``` -After reconnecting: +After reboot, check everything is healthy: ```bash +# Check NVMe is mounted to /var/lib/docker df -h /var/lib/docker findmnt /var/lib/docker -no SOURCE,FSTYPE,OPTIONS sudo xfs_quota -x -c "state" /var/lib/docker + +# Check the Vast services and Docker are running systemctl is-active vastai.service vast_metrics.service docker nvidia-persistenced.service + +# Check the configured port range sudo cat /var/lib/vastai_kaalia/host_port_range + +# Check GPUs are visible nvidia-smi ``` -Then list, self-test, and monitor the machine: +## Step 12: List, Self-Test, And Monitor -- [Pricing Your Listing](/host/pricing-your-listing) -- [How to Self-Test](/host/how-to-self-test) -- [First 24 Hours After Install](/host/first-24-hours) +1. List the machine and set pricing. +2. Run the self-test from any machine with the CLI: [How to Self-Test](/host/how-to-self-test). If the installer starts the self-test automatically, it may wait about 10 minutes for the daemon to initialize; watch `/var/lib/vastai_kaalia/self_test.log`. +3. If you run self-test from the same network as the host, your router must allow loopback (NAT hairpinning). Otherwise, run it from a cloud VM or a mobile connection. +4. Watch the first day over SSH: keep an eye on `vastai.service`, Docker, GPU visibility, port reachability, and the self-test log. ## Related Pages | Topic | Read next | | --- | --- | +| Host overview | [Hosting Overview](/host/hosting-overview) | | Standard install | [Installing Host Software](/host/installing-host-software) | | Storage layout | [Storage Setup](/host/storage-setup) | -| Fleet operations | [Fleet Operations](/host/fleet-operations) | -| Maintenance | [Maintenance Windows](/host/maintenance-windows) | +| Port planning | [Network & Ports](/host/network-ports) | +| Self-test | [How to Self-Test](/host/how-to-self-test) | +| VM support | [VMs & IOMMU](/host/vms) | +| First day | [First 24 Hours After Install](/host/first-24-hours) | diff --git a/host/optimization-guide.mdx b/host/optimization-guide.mdx index e7b5acc6..88a6f39a 100644 --- a/host/optimization-guide.mdx +++ b/host/optimization-guide.mdx @@ -2,8 +2,13 @@ title: "Optimize Your Earnings" description: "Key listing settings that affect occupancy and revenue." "canonical": "/host/optimization-guide" +personas: + - business-owner + - pro-operator --- +
BusinessPro Operator
+ Use this page after your machine is ready to list. Hardware matters, but listing settings decide who can find and rent it. ## Core Rule