.. currentmodule:: compute_horde_sdk.v1 ######################## Fallback ######################## Usage ===== .. important:: In order to use the fallback functionality, please install ComputeHorde SDK with ``fallback`` enabled (see :doc:`installation`). .. important:: This package uses ApiVer, make sure to import ``compute_horde_sdk.v1.fallback``. Running Jobs on a Fallback Cloud -------------------------------- If ComputeHorde is not operational for some reason, you can provide a logic for running the job on a fallback cloud like `RunPod `_. The fallback functionality uses `SkyPilot `_ cluster management utility. Running on Runpod ^^^^^^^^^^^^^^^^^ If you want to run your job on Runpod in case of any error: .. code-block:: python import asyncio import bittensor from compute_horde_sdk.v1 import ComputeHordeClient, ComputeHordeJobSpec, ExecutorClass from compute_horde_sdk.v1.fallback import FallbackClient, FallbackJobSpec async def main(): try: wallet = bittensor.wallet(name="...", hotkey="...") compute_horde_client = ComputeHordeClient( hotkey=wallet.hotkey, compute_horde_validator_hotkey="...", # usually the ss58_address of the hotkey above ) # Define your job job_spec = ComputeHordeJobSpec( executor_class=ExecutorClass.always_on__llm__a6000, job_namespace="SN123.0", docker_image="my-username/my-image:latest", ) # Run the job job = await compute_horde_client.run_until_complete(job_spec) except Exception: # Create the fallback client for Runpod fallback_client = FallbackClient("runpod", api_key=environ.get("RUNPOD_API_KEY")) # Define your fallback job base on the ComputeHorde spec fallback_spec = FallbackJobSpec.from_job_spec(spec, work_dir="/app", region="US") # Run the fallback job job = await fallback_client.run_until_complete(fallback_spec) print(job.status) # should be "Completed". asyncio.run(main())