# 왜?
python 의 pip란 코딩에 필요한 다양한 라이브러리를 SDK로 쉽게 설치할수 있도록 도와줍니다.
따라서 협업에서는 사람들에게 빠르게 공유할 필요성이 있는데 이때 custom library를 설정해서 gitub의 requirements.txt에 공유해주기만 한다면 코드에 바로바로 사용 가능하다는 장점이 있습니다!
```
pip install git+http://{github repo 주소}.git
```
저는 AI개발자가 쉽게 google cloud에 접속해 모델파일을 올리거나, 저장소에 있는 모델파일들을 download하는 커스텀 라이브러리를 사용하는 방식을 적용해 보겠습니다.
일단 google cloud 계정이 없으시면 만들어주시고 google cloud project에 접근가능한 service계정 또한 만들어주셔야합니다.
이를 통해 service key를 다운받아주시고 github에 환경변수로써 활용해주시면 보안상 뛰어난 library로 활용가능합니다.
위와 같은 tree구조로 repo가 구성이 되어있고 여기서 중요한것은
setup.py
필수구성요소인 setup.py를 통해 이름,버젼, 설명, github repo주소등을 사용하고 의존성을 따져야한다면 install requires에 다른 라이브러리를 넣어서 작성해주시면 됩니다.
from setuptools import setup
setup (
name="mlopslib",
version="0.0.1",
description="custom lib for mlops",
url="https://gitlab.com/kiru6923110/mlops-libaray",# gitlab url 의미
author="kiru",
packages=['mlopslib'],# package에 포함될 디렉토리
install_requires=[
"google-cloud-storage==2.6.0"
],
)
__init__.py
from .mlops_gcp_client import MLOpsGCSClient
mlops_gcp_client.py
이것이 service key를 사용해 AI엔지니어가 모델을 쉽게 올리고 다운받을수있는 커스텀 라이브러리 코드입니다.
저는 google cloud bucket에 모델을 저장하는 방식을 사용했고
1. service key활용해 인증정보 확인
2. 인증정보 확인 객체를 활용한 client객체 생성 -> 본인 (AI개발자)
3. 이후 bucket 에 모델을 올리는 함수, download받는 함수로 작성을 했습니다.
여기서 local에서 작업하신다면 .env 파일로 환경변수를 GCP_KEY_FILE={key값}
아니면 github repo의 setting에서 variable에 GCP_KEY_FILE을 variable로 등록하셔서 환경변수로 사용하실수 있습니다.
from google.cloud.storage import Client
from google.oauth2.service_account import Credentials
import os
class MLOpsGCSClient(object):
def __init__(self, GCP_KEY_FILE) -> None:
credentials = Credentials.from_service_account_info(GCP_KEY_FILE)
self.client = Client(credentials=credentials, project=credentials.project_id)
# gcp bucket 이름, model 이름, update할 local dir path 필요
def upload_model(self, bucket_name, model_name, local_dir_path):
try:# bucket 검증
bucket = self.client.get_bucket(bucket_name)
file_names = [file for file in os.listdir(local_dir_path)]
for file_name in file_names:
blob = bucket.blob(f"{model_name}/{file_name}")
blob.upload_from_filename(f"{local_dir_path}/{file_name}")
print(f"model is uploaded. {blob.public_url}")
except Exception as e:
print(f"Failed to upload: {e}")
def download_model(self, bucket_name, blob_name, dest_file_path):
try:
bucket = self.client.bucket(bucket_name)
blob = bucket.blob(blob_name)
blob.download_to_filename(dest_file_path)
print(f"model is downloaded. {dest_file_path}")
except Exception as e:
print(f"Failed to download: {e}")
이걸이제 repo에 올리고 pip install git+http://git주소.git 하고 다음과같은 코드를 작성해
from mlopslib import MLOpsGCSClient
client = MLOpsGCSClient(GCP_KEY_FILE)
client.upload_model(
bucket_name="mlops-ml-bucket",
model_name="nlp-model",
local_dir_path="../model",
)
def load_model():
client = MLOpsGCSClient(GCP_KEY_FILE)
model_list = ['config.json', 'pytorch_model.bin',
'special_tokens_map.json', 'spiece.model',
'tokenizer.json', 'tokenizer_config.json']
blob_base = 'nlp-model'
for model_name in model_list:
client.download_model(bucket_name="mlops-ml-bucket",
blob_name=f"{blob_base}/{model_name}",
dest_file_path=f"./model/{model_name}")
print("start model load")
model = SimpleT5()
model.load_model("t5", "./model", use_gpu=False)
print("finished model load")
return model
ml_models = {}
이렇게 집어넣거나 다운로드 받을수 있습니다.