# NHN AI EasyMaker SDK
```
# Initialize EasyMaker SDK
import easymaker
easymaker.init(
appkey='EASYMAKER_APPKEY',
region='kr1',
secret_key='EASYMAKER_SECRET_KEY',
)
# NHN Cloud ObjectStorage upload/download
easymaker.download(
easymaker_obs_uri='obs://api-storage.cloud.toast.com/v1/AUTH_{tenant_id}/{container_name}/{source_dir}',
download_dir_path='./source_dir',
username='username@nhn.com',
password='nhn_object_storage_api_password'
)
easymaker.upload(
easymaker_obs_uri='obs://api-storage.cloud.toast.com/v1/AUTH_{tenant_id}/{container_name}/{upload_path}',
src_dir_path='./local_dir',
username='username@nhn.com',
password='nhn_object_storage_api_password'
)
# Create Experiment
experiment_id = easymaker.Experiment().create(
experiment_name='experiment_name',
experiment_description='experiment_description',
# wait=False
)
# Create Training
training_id = easymaker.Training().run(
experiment_id=experiment_id,
training_name='training_name',
training_description='training_description',
train_image_name='Ubuntu 18.04 CPU TensorFlow Training',
train_instance_name='m2.c4m8',
train_instance_count=1,
data_storage_size=300, # minimum size : 300G
source_dir_uri='obs://api-storage.cloud.toast.com/v1/AUTH_{tenant_id}/{container_name}/{soucre_download_path}',
entry_point='training_start.py',
hyperparameter_list=[
{
"hyperparameterKey": "epochs",
"hyperparameterValue": "10",
},
{
"hyperparameterKey": "batch-size",
"hyperparameterValue": "30",
}
],
timeout_hours=100, # 1~720
model_upload_uri='obs://api-storage.cloud.toast.com/v1/AUTH_{tenant_id}/{container_name}/{model_upload_path}',
check_point_upload_uri='obs://api-storage.cloud.toast.com/v1/AUTH_{tenant_id}/{container_name}/{checkpoint_upload_path}',
dataset_list=[
{
"datasetName": "train",
"dataUri": "obs://api-storage.cloud.toast.com/v1/AUTH_{tenant_id}/{container_name}/{train_data_download_path}"
},
{
"datasetName": "test",
"dataUri": "obs://api-storage.cloud.toast.com/v1/AUTH_{tenant_id}/{container_name}/{test_data_download_path}"
}
],
tag_list=[ # maximum 10
{
"tagKey": "tag_num",
"tagValue": "test_tag_1",
},
{
"tagKey": "tag2",
"tagValue": "test_tag_2",
}
],
use_log=True,
# wait=False
)
# Create Model
model_id = easymaker.Model().create(
training_id=training_id,
model_name='model_name',
model_description='model_description',
)
model_id2 = easymaker.Model().create_by_model_uri(
framework_code=easymaker.TENSORFLOW,
model_uri='obs://api-storage.cloud.toast.com/v1/AUTH_{tenant_id}/{container_name}/{model_upload_path}',
model_name='model_name',
model_description='model_description',
)
# Create Endpoint
endpoint = easymaker.Endpoint()
endpoint_id = endpoint.create(
model_id=model_id,
endpoint_name='endpoint_name',
endpoint_description='endpoint_description',
endpoint_instance_name='c2.c16m16',
apigw_resource_uri='/api-path',
endpoint_instance_count=1,
use_log=True,
# wait=False,
# autoscaler_enable=True, # default False
# autoscaler_min_node_count=1,
# autoscaler_max_node_count=10,
# autoscaler_scale_down_enable=True,
# autoscaler_scale_down_util_threshold=50,
# autoscaler_scale_down_unneeded_time=10,
# autoscaler_scale_down_delay_after_add=10,
)
# Create Endpoint Stage
stage_id = endpoint.create_stage(
model_id=model_id,
stage_name='stage01',
stage_description='test endpoint',
endpoint_instance_name='c2.c16m16',
apigw_resource_uri='/test-api',
endpoint_instance_count=1,
# wait=False,
# autoscaler_enable=True, # default False
# autoscaler_min_node_count=1,
# autoscaler_max_node_count=10,
# autoscaler_scale_down_enable=True,
# autoscaler_scale_down_util_threshold=50,
# autoscaler_scale_down_unneeded_time=10,
# autoscaler_scale_down_delay_after_add=10,
)
# Get an endpoint that already exists
endpoint = easymaker.Endpoint(endpoint_id)
# get endpoint list
endpoint_stage_info_list = endpoint.get_endpoint_stage_info_list()
# Inference
endpoint.predict(json={'instances': [[6.8, 2.8, 4.8, 1.4]]})
endpoint.predict(endpoint_stage_info=endpoint_stage_info_list[1], # If endpoint_stage_info is not set, use the default endpoint
json={'instances': [[6.8, 2.8, 4.8, 1.4]]})
# Log (Log & Crash)
easymaker_logger = easymaker.logger(logncrash_appkey='log&crash_product_app_key')
easymaker_logger.send('test log meassage') # Output to stdout & send log to log&crash product
easymaker_logger.send(log_message='log meassage',
log_level='INFO', # default: INFO
project_version='1.0.0', # default: 1.0.0
parameters={'serviceType': 'EasyMakerSample'}) # Add custom parameters
```
## CLI Command
- instance type list : `python -m easymaker -instance --region kr1 --appkey EM_APPKEY --secret_key EM_SECRET_KEY`
- image list : `python -m easymaker -image --region kr1 --appkey EM_APPKEY --secret_key EM_SECRET_KEY`
- experiment list : `python -m easymaker -experiment --region kr1 --appkey EM_APPKEY --secret_key EM_SECRET_KEY`
- training list : 'python -m easymaker -training --region kr1 --appkey EM_APPKEY --secret_key EM_SECRET_KEY'
- model list : 'python -m easymaker -model --region kr1 --appkey EM_APPKEY --secret_key EM_SECRET_KEY'
- endpoint list : 'python -m easymaker -endpoint --region kr1 --appkey EM_APPKEY --secret_key EM_SECRET_KEY'