提交 2d54930d 编写于 作者: G guru4elephant

add multiple gpu card for server

上级 32863e68
...@@ -9,6 +9,9 @@ import time ...@@ -9,6 +9,9 @@ import time
from paddlehub.common.logger import logger from paddlehub.common.logger import logger
import socket import socket
from paddle_serving_client import Client from paddle_serving_client import Client
from paddle_serving_client.utils import MultiThreadRunner
from paddle_serving_client.utils import benchmark_args
args = benchmark_args()
_ver = sys.version_info _ver = sys.version_info
is_py2 = (_ver[0] == 2) is_py2 = (_ver[0] == 2)
...@@ -122,36 +125,27 @@ class BertService(): ...@@ -122,36 +125,27 @@ class BertService():
return fetch_map_batch return fetch_map_batch
def test(): def single_func(idx, resource):
bc = BertService( bc = BertService(
model_name='bert_chinese_L-12_H-768_A-12', model_name='bert_chinese_L-12_H-768_A-12',
max_seq_len=20, max_seq_len=20,
show_ids=False, show_ids=False,
do_lower_case=True) do_lower_case=True)
server_addr = ["127.0.0.1:9292"]
config_file = './serving_client_conf/serving_client_conf.prototxt' config_file = './serving_client_conf/serving_client_conf.prototxt'
fetch = ["pooled_output"] fetch = ["pooled_output"]
server_addr = [resource["endpoint"][idx]]
bc.load_client(config_file, server_addr) bc.load_client(config_file, server_addr)
batch_size = 1 batch_size = 1
batch = [] start = time.time()
for line in sys.stdin: fin = open("data-c.txt")
if batch_size == 1: for line in fin:
result = bc.run_general([[line.strip()]], fetch) result = bc.run_general([[line.strip()]], fetch)
print(result) end = time.time()
else: return [[end - start]]
if len(batch) < batch_size:
batch.append([line.strip()])
else:
result = bc.run_batch_general(batch, fetch)
batch = []
for r in result:
print(r)
if len(batch) > 0:
result = bc.run_batch_general(batch, fetch)
batch = []
for r in result:
print(r)
if __name__ == '__main__': if __name__ == '__main__':
test() multi_thread_runner = MultiThreadRunner()
result = multi_thread_runner.run(single_func, args.thread, {"endpoint":["127.0.0.1:9494", "127.0.0.1:9495", "127.0.0.1:9496", "127.0.0.1:9497"]})
...@@ -217,6 +217,7 @@ class Server(object): ...@@ -217,6 +217,7 @@ class Server(object):
if not self.check_port(port): if not self.check_port(port):
raise SystemExit("Prot {} is already used".format(port)) raise SystemExit("Prot {} is already used".format(port))
self.set_port(port)
self._prepare_resource(workdir) self._prepare_resource(workdir)
self._prepare_engine(self.model_config_path, device) self._prepare_engine(self.model_config_path, device)
self._prepare_infer_service(port) self._prepare_infer_service(port)
......
...@@ -37,20 +37,22 @@ def parse_args(): ...@@ -37,20 +37,22 @@ def parse_args():
parser.add_argument( parser.add_argument(
"--device", type=str, default="gpu", help="Type of device") "--device", type=str, default="gpu", help="Type of device")
parser.add_argument( parser.add_argument(
"--gpu_ids", type=int, default=0, help="gpu ids") "--gpu_ids", type=str, default="", help="gpu ids")
return parser.parse_args() return parser.parse_args()
args = parse_args() args = parse_args()
def start_gpu_card_model(gpuid): def start_gpu_card_model(gpuid):
gpuid = int(gpuid)
device = "gpu" device = "gpu"
port = args.port port = args.port
if gpuid == -1: if gpuid == -1:
device = "cpu" device = "cpu"
elif gpuid >= 0:
port = args.port + gpuid port = args.port + gpuid
thread_num = args.thread thread_num = args.thread
model = args.model model = args.model
workdir = args.workdir workdir = "{}_{}".format(args.workdir, gpuid)
if model == "": if model == "":
print("You must specify your serving model") print("You must specify your serving model")
...@@ -83,8 +85,8 @@ if __name__ == "__main__": ...@@ -83,8 +85,8 @@ if __name__ == "__main__":
start_gpu_card_model(-1) start_gpu_card_model(-1)
else: else:
gpu_processes = [] gpu_processes = []
for i, gpu_id in gpus: for i, gpu_id in enumerate(gpus):
p = Process(target=start_gpu_card_model, (i,)) p = Process(target=start_gpu_card_model, args=(i,))
gpu_processes.append(p) gpu_processes.append(p)
for p in gpu_processes: for p in gpu_processes:
p.start() p.start()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册