Skip to content
Snippets Groups Projects
Commit 3ca6849d authored by Danial Hezarkhani's avatar Danial Hezarkhani
Browse files

added flask changes to allow webserver to start

parent 54a85354
No related branches found
No related tags found
1 merge request!12Detr hpc merge to main
...@@ -16,7 +16,9 @@ ENV ANNOTATION_FILE_NAME _annotations.coco.json ...@@ -16,7 +16,9 @@ ENV ANNOTATION_FILE_NAME _annotations.coco.json
ENV LOG_EVERY_N_STEP 5 ENV LOG_EVERY_N_STEP 5
ENV MAX_NU_METRIC_IMAGES 10 ENV MAX_NU_METRIC_IMAGES 10
ENV DETECTION_THRESHOLD 0.8 ENV DETECTION_THRESHOLD 0.8
ENV PORT 8061
ENV GRPCPORT 8061
ENV HTTPPORT 8062
WORKDIR /home/objectdetection WORKDIR /home/objectdetection
......
...@@ -10,9 +10,12 @@ import json ...@@ -10,9 +10,12 @@ import json
import copy import copy
from logger import Logger from logger import Logger
import config
logger = Logger(__name__) logger = Logger(__name__)
config = None
port = int(os.getenv("HTTPPORT", "8062"))
app = Flask(__name__) app = Flask(__name__)
default_parameters_dict = { default_parameters_dict = {
...@@ -124,9 +127,11 @@ def training_input(): ...@@ -124,9 +127,11 @@ def training_input():
return render_template("index.html", training_var_form=training_vals_form, trainingStatusForm=trainingStatusForm, current_para=current_para) return render_template("index.html", training_var_form=training_vals_form, trainingStatusForm=trainingStatusForm, current_para=current_para)
def app_run(): def app_run(config_main):
global config
config = config_main
app.secret_key = "detr" app.secret_key = "detr"
bootstrap = Bootstrap(app) bootstrap = Bootstrap(app)
app.run(host="0.0.0.0", port=8062) app.run(host="0.0.0.0", port=port)
#app_run() #app_run()
\ No newline at end of file
...@@ -25,7 +25,7 @@ class Config: ...@@ -25,7 +25,7 @@ class Config:
self.log_every_n_steps = 5 self.log_every_n_steps = 5
self.annotation_file_name = "_annotations.coco.json" self.annotation_file_name = "_annotations.coco.json"
self.lightning_logs_dir = "./dev/tensorboard_logs/" self.lightning_logs_dir = "./dev/tensorboard_logs/"
self.dataset_path = "./dev/dataset/maritimair" self.dataset_path = "./dev/dataset/maritimsmall"
self.input_path = "./dev/inputimage" self.input_path = "./dev/inputimage"
self.output_path = "./dev/outputimage" self.output_path = "./dev/outputimage"
self.status_folder = "./dev/status" self.status_folder = "./dev/status"
......
...@@ -34,13 +34,34 @@ def run_inference(input_path, output_path): ...@@ -34,13 +34,34 @@ def run_inference(input_path, output_path):
print(response) print(response)
def start_train():
logger.debug("Calling HPP_Stub for training")
addr = 'localhost:{}'.format(server_port)
logger.debug("connecting to {}".format(addr))
with grpc.insecure_channel(addr) as channel:
stub = model_pb2_grpc.DetrModelServicerStub(channel)
#inference
ui_request = model_pb2.TrainingConfig()
ui_request.config = "test"
response = stub.startTraining(ui_request)
# training
# ui_request = model_pb2.TrainingConfig(config="test")
# response = stub.startTraining(ui_request)
logger.debug("Training finished")
print(response)
import argparse import argparse
if __name__ == '__main__': if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Process some integers.') # parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('-i','--input', type=str , help='Input Image',required=True) # will be accesible with args.OPT # parser.add_argument('-i','--input', type=str , help='Input Image',required=True) # will be accesible with args.OPT
parser.add_argument('-o','--output', type=str , help='Output Image',required=True) # will be accesible with args.OPT # parser.add_argument('-o','--output', type=str , help='Output Image',required=True) # will be accesible with args.OPT
args = parser.parse_args() # args = parser.parse_args()
run_inference(args.input, args.output) # run_inference(args.input, args.output)
start_train()
...@@ -5,14 +5,17 @@ from concurrent import futures ...@@ -5,14 +5,17 @@ from concurrent import futures
import json import json
import datetime import datetime
import os import os
import threading
from od.detrOD import DetrOD from od.detrOD import DetrOD
from config import Config from config import Config
from app import app_run, get_train_parameters
from logger import Logger from logger import Logger
logger = Logger(__name__) logger = Logger(__name__)
port = int(os.getenv("PORT", "8061")) port = int(os.getenv("GRPCPORT", "8061"))
SHARED_FOLDER = os.getenv("SHARED_FOLDER_PATH", "./dev2")
class DetrModelServicer(model_pb2_grpc.DetrModelServicer): class DetrModelServicer(model_pb2_grpc.DetrModelServicer):
...@@ -32,23 +35,69 @@ class DetrModelServicer(model_pb2_grpc.DetrModelServicer): ...@@ -32,23 +35,69 @@ class DetrModelServicer(model_pb2_grpc.DetrModelServicer):
try: try:
logger.info('MetricsAvailable') logger.info('MetricsAvailable')
response = model_pb2.TrainStatus() response = model_pb2.TrainStatus()
# states:
logger.info("Starting the training...") # 0: training not started.
self.detrOd.load_custom_model() # 1: being trained.
# 2: training done.
self.start_count = 1 # -1: Error
with open(self.config.status_folder+"/results.txt", mode="w") as f: if self.start_count == 0:
f.write("Training started. Please wait until its finished") logger.info("Starting the training...")
f.close() self.detrOd.load_custom_model()
self.detrOd.train() parameters = get_train_parameters()
logger.info("Training finished...") logger.info("Got parameters")
with open(self.config.status_folder+"/results.txt", mode="w") as f: logger.info(parameters)
f.write("Training finished.") self.start_count = 1
f.close() with open(self.config.status_folder+"/results.txt", mode="w") as f:
self.start_count = 2 f.write("Training started. Please wait until its finished")
response.status = self.start_count f.close()
self.get_metrics_metadata(None,None) self.detrOd.train(
return response lr=parameters["lr"],
lr_backbone=parameters["lr_backbone"],
weight_decay=parameters["weight_decay"],
max_epoch=parameters["max_epoch"],
gradient_clip_val=parameters["gradient_clip_val"],
accumulate_grad_batches=parameters["accumulate_grad_batches"],
batch_size = parameters["batch_size"],
dataloader_workers = parameters["dataloader_workers"]
)
logger.info("Training finished...")
with open(self.config.status_folder+"/results.txt", mode="w") as f:
f.write("Training finished.")
f.close()
self.start_count = 2
response.status = self.start_count
self.get_metrics_metadata(None,None)
return response
elif self.start_count == 1:
context.set_code(grpc.StatusCode.NOT_FOUND)
message = "Training is started and not finished yet."
context.set_details(message)
with open(self.config.status_folder+"/results.txt", mode="w") as f:
f.write(message)
f.close()
response.status = self.start_count
return response
elif self.start_count == 2:
message = "Training finished. Download your model from sharedfolder. Please return to the home page and start the training with the new parameters."
logger.info(message)
with open(self.config.status_folder+"/results.txt", mode="w") as f:
f.write(message)
f.close()
self.start_count = 0
response.status = self.start_count
return response
else:
message = "Something went wrong. Please check the container or contact the publisher."
logger.info(message)
with open(self.config.status_folder+"/results.txt", mode="w") as f:
f.write(message)
f.close()
self.start_count = -1
response.status = self.start_count
return response
except Exception as e: except Exception as e:
logger.error("Error while running training") logger.error("Error while running training")
logger.error(e, exc_info=True) logger.error(e, exc_info=True)
...@@ -111,17 +160,18 @@ class DetrModelServicer(model_pb2_grpc.DetrModelServicer): ...@@ -111,17 +160,18 @@ class DetrModelServicer(model_pb2_grpc.DetrModelServicer):
context.set_code(grpc.StatusCode.NOT_FOUND) context.set_code(grpc.StatusCode.NOT_FOUND)
def serve(config): def serve_grpc(config):
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
model_pb2_grpc.add_DetrModelServicerServicer_to_server(DetrModelServicer(config), server) model_pb2_grpc.add_DetrModelServicerServicer_to_server(DetrModelServicer(config), server)
server.add_insecure_port('[::]:{}'.format(port)) server.add_insecure_port('[::]:{}'.format(port))
server.start() server.start()
logger.info("Start config web-ui") logger.info("Start config web-ui")
server.wait_for_termination() return server
if __name__ == '__main__': if __name__ == '__main__':
folder_path = "./dev2"
prod_flag = os.getenv("PRODUCTION", False) prod_flag = os.getenv("PRODUCTION", False)
config = Config(prod_flag,folder_path) config = Config(prod_flag, SHARED_FOLDER)
serve(config) grpc_server = serve_grpc(config)
\ No newline at end of file threading.Thread(target=app_run(config)).start()
grpc_server.wait_for_termination()
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment