# Install the WML client API
!pip install watson-machine-learning-client-V4
Collecting watson-machine-learning-client-V4 Downloading https://files.pythonhosted.org/packages/9d/62/c3ff1f0eea231d280eb7d8afd05b5106cbf9fac574a64c314696edde2a98/watson_machine_learning_client_V4-1.0.95-py3-none-any.whl (1.2MB) |████████████████████████████████| 1.2MB 7.8MB/s eta 0:00:01 Requirement already satisfied: urllib3 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from watson-machine-learning-client-V4) (1.24.1) Requirement already satisfied: certifi in /opt/conda/envs/Python36/lib/python3.6/site-packages (from watson-machine-learning-client-V4) (2020.4.5.1) Requirement already satisfied: requests in /opt/conda/envs/Python36/lib/python3.6/site-packages (from watson-machine-learning-client-V4) (2.21.0) Requirement already satisfied: lomond in /opt/conda/envs/Python36/lib/python3.6/site-packages (from watson-machine-learning-client-V4) (0.3.3) Requirement already satisfied: tabulate in /opt/conda/envs/Python36/lib/python3.6/site-packages (from watson-machine-learning-client-V4) (0.8.2) Requirement already satisfied: pandas<=0.25.3 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from watson-machine-learning-client-V4) (0.24.1) Collecting ibm-cos-sdk==2.6.0 (from watson-machine-learning-client-V4) Downloading https://files.pythonhosted.org/packages/6f/91/86b2816c7b77d816b03a1ad6cf7db4b1f67556af395d5b93fdae6086c933/ibm-cos-sdk-2.6.0.tar.gz (53kB) |████████████████████████████████| 61kB 17.4MB/s eta 0:00:01 Requirement already satisfied: idna<2.9,>=2.5 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from requests->watson-machine-learning-client-V4) (2.8) Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from requests->watson-machine-learning-client-V4) (3.0.4) Requirement already satisfied: six>=1.10.0 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from lomond->watson-machine-learning-client-V4) (1.12.0) Requirement already satisfied: pytz>=2011k in /opt/conda/envs/Python36/lib/python3.6/site-packages (from pandas<=0.25.3->watson-machine-learning-client-V4) (2018.9) Requirement already satisfied: python-dateutil>=2.5.0 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from pandas<=0.25.3->watson-machine-learning-client-V4) (2.7.5) Requirement already satisfied: numpy>=1.12.0 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from pandas<=0.25.3->watson-machine-learning-client-V4) (1.15.4) Collecting ibm-cos-sdk-core==2.6.0 (from ibm-cos-sdk==2.6.0->watson-machine-learning-client-V4) Downloading https://files.pythonhosted.org/packages/ea/c1/c823507c472bf88dbd045445df6850744111d34fd218c6ea3b9c9bde2cfe/ibm-cos-sdk-core-2.6.0.tar.gz (763kB) |████████████████████████████████| 768kB 20.7MB/s eta 0:00:01 Collecting ibm-cos-sdk-s3transfer==2.6.0 (from ibm-cos-sdk==2.6.0->watson-machine-learning-client-V4) Downloading https://files.pythonhosted.org/packages/6f/92/682a28b99777a3fdc65e6d5641ed7e1ca470d0eab3bb2826cc30c6b60e21/ibm-cos-sdk-s3transfer-2.6.0.tar.gz (221kB) |████████████████████████████████| 225kB 26.8MB/s eta 0:00:01 Requirement already satisfied: jmespath<1.0.0,>=0.7.1 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from ibm-cos-sdk==2.6.0->watson-machine-learning-client-V4) (0.9.3) Requirement already satisfied: docutils<0.16,>=0.10 in /opt/conda/envs/Python36/lib/python3.6/site-packages (from ibm-cos-sdk-core==2.6.0->ibm-cos-sdk==2.6.0->watson-machine-learning-client-V4) (0.14) Building wheels for collected packages: ibm-cos-sdk, ibm-cos-sdk-core, ibm-cos-sdk-s3transfer Building wheel for ibm-cos-sdk (setup.py) ... done Stored in directory: /home/dsxuser/.cache/pip/wheels/37/9c/c4/a2c610ccb877d37c2cb87a5bfe55845fecffd6bb01bcd5e9d5 Building wheel for ibm-cos-sdk-core (setup.py) ... done Stored in directory: /home/dsxuser/.cache/pip/wheels/75/93/e6/23071b2c037147a0993d34b64a03e51abca84435fc9cd6a278 Building wheel for ibm-cos-sdk-s3transfer (setup.py) ... done Stored in directory: /home/dsxuser/.cache/pip/wheels/23/d9/d7/43fd95b014eed89466154d8373bf4cffbb3d972de7841e213c Successfully built ibm-cos-sdk ibm-cos-sdk-core ibm-cos-sdk-s3transfer Installing collected packages: ibm-cos-sdk-core, ibm-cos-sdk-s3transfer, ibm-cos-sdk, watson-machine-learning-client-V4 Found existing installation: ibm-cos-sdk-core 2.4.3 Uninstalling ibm-cos-sdk-core-2.4.3: Successfully uninstalled ibm-cos-sdk-core-2.4.3 Found existing installation: ibm-cos-sdk-s3transfer 2.4.3 Uninstalling ibm-cos-sdk-s3transfer-2.4.3: Successfully uninstalled ibm-cos-sdk-s3transfer-2.4.3 Found existing installation: ibm-cos-sdk 2.4.3 Uninstalling ibm-cos-sdk-2.4.3: Successfully uninstalled ibm-cos-sdk-2.4.3 Successfully installed ibm-cos-sdk-2.6.0 ibm-cos-sdk-core-2.6.0 ibm-cos-sdk-s3transfer-2.6.0 watson-machine-learning-client-V4-1.0.95
from watson_machine_learning_client import WatsonMachineLearningAPIClient
# The code was removed by Watson Studio for sharing.
client = WatsonMachineLearningAPIClient(wml_credentials)
client.deployments.list()
------------------------------------ ------------------------- ----- ------------------------ ------------- GUID NAME STATE CREATED ARTIFACT_TYPE 73ea9565-63f0-4cbe-a23b-648d8a66b617 empty-cplex-test-wml-2 ready 2020-05-26T13:29:46.896Z model ab82bacf-4075-4845-9e43-7b7b34267c91 empty-cplex-test-wml-2 ready 2020-05-26T07:12:11.040Z model a5311f58-33f4-4b1c-98c0-61223b2a511e empty-cplex-test-wml-2 ready 2020-05-18T12:21:13.657Z model 1550aefd-6a6b-4e90-a738-f1badf100593 empty-cplex-test-wml-2 ready 2020-05-18T10:26:47.339Z model 8b750fde-8e1b-403f-bf01-ebdc7830a005 empty-cplex-test-wml-2 ready 2020-05-13T12:04:57.160Z model deadd149-489a-46ca-b0e0-c3e6cfac7fe0 json-test-opl-test-wml-2 ready 2020-04-02T07:41:21.876Z model 1f345a22-85dd-4492-88d6-df477fb25f91 diet-opl-test-wml-2 ready 2020-03-18T14:57:53.956Z model 2c8e4864-c97b-480b-a2d6-338f4e7255c2 diet-test-wml-2 ready 2020-03-18T08:09:55.269Z model 50f40ad8-e656-462d-87d7-f8843c23c4d1 empty-cpo-test-wml-2 ready 2020-03-10T14:02:02.321Z model 62f3a4a8-de69-4b07-a75d-dd59d14312cc empty-test-wml-2 ready 2020-03-10T12:02:03.430Z model e41a0710-aa7e-4f47-b353-fab103b894af MyModelDeployment ready 2020-03-09T06:44:05.188Z model c23b824d-80f8-4117-8441-1313a9ad77f9 diet-test-wml-2 ready 2020-03-06T07:37:45.663Z model 64dad313-61d7-4f2d-9ac8-4cecd6de52ce diet-test-wml-2 ready 2020-03-06T07:04:30.301Z model 917bed2e-404c-420b-876b-0049b452f17e diet-test-wml-2 ready 2020-03-05T10:27:00.955Z model 53bd920a-24b8-4941-b612-a1bb6b65c0b6 diet-test-wml-2 ready 2020-03-05T10:21:22.638Z model abf1485f-7fd1-4d04-a357-513e814b94e6 Diet Deployment S 4 ready 2020-02-27T10:56:32.249Z model 498ca3c1-f34c-468a-8734-2a48b8b75bc2 DOC Sample Deployment S 1 ready 2020-02-25T17:18:35.069Z model ------------------------------------ ------------------------- ----- ------------------------ -------------
#deployment_uid = "e0e136b3-be6f-4332-a538-0f15f55eb542"
%mkdir model
%%writefile model/main.py
from docplex.util.environment import get_environment
from os.path import splitext
import pandas
from six import iteritems
def get_all_inputs():
'''Utility method to read a list of files and return a tuple with all
read data frames.
Returns:
a map { datasetname: data frame }
'''
result = {}
env = get_environment()
for iname in [f for f in os.listdir('.') if splitext(f)[1] == '.csv']:
with env.get_input_stream(iname) as in_stream:
df = pandas.read_csv(in_stream)
datasetname, _ = splitext(iname)
result[datasetname] = df
return result
def write_all_outputs(outputs):
'''Write all dataframes in ``outputs`` as .csv.
Args:
outputs: The map of outputs 'outputname' -> 'output df'
'''
for (name, df) in iteritems(outputs):
csv_file = '%s.csv' % name
print(csv_file)
with get_environment().get_output_stream(csv_file) as fp:
if sys.version_info[0] < 3:
fp.write(df.to_csv(index=False, encoding='utf8'))
else:
fp.write(df.to_csv(index=False).encode(encoding='utf8'))
if len(outputs) == 0:
print("Warning: no outputs written")
Writing model/main.py
%%writefile -a model/main.py
# Load CVS files into inputs dictionnary
inputs = get_all_inputs()
food = inputs['diet_food']
nutrients = inputs['diet_nutrients']
food_nutrients = inputs['diet_food_nutrients']
food_nutrients.set_index('Food', inplace=True)
from docplex.mp.model import Model
# Model
mdl = Model(name='diet')
# Create decision variables, limited to be >= Food.qmin and <= Food.qmax
qty = food[['name', 'qmin', 'qmax']].copy()
qty['var'] = qty.apply(lambda x: mdl.continuous_var(lb=x['qmin'],
ub=x['qmax'],
name=x['name']),
axis=1)
# make the name the index
qty.set_index('name', inplace=True)
# Limit range of nutrients, and mark them as KPIs
for n in nutrients.itertuples():
amount = mdl.sum(qty.loc[f.name]['var'] * food_nutrients.loc[f.name][n.name]
for f in food.itertuples())
mdl.add_range(n.qmin, amount, n.qmax)
mdl.add_kpi(amount, publish_name='Total %s' % n.name)
# Minimize cost
obj = mdl.sum(qty.loc[f.name]['var'] * f.unit_cost for f in food.itertuples())
mdl.add_kpi(obj, publish_name="Minimal cost");
mdl.minimize(obj)
mdl.print_information()
# solve
ok = mdl.solve()
mdl.print_solution()
import pandas
import numpy
solution_df = pandas.DataFrame(columns=['Food', 'value'])
for index, dvar in enumerate(mdl.solution.iter_variables()):
solution_df.loc[index,'Food'] = dvar.to_string()
solution_df.loc[index,'value'] = dvar.solution_value
outputs = {}
outputs['solution'] = solution_df
# Generate output files
write_all_outputs(outputs)
Appending to model/main.py
import tarfile
def reset(tarinfo):
tarinfo.uid = tarinfo.gid = 0
tarinfo.uname = tarinfo.gname = "root"
return tarinfo
tar = tarfile.open("model.tar.gz", "w:gz")
tar.add("model/main.py", arcname="main.py", filter=reset)
tar.close()
metadata = {
client.repository.ModelMetaNames.NAME: "Diet",
client.repository.ModelMetaNames.DESCRIPTION: "Model for Diet",
client.repository.ModelMetaNames.TYPE: "do-docplex_12.9",
client.repository.ModelMetaNames.RUNTIME_UID: "do_12.9"
}
model_details = client.repository.store_model(model='/home/dsxuser/work/model.tar.gz', meta_props=metadata)
model_uid = client.repository.get_model_uid(model_details)
print( model_uid )
69c35025-0870-4205-a10f-d33f174b841c
#size ='XL'
size ='S'
n_nodes = 4
meta_props = {
client.deployments.ConfigurationMetaNames.NAME: "Diet Deployment " + size + " " + str(n_nodes),
client.deployments.ConfigurationMetaNames.DESCRIPTION: "Diet Deployment",
client.deployments.ConfigurationMetaNames.BATCH: {},
client.deployments.ConfigurationMetaNames.COMPUTE: {'name': size, 'nodes': n_nodes}
}
deployment_details = client.deployments.create(model_uid, meta_props=meta_props)
deployment_uid = client.deployments.get_uid(deployment_details)
print( deployment_uid )
####################################################################################### Synchronous deployment creation for uid: '69c35025-0870-4205-a10f-d33f174b841c' started ####################################################################################### ready. ------------------------------------------------------------------------------------------------ Successfully finished deployment creation, deployment_uid='e0e136b3-be6f-4332-a538-0f15f55eb542' ------------------------------------------------------------------------------------------------ e0e136b3-be6f-4332-a538-0f15f55eb542
import pandas as pd
# initialize list of lists
diet_food = pd.DataFrame([ ["Roasted Chicken", 0.84, 0, 10],
["Spaghetti W/ Sauce", 0.78, 0, 10],
["Tomato,Red,Ripe,Raw", 0.27, 0, 10],
["Apple,Raw,W/Skin", 0.24, 0, 10],
["Grapes", 0.32, 0, 10],
["Chocolate Chip Cookies", 0.03, 0, 10],
["Lowfat Milk", 0.23, 0, 10],
["Raisin Brn", 0.34, 0, 10],
["Hotdog", 0.31, 0, 10]] , columns = ["name","unit_cost","qmin","qmax"])
print (diet_food.to_csv(index=False))
diet_food_nutrients = pd.DataFrame([
["Spaghetti W/ Sauce", 358.2, 80.2, 2.3, 3055.2, 11.6, 58.3, 8.2],
["Roasted Chicken", 277.4, 21.9, 1.8, 77.4, 0, 0, 42.2],
["Tomato,Red,Ripe,Raw", 25.8, 6.2, 0.6, 766.3, 1.4, 5.7, 1],
["Apple,Raw,W/Skin", 81.4, 9.7, 0.2, 73.1, 3.7, 21, 0.3],
["Grapes", 15.1, 3.4, 0.1, 24, 0.2, 4.1, 0.2],
["Chocolate Chip Cookies", 78.1, 6.2, 0.4, 101.8, 0, 9.3, 0.9],
["Lowfat Milk", 121.2, 296.7, 0.1, 500.2, 0, 11.7, 8.1],
["Raisin Brn", 115.1, 12.9, 16.8, 1250.2, 4, 27.9, 4],
["Hotdog", 242.1, 23.5, 2.3, 0, 0, 18, 10.4 ]
] , columns = ["Food","Calories","Calcium","Iron","Vit_A","Dietary_Fiber","Carbohydrates","Protein"])
diet_nutrients = pd.DataFrame([
["Calories", 2000, 2500],
["Calcium", 800, 1600],
["Iron", 10, 30],
["Vit_A", 5000, 50000],
["Dietary_Fiber", 25, 100],
["Carbohydrates", 0, 300],
["Protein", 50, 100]
], columns = ["name","qmin","qmax"])
name,unit_cost,qmin,qmax Roasted Chicken,0.84,0,10 Spaghetti W/ Sauce,0.78,0,10 "Tomato,Red,Ripe,Raw",0.27,0,10 "Apple,Raw,W/Skin",0.24,0,10 Grapes,0.32,0,10 Chocolate Chip Cookies,0.03,0,10 Lowfat Milk,0.23,0,10 Raisin Brn,0.34,0,10 Hotdog,0.31,0,10
solve_payload = {
client.deployments.DecisionOptimizationMetaNames.SOLVE_PARAMETERS: {
'oaas.logAttachmentName':'log.txt',
'oaas.logTailEnabled':'true'
},
client.deployments.DecisionOptimizationMetaNames.INPUT_DATA: [
{
"id":"diet_food.csv",
"values" : diet_food
},
{
"id":"diet_food_nutrients.csv",
"values" : diet_food_nutrients
},
{
"id":"diet_nutrients.csv",
"values" : diet_nutrients
}
],
client.deployments.DecisionOptimizationMetaNames.OUTPUT_DATA: [
{
"id":".*\.csv"
}
]
}
import time
import datetime
ts = time.time()
N_JOBS = 5
jobs = range(N_JOBS)
job_details={}
job_uids={}
for i in jobs:
try:
job_details[i] = client.deployments.create_job(deployment_uid, solve_payload)
job_uids[i] = client.deployments.get_job_uid(job_details[i])
print(len(job_uids),datetime.timedelta(seconds=time.time()-ts),'...', job_uids[i])
except Exception as inst:
print ('there seems to be a problem: ',inst)
print (len(job_details))
1 0:00:02.094990 ... ca3e8527-6279-437e-ba8f-89341a965a2f 2 0:00:03.960423 ... 91316d28-8c51-4134-acfe-e06d4cf25ca6 3 0:00:04.969681 ... 284066f2-9eb6-4042-b708-3ad9b3c3acb3 4 0:00:06.102421 ... 478183b5-dd0d-435c-9ee4-2b632db735cf 5 0:00:07.458974 ... 73d9d6bc-fe4b-4104-9c4b-1e4295e68e25 5
from time import sleep
at_least_one_running = True
while at_least_one_running:
at_least_one_running = False
print('###############################')
print(datetime.timedelta(seconds=time.time()-ts))
states = {}
for i in jobs:
state = job_details[i]['entity']['decision_optimization']['status']['state']
if state not in ['completed', 'failed', 'canceled']:
at_least_one_running = True
job_details[i]=client.deployments.get_job_details(job_uids[i])
state = job_details[i]['entity']['decision_optimization']['status']['state']
print(i,state + '...','JOB - ',job_uids[i])
if (state in states):
states[state] = states[state]+1
else:
states[state] = 1
print (states)
sleep(5)
for i in jobs:
print( "State: ", i, job_details[i]['entity']['decision_optimization']['status']['state'])
############################### 0:02:08.353442 0 completed... JOB - ca3e8527-6279-437e-ba8f-89341a965a2f 1 completed... JOB - 91316d28-8c51-4134-acfe-e06d4cf25ca6 2 completed... JOB - 284066f2-9eb6-4042-b708-3ad9b3c3acb3 3 completed... JOB - 478183b5-dd0d-435c-9ee4-2b632db735cf 4 completed... JOB - 73d9d6bc-fe4b-4104-9c4b-1e4295e68e25 {'completed': 5} ############################### 0:02:14.859110 {'completed': 5} State: 0 completed State: 1 completed State: 2 completed State: 3 completed State: 4 completed
class JobScheduler:
def __init__(self, deployment_id):
self.deployment_id = deployment_id
self.jobs = []
self.cbs = []
def addJobs(self, jobs, cb=None):
print("Adding",len(jobs),"jobs.")
self.jobs.append(jobs)
self.cbs.append(cb)
def run(self):
print("Scheduler running...")
while (len(self.jobs)>0):
jobs = self.jobs.pop(0)
print("Taking",len(jobs),"more jobs.")
cb = self.cbs.pop(0)
job_details = {}
at_least_one_running = True
while at_least_one_running:
at_least_one_running = False
print('###############################')
print(datetime.timedelta(seconds=time.time()-ts))
states = {}
for job_id in jobs:
state = ""
if (job_id in job_details):
state = job_details[job_id]['entity']['decision_optimization']['status']['state']
if state not in ['completed', 'failed', 'canceled']:
at_least_one_running = True
job_details[job_id]=client.deployments.get_job_details(job_id)
state = job_details[job_id]['entity']['decision_optimization']['status']['state']
print(job_id,state + '...','JOB - ',job_id)
if (state in states):
states[state] = states[state]+1
else:
states[state] = 1
print (states)
sleep(1)
for i in jobs:
print( "State: ", i, job_details[i]['entity']['decision_optimization']['status']['state'])
if (cb!=None):
cb()
print("Scheduler finished.")
def createJobs(n):
print("Creating",n,"jobs.")
jobs = []
for i in range(n):
try:
job_details = client.deployments.create_job(deployment_uid, solve_payload)
job_uid = client.deployments.get_job_uid(job_details)
print(i,datetime.timedelta(seconds=time.time()-ts),'...', job_uid)
jobs.append(job_uid)
except Exception as inst:
print ('there seems to be a problem: ',inst)
return jobs
scheduler = JobScheduler(deployment_uid)
jobs = createJobs(10)
def createAndAddJobs():
scheduler.addJobs(createJobs(10), createAndAddJobs)
scheduler.addJobs(jobs, createAndAddJobs)
Creating 10 jobs. 0 0:45:33.371690 ... fc5a0f65-4519-4485-bd0b-538f2ade9aea 1 0:45:34.232254 ... ca249779-aaa0-4aa0-9900-60990ba54261 2 0:45:36.077605 ... 39a4d7d0-2da0-49d3-874e-c84c33ab4591 3 0:45:36.925397 ... 94e4fbcd-0b10-4483-b98e-493b3a269e4b 4 0:45:40.553813 ... 45585c59-9f7c-45fa-9e7c-32b5f73c6002 5 0:45:41.431042 ... c22ee043-9bf5-4dcb-a16b-2ad2938431c4 6 0:45:42.727718 ... 91b65c4e-fb15-4f73-8aa5-428b688e4fdb 7 0:45:43.982534 ... 856461e3-813e-4aba-95eb-5c0682778d8b 8 0:45:44.799568 ... 09218563-1a55-40f8-a492-0caabce1c24a 9 0:45:45.785115 ... 0286b60f-b25e-4689-9923-3c80ac56a2e5 Adding 10 jobs.
scheduler.run()
Scheduler running... Taking 10 more jobs. ############################### 0:45:54.433681 fc5a0f65-4519-4485-bd0b-538f2ade9aea completed... JOB - fc5a0f65-4519-4485-bd0b-538f2ade9aea ca249779-aaa0-4aa0-9900-60990ba54261 completed... JOB - ca249779-aaa0-4aa0-9900-60990ba54261 39a4d7d0-2da0-49d3-874e-c84c33ab4591 completed... JOB - 39a4d7d0-2da0-49d3-874e-c84c33ab4591 94e4fbcd-0b10-4483-b98e-493b3a269e4b completed... JOB - 94e4fbcd-0b10-4483-b98e-493b3a269e4b 45585c59-9f7c-45fa-9e7c-32b5f73c6002 completed... JOB - 45585c59-9f7c-45fa-9e7c-32b5f73c6002 c22ee043-9bf5-4dcb-a16b-2ad2938431c4 completed... JOB - c22ee043-9bf5-4dcb-a16b-2ad2938431c4 91b65c4e-fb15-4f73-8aa5-428b688e4fdb completed... JOB - 91b65c4e-fb15-4f73-8aa5-428b688e4fdb 856461e3-813e-4aba-95eb-5c0682778d8b completed... JOB - 856461e3-813e-4aba-95eb-5c0682778d8b 09218563-1a55-40f8-a492-0caabce1c24a completed... JOB - 09218563-1a55-40f8-a492-0caabce1c24a 0286b60f-b25e-4689-9923-3c80ac56a2e5 completed... JOB - 0286b60f-b25e-4689-9923-3c80ac56a2e5 {'completed': 10} ############################### 0:46:03.491464 {'completed': 10} State: fc5a0f65-4519-4485-bd0b-538f2ade9aea completed State: ca249779-aaa0-4aa0-9900-60990ba54261 completed State: 39a4d7d0-2da0-49d3-874e-c84c33ab4591 completed State: 94e4fbcd-0b10-4483-b98e-493b3a269e4b completed State: 45585c59-9f7c-45fa-9e7c-32b5f73c6002 completed State: c22ee043-9bf5-4dcb-a16b-2ad2938431c4 completed State: 91b65c4e-fb15-4f73-8aa5-428b688e4fdb completed State: 856461e3-813e-4aba-95eb-5c0682778d8b completed State: 09218563-1a55-40f8-a492-0caabce1c24a completed State: 0286b60f-b25e-4689-9923-3c80ac56a2e5 completed Creating 10 jobs. 0 0:46:10.501714 ... 4ee40a48-fad6-417a-b33a-35dc25a5058d 1 0:46:11.701502 ... 5d22c4c1-6882-43cd-a8f3-0407e5c4c401 2 0:46:12.495664 ... 2622c9d6-5d31-46fc-a646-9094b8c3e275 3 0:46:13.276155 ... 8aae74da-edde-440a-ae5d-fa3c93582366 4 0:46:14.076682 ... 983e6655-7fd9-444a-82cd-482a4c381d05 5 0:46:15.308331 ... 73b3c9ba-d649-4e38-85ab-5228037a83a7 6 0:46:17.275764 ... 0e59c448-8cbc-467a-baad-be026944b554 7 0:46:19.037011 ... e3b9a95d-3b81-40f8-9102-7ba84165432b 8 0:46:20.100072 ... 16a87098-d320-49f3-bb6c-8d9a41f1a43d 9 0:46:21.230328 ... 22d41805-ff2f-494b-9549-619e4a9d1dc7 Adding 10 jobs. Taking 10 more jobs. ############################### 0:46:21.232237 4ee40a48-fad6-417a-b33a-35dc25a5058d completed... JOB - 4ee40a48-fad6-417a-b33a-35dc25a5058d 5d22c4c1-6882-43cd-a8f3-0407e5c4c401 completed... JOB - 5d22c4c1-6882-43cd-a8f3-0407e5c4c401 2622c9d6-5d31-46fc-a646-9094b8c3e275 completed... JOB - 2622c9d6-5d31-46fc-a646-9094b8c3e275 8aae74da-edde-440a-ae5d-fa3c93582366 completed... JOB - 8aae74da-edde-440a-ae5d-fa3c93582366 983e6655-7fd9-444a-82cd-482a4c381d05 completed... JOB - 983e6655-7fd9-444a-82cd-482a4c381d05 73b3c9ba-d649-4e38-85ab-5228037a83a7 completed... JOB - 73b3c9ba-d649-4e38-85ab-5228037a83a7 0e59c448-8cbc-467a-baad-be026944b554 completed... JOB - 0e59c448-8cbc-467a-baad-be026944b554 e3b9a95d-3b81-40f8-9102-7ba84165432b completed... JOB - e3b9a95d-3b81-40f8-9102-7ba84165432b 16a87098-d320-49f3-bb6c-8d9a41f1a43d completed... JOB - 16a87098-d320-49f3-bb6c-8d9a41f1a43d 22d41805-ff2f-494b-9549-619e4a9d1dc7 completed... JOB - 22d41805-ff2f-494b-9549-619e4a9d1dc7 {'completed': 10} ############################### 0:46:29.493836 {'completed': 10} State: 4ee40a48-fad6-417a-b33a-35dc25a5058d completed State: 5d22c4c1-6882-43cd-a8f3-0407e5c4c401 completed State: 2622c9d6-5d31-46fc-a646-9094b8c3e275 completed State: 8aae74da-edde-440a-ae5d-fa3c93582366 completed State: 983e6655-7fd9-444a-82cd-482a4c381d05 completed State: 73b3c9ba-d649-4e38-85ab-5228037a83a7 completed State: 0e59c448-8cbc-467a-baad-be026944b554 completed State: e3b9a95d-3b81-40f8-9102-7ba84165432b completed State: 16a87098-d320-49f3-bb6c-8d9a41f1a43d completed State: 22d41805-ff2f-494b-9549-619e4a9d1dc7 completed Creating 10 jobs. 0 0:46:35.487245 ... b25f75a9-3984-43de-afa6-afdfbac28113 1 0:46:36.581855 ... a99a792d-7a07-4406-a39d-9d621d20a4a4 2 0:46:37.555888 ... 641989a5-5427-4fa3-9155-d18e5846d3e3 3 0:46:38.610642 ... 29875cca-3f61-4b93-b763-37149b6a574e 4 0:46:41.941599 ... 6cefd445-7cc0-4751-9431-dec208ca3861 5 0:46:42.943980 ... b7b1cccf-c46f-4b54-a5b6-b19d68ff12c3 6 0:46:43.841375 ... 5233fa85-d0a8-4bb8-9fda-7bc07dd28763 7 0:46:45.261614 ... 67b01b49-1f14-440c-9d5f-eef1e1018951 8 0:46:46.098795 ... 7934ef43-6d53-468f-9ab3-8216580b7689 9 0:46:46.923579 ... 9b48a9df-e8ee-4480-acfd-2d04b3e07c0a Adding 10 jobs. Taking 10 more jobs. ############################### 0:46:46.924237 b25f75a9-3984-43de-afa6-afdfbac28113 completed... JOB - b25f75a9-3984-43de-afa6-afdfbac28113 a99a792d-7a07-4406-a39d-9d621d20a4a4 completed... JOB - a99a792d-7a07-4406-a39d-9d621d20a4a4 641989a5-5427-4fa3-9155-d18e5846d3e3 completed... JOB - 641989a5-5427-4fa3-9155-d18e5846d3e3 29875cca-3f61-4b93-b763-37149b6a574e completed... JOB - 29875cca-3f61-4b93-b763-37149b6a574e 6cefd445-7cc0-4751-9431-dec208ca3861 completed... JOB - 6cefd445-7cc0-4751-9431-dec208ca3861 b7b1cccf-c46f-4b54-a5b6-b19d68ff12c3 completed... JOB - b7b1cccf-c46f-4b54-a5b6-b19d68ff12c3 5233fa85-d0a8-4bb8-9fda-7bc07dd28763 completed... JOB - 5233fa85-d0a8-4bb8-9fda-7bc07dd28763 67b01b49-1f14-440c-9d5f-eef1e1018951 completed... JOB - 67b01b49-1f14-440c-9d5f-eef1e1018951 7934ef43-6d53-468f-9ab3-8216580b7689 completed... JOB - 7934ef43-6d53-468f-9ab3-8216580b7689 9b48a9df-e8ee-4480-acfd-2d04b3e07c0a completed... JOB - 9b48a9df-e8ee-4480-acfd-2d04b3e07c0a {'completed': 10} ############################### 0:46:54.537781 {'completed': 10} State: b25f75a9-3984-43de-afa6-afdfbac28113 completed State: a99a792d-7a07-4406-a39d-9d621d20a4a4 completed State: 641989a5-5427-4fa3-9155-d18e5846d3e3 completed State: 29875cca-3f61-4b93-b763-37149b6a574e completed State: 6cefd445-7cc0-4751-9431-dec208ca3861 completed State: b7b1cccf-c46f-4b54-a5b6-b19d68ff12c3 completed State: 5233fa85-d0a8-4bb8-9fda-7bc07dd28763 completed State: 67b01b49-1f14-440c-9d5f-eef1e1018951 completed State: 7934ef43-6d53-468f-9ab3-8216580b7689 completed State: 9b48a9df-e8ee-4480-acfd-2d04b3e07c0a completed Creating 10 jobs. 0 0:47:00.429954 ... 8aa27d18-52f7-4b59-a8d7-c62bb00f2a9b 1 0:47:01.287764 ... 383ddbc1-bb4f-4ad0-ac1f-d4cfb3aad0c9
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) /opt/conda/envs/Python36/lib/python3.6/site-packages/urllib3/connectionpool.py in _make_request(self, conn, method, url, timeout, chunked, **httplib_request_kw) 376 try: # Python 2.7, use buffering of HTTP responses --> 377 httplib_response = conn.getresponse(buffering=True) 378 except TypeError: # Python 3 TypeError: getresponse() got an unexpected keyword argument 'buffering' During handling of the above exception, another exception occurred: KeyboardInterrupt Traceback (most recent call last) <ipython-input-75-9e169345291b> in <module> ----> 1 scheduler.run() <ipython-input-66-1535875ef551> in run(self) 45 46 if (cb!=None): ---> 47 cb() 48 print("Scheduler finished.") <ipython-input-74-e9ffa6463c25> in createAndAddJobs() 3 4 def createAndAddJobs(): ----> 5 scheduler.addJobs(createJobs(10), createAndAddJobs) 6 7 scheduler.addJobs(jobs, createAndAddJobs) <ipython-input-67-55f7084bfa63> in createJobs(n) 4 for i in range(n): 5 try: ----> 6 job_details = client.deployments.create_job(deployment_uid, solve_payload) 7 job_uid = client.deployments.get_job_uid(job_details) 8 print(i,datetime.timedelta(seconds=time.time()-ts),'...', job_uid) /opt/conda/envs/Python36/lib/python3.6/site-packages/watson_machine_learning_client/deployments.py in create_job(self, deployment_id, meta_props) 1041 payload.update({"deployment": {"href": "/v4/deployments/" + deployment_id}}) 1042 -> 1043 return self._score_async(deployment_id, payload, transaction_id=None) 1044 1045 def get_job_details(self,job_uid=None,limit=None): /opt/conda/envs/Python36/lib/python3.6/site-packages/watson_machine_learning_client/deployments.py in _score_async(self, deployment_uid, scoring_payload, transaction_id) 915 scoring_url, 916 json=scoring_payload, --> 917 headers=headers) 918 else: 919 response_scoring = self.session.post( /opt/conda/envs/Python36/lib/python3.6/site-packages/requests/sessions.py in post(self, url, data, json, **kwargs) 579 """ 580 --> 581 return self.request('POST', url, data=data, json=json, **kwargs) 582 583 def put(self, url, data=None, **kwargs): /opt/conda/envs/Python36/lib/python3.6/site-packages/requests/sessions.py in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json) 531 } 532 send_kwargs.update(settings) --> 533 resp = self.send(prep, **send_kwargs) 534 535 return resp /opt/conda/envs/Python36/lib/python3.6/site-packages/requests/sessions.py in send(self, request, **kwargs) 644 645 # Send the request --> 646 r = adapter.send(request, **kwargs) 647 648 # Total elapsed time of the request (approximately) /opt/conda/envs/Python36/lib/python3.6/site-packages/requests/adapters.py in send(self, request, stream, timeout, verify, cert, proxies) 447 decode_content=False, 448 retries=self.max_retries, --> 449 timeout=timeout 450 ) 451 /opt/conda/envs/Python36/lib/python3.6/site-packages/urllib3/connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw) 598 timeout=timeout_obj, 599 body=body, headers=headers, --> 600 chunked=chunked) 601 602 # If we're going to release the connection in ``finally:``, then /opt/conda/envs/Python36/lib/python3.6/site-packages/urllib3/connectionpool.py in _make_request(self, conn, method, url, timeout, chunked, **httplib_request_kw) 378 except TypeError: # Python 3 379 try: --> 380 httplib_response = conn.getresponse() 381 except Exception as e: 382 # Remove the TypeError from the exception chain in Python 3; /opt/conda/envs/Python36/lib/python3.6/http/client.py in getresponse(self) 1344 try: 1345 try: -> 1346 response.begin() 1347 except ConnectionError: 1348 self.close() /opt/conda/envs/Python36/lib/python3.6/http/client.py in begin(self) 305 # read until we get a non-100 response 306 while True: --> 307 version, status, reason = self._read_status() 308 if status != CONTINUE: 309 break /opt/conda/envs/Python36/lib/python3.6/http/client.py in _read_status(self) 266 267 def _read_status(self): --> 268 line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 269 if len(line) > _MAXLINE: 270 raise LineTooLong("status line") /opt/conda/envs/Python36/lib/python3.6/socket.py in readinto(self, b) 584 while True: 585 try: --> 586 return self._sock.recv_into(b) 587 except timeout: 588 self._timeout_occurred = True /opt/conda/envs/Python36/lib/python3.6/site-packages/urllib3/contrib/pyopenssl.py in recv_into(self, *args, **kwargs) 292 def recv_into(self, *args, **kwargs): 293 try: --> 294 return self.connection.recv_into(*args, **kwargs) 295 except OpenSSL.SSL.SysCallError as e: 296 if self.suppress_ragged_eofs and e.args == (-1, 'Unexpected EOF'): /opt/conda/envs/Python36/lib/python3.6/site-packages/OpenSSL/SSL.py in recv_into(self, buffer, nbytes, flags) 1819 result = _lib.SSL_peek(self._ssl, buf, nbytes) 1820 else: -> 1821 result = _lib.SSL_read(self._ssl, buf, nbytes) 1822 self._raise_ssl_error(self._ssl, result) 1823 KeyboardInterrupt:
# client.deployments.delete(deployment_uid)
client.deployments.list()
------------------------------------ ------------------------- ----- ------------------------ ------------- GUID NAME STATE CREATED ARTIFACT_TYPE abf1485f-7fd1-4d04-a357-513e814b94e6 Diet Deployment S 4 ready 2020-02-27T10:56:32.249Z model 498ca3c1-f34c-468a-8734-2a48b8b75bc2 DOC Sample Deployment S 1 ready 2020-02-25T17:18:35.069Z model ------------------------------------ ------------------------- ----- ------------------------ -------------
# client.deployments.delete('2d3ce7ee-48a9-465c-9019-20bc2b79276b')