download_tools.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import argparse
  2. import logging
  3. import sys
  4. from gpustack.cmd.start import get_gpustack_env
  5. from gpustack.logging import setup_logging
  6. from gpustack.worker.tools_manager import ToolsManager
  7. logger = logging.getLogger(__name__)
  8. def setup_download_tools_cmd(subparsers: argparse._SubParsersAction):
  9. parser: argparse.ArgumentParser = subparsers.add_parser(
  10. "download-tools",
  11. description="Download dependency tools.",
  12. )
  13. parser.add_argument(
  14. "--tools-download-base-url",
  15. type=str,
  16. help="Base URL to download dependency tools.",
  17. default=get_gpustack_env("TOOLS_DOWNLOAD_BASE_URL"),
  18. )
  19. parser.add_argument(
  20. "--save-archive",
  21. type=str,
  22. help="Path to save downloaded tools as a tar archive.",
  23. default=get_gpustack_env("SAVE_ARCHIVE"),
  24. )
  25. parser.add_argument(
  26. "--load-archive",
  27. type=str,
  28. help="Path to load downloaded tools from a tar archive, instead of downloading.",
  29. default=get_gpustack_env("LOAD_ARCHIVE"),
  30. )
  31. parser.add_argument(
  32. "--system",
  33. type=str,
  34. help="Operating system to download tools for. Default is the current OS. (e.g. linux, windows, darwin)",
  35. default=get_gpustack_env("SYSTEM"),
  36. )
  37. parser.add_argument(
  38. "--arch",
  39. type=str,
  40. help="Architecture to download tools for. Default is the current architecture. (e.g. amd64, arm64)",
  41. default=get_gpustack_env("ARCH"),
  42. )
  43. parser.set_defaults(func=run)
  44. def run(args):
  45. setup_logging(False)
  46. try:
  47. verify(args)
  48. tools_download_base_url = None
  49. if args.tools_download_base_url:
  50. tools_download_base_url = args.tools_download_base_url.rstrip("/")
  51. tools_manager = ToolsManager(
  52. tools_download_base_url=tools_download_base_url,
  53. system=args.system,
  54. arch=args.arch,
  55. )
  56. if args.load_archive:
  57. tools_manager.load_archive(args.load_archive)
  58. return
  59. tools_manager.remove_cached_tools()
  60. tools_manager.prepare_tools()
  61. if args.save_archive:
  62. tools_manager.save_archive(args.save_archive)
  63. except KeyboardInterrupt:
  64. pass
  65. except ValueError as e:
  66. logger.fatal(e)
  67. sys.exit(1)
  68. except Exception as e:
  69. logger.fatal(f"Failed to download tools: {e}")
  70. sys.exit(1)
  71. def verify(args):
  72. if args.load_archive and args.tools_download_base_url:
  73. raise ValueError(
  74. "Cannot specify both load-archive and tools-download-base-url."
  75. )
  76. if args.save_archive and args.load_archive:
  77. raise ValueError("Cannot specify both save-archive and load-archive.")