wenchuang_new / eval /textdiffuser_multiGPUs.py
hehe
all
1fbfa6f
Raw
History Blame Contribute Delete
3.42 kB
import os
import shutil
import copy
import argparse
import pathlib
import json
def load(file_path: str):
file_path = pathlib.Path(file_path)
func_dict = {'.json': load_json}
assert file_path.suffix in func_dict
return func_dict[file_path.suffix](file_path)
def load_json(file_path: str):
with open(file_path, 'r', encoding='utf8') as f:
content = json.load(f)
return content
def save(data, file_path):
file_path = pathlib.Path(file_path)
func_dict = {'.json': save_json}
assert file_path.suffix in func_dict
return func_dict[file_path.suffix](data, file_path)
def save_json(data, file_path):
with open(file_path, 'w', encoding='utf-8') as json_file:
json.dump(data, json_file, ensure_ascii=False, indent=4)
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument(
"--model_path",
type=str,
default='textdiffuser-ckpt/diffusion_backbone',
help='path to model'
)
parser.add_argument(
"--gpus",
type=str,
default='0,1,2,3,4,5,6,7',
help='gpus for inference'
)
parser.add_argument(
"--output_dir",
type=str,
default='./textdiffuser_laion_generated/',
help="output path"
)
parser.add_argument(
"--glyph_dir",
type=str,
default='/data/vdb/yuxiang.tyx/AIGC/data/laion_word/glyph_laion',
help="path of glyph images from anytext evaluation dataset"
)
parser.add_argument(
"--json_path",
type=str,
default='/data/vdb/yuxiang.tyx/AIGC/data/laion_word/test1k.json',
help="json path for evaluation dataset"
)
args = parser.parse_args()
return args
if __name__ == "__main__":
args = parse_args()
output_dir = args.output_dir
tmp_dir = './tmp_dir'
exec_path = './textdiffuser_singleGPU.py'
continue_gen = True # if True, not clear output_dir, and generate rest images.
if os.path.exists(tmp_dir):
shutil.rmtree(tmp_dir)
os.makedirs(tmp_dir)
if not continue_gen:
if os.path.exists(output_dir):
shutil.rmtree(output_dir)
os.makedirs(output_dir)
else:
if not os.path.exists(output_dir):
os.makedirs(output_dir)
os.system('sleep 1')
gpu_ids = [int(i) for i in args.gpus.split(',')]
nproc = len(gpu_ids)
all_lines = load(args.json_path)
split_file = []
length = len(all_lines['data_list']) // nproc
cmds = []
for i in range(nproc):
start, end = i*length, (i+1)*length
if i == nproc - 1:
end = len(all_lines['data_list'])
temp_lines = copy.deepcopy(all_lines)
temp_lines['data_list'] = temp_lines['data_list'][start:end]
tmp_file = os.path.join(tmp_dir, f'tmp_list_{i}.json')
save(temp_lines, tmp_file)
os.system('sleep 1')
cmds += [f'export CUDA_VISIBLE_DEVICES={gpu_ids[i]} && python {exec_path} --json_path {tmp_file} --output_dir {output_dir} --model_path {args.model_path} --glyph_dir {args.glyph_dir} && echo proc-{i} done!']
cmds = ' & '.join(cmds)
os.system(cmds)
print('Done.')
os.system('sleep 2')
shutil.rmtree(tmp_dir)
'''
command to kill the task after running:
$ps -ef | grep singleGPU | awk '{ print $2 }' | xargs kill -9 && ps -ef | grep multiproce | awk '{ print $2 }' | xargs kill -9
'''