-
Notifications
You must be signed in to change notification settings - Fork 531
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Preliminary Vast AI support #4365
base: master
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for contributing to this @kristopolous ! This is really exciting. Left some discussions. One main confusion I have is that, does vast ai like runpod, a cloud providing pods to users as their "VM"s? Asking because I'm seeing a lot of docker related code, and just want to confirm :)
sky/clouds/vast.py
Outdated
clouds.CloudImplementationFeatures.STORAGE_MOUNTING: | ||
('Mounting object stores is not supported on Vast. To read data ' | ||
'from object stores on Vast, use `mode: COPY` to copy the data ' | ||
'to local disk.'), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same, is this not supported as well? This seems only not enabled in runpod for now, which I suppose is due to its pod nature for provisioned "VM"s. Is vast ai also provide pods to the user?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That was a copy/paste. We're actually working on releasing storage by the end of the calendar year. Right now, purchasing additional storage through us is not supported. I will change this to be more reflective of the current state of things.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
see 98e3db5
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just want to make sure, it sounds like you are referring to cloud storage from VastAI? IIUC this feature actually means can you mount storages from any cloud (e.g. S3, GCS) in the VastAI clusters, and it should be supported as long as some mounting utils is supported. Though if VastAI using the same container fashion provisioning, it might not work as well. cc @romilbhardwaj - what is the reason runpod not support this feature?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
users are succeeding in this through our container model but we don't have any "official" support. We just announced/released VM support today and with it users will be able to do more conventional mounting of remote stores. If this is really a deal breaker I can work on making it officially supported everywhere somehow but that's a larger project.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I see. If that is the case then LGTM!
'from object stores on Vast, use `mode: COPY` to copy the data ' | ||
'to local disk.'), | ||
} | ||
_MAX_CLUSTER_NAME_LEN_LIMIT = 120 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I tried to search this but does not seems yielding an answer for me. Is it possible to add some doc reference for this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
right, that was just sloppiness on my part. I'll update it. Thanks.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
there was some additional cleanup required: kristopolous@3eb8823
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
bump for this - not seeing the reference now?
historically, runpod was a clone of vast. We currently offer docker-style containers and will be providing vms soonish (probably before end of year) |
e9e922a
to
4c9aff9
Compare
these test passing is blocked by https://github.com/skypilot-org/skypilot-catalog/pull/100/commits |
2b3e658
to
25b99f9
Compare
Co-authored-by: Tian Xia <[email protected]>
Co-authored-by: Tian Xia <[email protected]>
Co-authored-by: Tian Xia <[email protected]>
Co-authored-by: Tian Xia <[email protected]>
3010706
to
7face5e
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @kristopolous for the amazing speed! Just finished a pass and left some discussion :))
@@ -0,0 +1,67 @@ | |||
"""A script that generates the Vast Cloud catalog. """ | |||
|
|||
# pylint: disable=assignment-from-no-return |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why do we need this?
import re | ||
import sys | ||
|
||
from vastai_sdk import VastAI |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we use adaptors? Reference
from sky.adaptors import aws |
gpu_name = instance_type.split('-')[1].replace('_', ' ') | ||
num_gpus = int(instance_type.split('-')[0].replace('x', '')) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
from vastai_sdk import VastAI | ||
|
||
|
||
def create_instance_type(obj): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
def create_instance_type(obj): | |
def create_instance_type(obj: Dict[str, Any]) -> str: |
obj['cpu_cores']) | ||
|
||
|
||
def dot_get(d, key): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
def dot_get(d, key): | |
def dot_get(d: dict, key: str) -> Any: |
head_instance_id = _get_head_instance_id(running_instances) | ||
stopped_instances = status_filter(instances, ['EXITED', 'STOPPED']) | ||
|
||
if config.resume_stopped_nodes and len(stopped_instances): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if config.resume_stopped_nodes and len(stopped_instances): | |
if config.resume_stopped_nodes and stopped_instances: |
nit
del cluster_name_on_cloud, ports, provider_config # Unused. | ||
|
||
|
||
def query_ports( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Correct me if I'm wrong, but it seems like the open_ports
function is missing..? while the OPEN_PORTS
is not in the cloud unimplemented features? Should we implement this?
instance_id=instance_id, | ||
internal_ip=instance_info['local_ipaddrs'].strip(), | ||
external_ip=instance_info['public_ipaddr'], | ||
ssh_port=instance_info['ports']['22/tcp'][0]['HostPort'], |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
pls double check this file - correct me if im wrong, but seems like some merge conflict is not handled..? why are we adding so much code
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same, pls check the merge conflict for this.
This is preliminary support for Vast. It currently works on an unreleased version of the SDK which we will soon get up to PyPy
The document https://docs.google.com/document/d/1oWox3qb3Kz3wXXSGg9ZJWwijoa99a3PIQUHBR8UgEGs/edit?pli=1&tab=t.0 was followed and all the testing passed
Tested (run the relevant ones):
bash format.sh
pytest tests/test_smoke.py
pytest tests/test_smoke.py::test_fill_in_the_name
conda deactivate; bash -i tests/backward_compatibility_tests.sh
I'm pretty sure there will need to be edits, I'm fine with that. This is attempt 1. The outstanding work:
We need to