A collection of notes and resources
モデルをトレーニングおよび改良する
early_stopping = {
"Type": "Auto",
"MaxRuntimeInSeconds": 86400
}
model.tar.gz 形式で保存import sagemaker
from sagemaker import image_uris
container = image_uris.retrieve('xgboost', region, '1.7-1')
xgb = sagemaker.estimator.Estimator(
container,
role=role,
instance_count=1,
instance_type='ml.m5.xlarge',
output_path=output_path
)
from sagemaker.tensorflow import TensorFlow
tf_estimator = TensorFlow(
entry_point='train.py',
role=role,
instance_count=1,
instance_type='ml.p3.2xlarge',
framework_version='2.12',
py_version='py310',
hyperparameters={
'epochs': 10,
'batch_size': 32
}
)
tf_estimator.fit({'training': s3_train_data})
from sagemaker.pytorch import PyTorch
pytorch_estimator = PyTorch(
entry_point='train.py',
role=role,
instance_count=1,
instance_type='ml.p3.2xlarge',
framework_version='2.0',
py_version='py310'
)
from sagemaker.jumpstart.estimator import JumpStartEstimator
# 事前トレーニング済みモデルでファインチューニング
model_id = 'huggingface-text-classification-bert-base-uncased'
estimator = JumpStartEstimator(
model_id=model_id,
environment={'accept_eula': 'true'}
)
# カスタムデータでファインチューニング
estimator.fit({'training': s3_train_data})
from sagemaker.tuner import HyperparameterTuner, IntegerParameter, ContinuousParameter
hyperparameter_ranges = {
'max_depth': IntegerParameter(3, 10),
'eta': ContinuousParameter(0.01, 0.5),
'min_child_weight': IntegerParameter(1, 10),
'subsample': ContinuousParameter(0.5, 1.0),
'num_round': IntegerParameter(50, 200)
}
tuner = HyperparameterTuner(
estimator=xgb_estimator,
objective_metric_name='validation:auc',
hyperparameter_ranges=hyperparameter_ranges,
max_jobs=20,
max_parallel_jobs=3,
strategy='Bayesian'
)
tuner.fit({'train': s3_train_data, 'validation': s3_val_data})
# SageMaker Autopilot を使用
from sagemaker.automl.automl import AutoML
automl = AutoML(
role=role,
target_attribute_name='target',
max_candidates=100,
mode='ENSEMBLING'
)
automl.fit(s3_input_data, job_name='automl-job')
from sklearn.ensemble import VotingClassifier
# 複数モデルの投票
ensemble = VotingClassifier(
estimators=[
('xgb', xgb_model),
('rf', rf_model),
('lr', lr_model)
],
voting='soft'
)
from sklearn.ensemble import StackingClassifier
stacking = StackingClassifier(
estimators=[
('xgb', xgb_model),
('rf', rf_model)
],
final_estimator=LogisticRegression()
)
# Float32 → Float16 (半精度)
model.half()
import torch.nn.utils.prune as prune
# 重みの50%をプルーニング
prune.l1_unstructured(module, name='weight', amount=0.5)
from sagemaker.model import Model
from sagemaker.model_metrics import ModelMetrics, MetricsSource
# モデルメトリクスの定義
model_metrics = ModelMetrics(
model_statistics=MetricsSource(
s3_uri=f's3://{bucket}/metrics.json',
content_type='application/json'
)
)
# モデルパッケージグループの作成
model_package_group_name = 'customer-churn-models'
# モデルの登録
model_package = model.register(
content_types=['text/csv'],
response_types=['text/csv'],
inference_instances=['ml.m5.large'],
transform_instances=['ml.m5.large'],
model_package_group_name=model_package_group_name,
approval_status='PendingManualApproval',
model_metrics=model_metrics
)
from sagemaker.tensorflow import TensorFlow
tf_estimator = TensorFlow(
entry_point='train.py',
role=role,
instance_count=4, # 複数インスタンス
instance_type='ml.p3.8xlarge',
framework_version='2.12',
distribution={
'smdistributed': {
'dataparallel': {
'enabled': True
}
}
}
)
distribution={
'smdistributed': {
'modelparallel': {
'enabled': True,
'parameters': {
'partitions': 2,
'microbatches': 4
}
}
}
}