()
| 48 | |
| 49 | |
| 50 | async def deploy() -> None: |
| 51 | args = parse_args() |
| 52 | |
| 53 | backup_bucket = args.backup_bucket or os.environ["BACKUP_BUCKET"] |
| 54 | |
| 55 | model = art.TrainableModel( |
| 56 | name=args.model, |
| 57 | project=args.project, |
| 58 | base_model=args.base_model, |
| 59 | ) |
| 60 | |
| 61 | if args.step == "latest": |
| 62 | print("Pulling all checkpoints to determine the latest step…") |
| 63 | # pull all checkpoints to determine the latest step |
| 64 | await pull_model_from_s3( |
| 65 | model_name=model.name, |
| 66 | project=model.project, |
| 67 | art_path=args.art_path, |
| 68 | s3_bucket=backup_bucket, |
| 69 | ) |
| 70 | step = get_model_step(model, args.art_path) |
| 71 | else: |
| 72 | print(f"Pulling checkpoint for step {args.step}…") |
| 73 | step = int(args.step) |
| 74 | # only pull the checkpoint we need |
| 75 | await pull_model_from_s3( |
| 76 | model_name=model.name, |
| 77 | project=model.project, |
| 78 | art_path=args.art_path, |
| 79 | s3_bucket=backup_bucket, |
| 80 | step=step, |
| 81 | ) |
| 82 | |
| 83 | print( |
| 84 | f"Deploying {args.model} (project={args.project}, step={step}) " |
| 85 | f"using checkpoints from s3://{backup_bucket}…" |
| 86 | ) |
| 87 | |
| 88 | # Construct the checkpoint path from the pulled model |
| 89 | checkpoint_path = get_step_checkpoint_dir( |
| 90 | get_model_dir(model=model, art_path=args.art_path), step |
| 91 | ) |
| 92 | |
| 93 | deployment_result = await deploy_model( |
| 94 | model=model, |
| 95 | checkpoint_path=checkpoint_path, |
| 96 | step=step, |
| 97 | provider="together", |
| 98 | config=TogetherDeploymentConfig( |
| 99 | s3_bucket=backup_bucket, |
| 100 | wait_for_completion=True, |
| 101 | ), |
| 102 | verbose=True, |
| 103 | ) |
| 104 | |
| 105 | print("Deployment successful! ✨") |
| 106 | print(f"Model deployed under name: {deployment_result.inference_model_name}") |
| 107 |
no test coverage detected