Spaces:
Build error
Build error
from pathlib import Path | |
from huggingface_hub import HfApi | |
from loguru import logger | |
try: | |
from sagemaker.huggingface import HuggingFace | |
except ModuleNotFoundError: | |
logger.warning("Couldn't load SageMaker imports. Run 'poetry install --with aws' to support AWS.") | |
from llm_engineering.settings import settings | |
finetuning_dir = Path(__file__).resolve().parent | |
finetuning_requirements_path = finetuning_dir / "requirements.txt" | |
def run_finetuning_on_sagemaker( | |
finetuning_type: str = "sft", | |
num_train_epochs: int = 3, | |
per_device_train_batch_size: int = 2, | |
learning_rate: float = 3e-4, | |
dataset_huggingface_workspace: str = "mlabonne", | |
is_dummy: bool = False, | |
) -> None: | |
assert settings.HUGGINGFACE_ACCESS_TOKEN, "Hugging Face access token is required." | |
assert settings.AWS_ARN_ROLE, "AWS ARN role is required." | |
if not finetuning_dir.exists(): | |
raise FileNotFoundError(f"The directory {finetuning_dir} does not exist.") | |
if not finetuning_requirements_path.exists(): | |
raise FileNotFoundError(f"The file {finetuning_requirements_path} does not exist.") | |
api = HfApi() | |
user_info = api.whoami(token=settings.HUGGINGFACE_ACCESS_TOKEN) | |
huggingface_user = user_info["name"] | |
logger.info(f"Current Hugging Face user: {huggingface_user}") | |
hyperparameters = { | |
"finetuning_type": finetuning_type, | |
"num_train_epochs": num_train_epochs, | |
"per_device_train_batch_size": per_device_train_batch_size, | |
"learning_rate": learning_rate, | |
"dataset_huggingface_workspace": dataset_huggingface_workspace, | |
"model_output_huggingface_workspace": huggingface_user, | |
} | |
if is_dummy: | |
hyperparameters["is_dummy"] = True | |
# Create the HuggingFace SageMaker estimator | |
huggingface_estimator = HuggingFace( | |
entry_point="finetune.py", | |
source_dir=str(finetuning_dir), | |
instance_type="ml.g5.2xlarge", | |
instance_count=1, | |
role=settings.AWS_ARN_ROLE, | |
transformers_version="4.36", | |
pytorch_version="2.1", | |
py_version="py310", | |
hyperparameters=hyperparameters, | |
requirements_file=finetuning_requirements_path, | |
environment={ | |
"HUGGING_FACE_HUB_TOKEN": settings.HUGGINGFACE_ACCESS_TOKEN, | |
"COMET_API_KEY": settings.COMET_API_KEY, | |
"COMET_PROJECT_NAME": settings.COMET_PROJECT, | |
}, | |
) | |
# Start the training job on SageMaker. | |
huggingface_estimator.fit() | |
if __name__ == "__main__": | |
run_finetuning_on_sagemaker() | |