Large Language Models Dataset Storage with DigitalOcean Spaces
PythonIf you are aiming to store large datasets, such as those used by machine learning models, you would need a reliable and scalable storage solution. DigitalOcean Spaces is an object storage service that enables you to store and serve large amounts of data. The data stored in Spaces is distributed across multiple physical servers to ensure durability and high availability. This makes it an excellent choice for storing large language models and datasets.
We will be using Pulumi to create a DigitalOcean Space for storing the datasets and a Spaces Access Key that will provide the necessary credentials to access the Space. For the purpose of illustration, the following Pulumi program in Python sets up a new DigitalOcean Space along with a policy that allows public read access to the objects stored within the Space. This means anyone with the URL can access the files, which can be useful for datasets meant to be publicly available. If you want to keep them private, you will modify the policy accordingly.
Below is the Pulumi Python program that creates a new DigitalOcean Space, configures it to be publicly readable, and sets up an access key:
import pulumi import pulumi_digitalocean as digitalocean # Create a new Space for storing the dataset. dataset_space = digitalocean.SpacesBucket("dataset-space", name="my-dataset-space", region="nyc3", # You can choose your preferred region, e.g., "sfo2", "sgp1", etc. ) # Create a Spaces Access Key that allows you to interact with the Space. # This is equivalent to AWS's Access Key and Secret. spaces_access_key = digitalocean.SpacesAccessKey("my-spaces-access-key") # Define a policy that allows public read access to our Space. # The policy is specified in JSON format. public_read_policy = """ { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": ["arn:aws:s3:::%s/*"] } ] } """ % (dataset_space.name) # Apply the public read policy to our Space. dataset_space_policy = digitalocean.SpacesBucketPolicy("dataset-space-policy", bucket=dataset_space.name, policy=public_read_policy, ) # Export the Space endpoint and the Spaces access key ID. pulumi.export("space_endpoint", dataset_space.bucket_domain_name) pulumi.export("access_key_id", spaces_access_key.id)
To understand the code:
digitalocean.SpacesBucket
: This resource is used to create a new Space which acts like a bucket in S3. You need to provide a unique name and a region.digitalocean.SpacesAccessKey
: This resource represents the credentials to access the Spaces you've created. It's useful when you want to programmatically upload, download, or manage objects within your Space.digitalocean.SpacesBucketPolicy
: This resource applies an IAM policy similar to that in AWS, defining the permissions for the Space. In the example above, we've set a policy (public_read_policy
) that allows public read access.
Please ensure that you have the DigitalOcean provider configured with the necessary tokens to authenticate your requests. Pulumi relies on these settings to interact with your DigitalOcean account.
Once you run the Pulumi program, it will create all the defined resources, and the outputs will provide you with the endpoint and access key ID that you can use to access the Space. Make sure to store these details securely and do not share them if your data is sensitive.