implemented base functions

This commit is contained in:
brian
2024-11-16 18:18:13 +00:00
parent 169e0531d9
commit 01ee4664ff
4 changed files with 36 additions and 53 deletions
+7 -14
View File
@@ -2,13 +2,14 @@
import logging import logging
import os import os
from io import BytesIO
from minio import Minio from minio import Minio
from PIL import Image from PIL import Image
from shared.utils import check_env from shared.utils import check_env
from .get import get
def get_image( def get_image(
client: Minio, client: Minio,
@@ -23,19 +24,11 @@ def get_image(
bucket_name = str(os.getenv('MINIO_BUCKET_NAME')) bucket_name = str(os.getenv('MINIO_BUCKET_NAME'))
object_name = f'images/{object_name}' object_name = f'images/{object_name}'
# get object from bucket # get object from bucket
try: buffer = get(
response = client.get_object( client=client,
bucket_name=bucket_name, bucket_name=bucket_name,
object_name=object_name, object_name=object_name,
) )
buffer = BytesIO(response.data)
except Exception as exc:
logging.error('failed getting data from MinIO')
raise exc
finally:
response.close()
response.release_conn()
buffer.seek(0)
# convert data to image # convert data to image
image = Image.open(buffer) image = Image.open(buffer)
logging.debug('got data from %s', object_name) logging.debug('got data from %s', object_name)
+9 -16
View File
@@ -3,13 +3,14 @@
import logging import logging
import os import os
from collections import OrderedDict from collections import OrderedDict
from io import BytesIO
import torch import torch
from minio import Minio from minio import Minio
from shared.utils import check_env from shared.utils import check_env
from .get import get
def get_model( def get_model(
client: Minio, client: Minio,
@@ -20,24 +21,16 @@ def get_model(
assert isinstance(object_name, str) assert isinstance(object_name, str)
assert len(object_name) > 0 assert len(object_name) > 0
# prepare arguments # prepare arguments
check_env({'MINIO_BUCKET_NAME_MODELS'}) check_env({'MINIO_BUCKET_NAME'})
bucket_name = str(os.getenv('MINIO_BUCKET_NAME_MODELS')) bucket_name = str(os.getenv('MINIO_BUCKET_NAME'))
object_name = f'models/{object_name}' object_name = f'models/{object_name}'
# get object from bucket # get object from bucket
try: buffer = get(
response = client.get_object( client=client,
bucket_name=bucket_name, bucket_name=bucket_name,
object_name=object_name, object_name=object_name,
) )
buffer = BytesIO(response.data)
except Exception as exc:
logging.error('failed getting data from MinIO')
raise exc
finally:
response.close()
response.release_conn()
# convert data to model checkpoint # convert data to model checkpoint
buffer.seek(0)
model_content = torch.load(buffer) model_content = torch.load(buffer)
logging.debug('finished') logging.debug('finished')
return model_content return model_content
+3 -4
View File
@@ -22,14 +22,13 @@ def put_image(
# get bucket name from env # get bucket name from env
bucket_name = os.getenv('MINIO_BUCKET_NAME', default='') bucket_name = os.getenv('MINIO_BUCKET_NAME', default='')
assert len(bucket_name) > 0 assert len(bucket_name) > 0
# save image to buffer # save data to buffer
buffer = BytesIO() buffer = BytesIO()
image.save(buffer, 'png') image.save(buffer, 'png')
# get md5 of buffer # get md5 of buffer
checksum = md5(buffer.getbuffer()).hexdigest() checksum = md5(buffer.getbuffer()).hexdigest()
# determine object name # set object name
subfolder = 'images' object_name = f'images/{checksum}'
object_name = f'{subfolder}/{checksum}'
# send data to bucket # send data to bucket
put( put(
client=client, client=client,
+17 -19
View File
@@ -9,6 +9,10 @@ import torch
from minio import Minio from minio import Minio
from torch.nn import Module from torch.nn import Module
from shared.utils import check_env
from .put import put
def put_model( def put_model(
client: Minio, client: Minio,
@@ -18,28 +22,22 @@ def put_model(
used as object name.""" used as object name."""
assert isinstance(client, Minio) assert isinstance(client, Minio)
assert isinstance(model, Module) assert isinstance(model, Module)
bucket_name = os.getenv('MINIO_BUCKET_NAME', default='') # get bucket name from env
assert len(bucket_name) > 0 check_env({'MINIO_BUCKET_NAME'})
subfolder = 'models' bucket_name = str(os.getenv('MINIO_BUCKET_NAME'))
# save image to buffer # save data to buffer
buffer = BytesIO() buffer = BytesIO()
torch.save(model.state_dict(), buffer) torch.save(model.state_dict(), buffer)
# get md5 of image # get md5 of image
checksum = md5(buffer.getbuffer()).hexdigest() checksum = md5(buffer.getbuffer()).hexdigest()
# prepare for saving # set object name
num_bytes = buffer.tell() object_name = f'models/{checksum}'
buffer.seek(0)
# send data to bucket # send data to bucket
object_name = f'{subfolder}/{checksum}' put(
try: client=client,
client.put_object( buffer=buffer,
bucket_name=bucket_name, bucket_name=bucket_name,
object_name=object_name, object_name=object_name,
length=num_bytes, )
data=buffer, logging.debug('finished')
)
except Exception as exc:
logging.error('failed saving data to MinIO')
raise exc
logging.debug('saved data to %s', object_name)
return checksum return checksum