| import fire |
| import subprocess |
| import os |
| import time |
| import signal |
| import subprocess |
| import atexit |
|
|
|
|
| def kill_processes_by_cmd_substring(cmd_substring): |
| |
| result = subprocess.run(["ps", "-ef"], stdout=subprocess.PIPE, text=True) |
| lines = result.stdout.splitlines() |
|
|
| |
| for line in lines: |
| if cmd_substring in line: |
| |
| parts = line.split() |
| pid = int(parts[1]) |
| print(f"Killing process with PID: {pid}, CMD: {line}") |
| os.kill(pid, signal.SIGTERM) |
|
|
|
|
| def main( |
| python_path="python", |
| run_controller=True, |
| run_worker=True, |
| run_gradio=True, |
| controller_port=10086, |
| gradio_port=7860, |
| worker_names=[ |
| "OpenGVLab/InternVL2-8B", |
| ], |
| run_sd_worker=False, |
| **kwargs, |
| ): |
| host = "http://0.0.0.0" |
| controller_process = None |
| if run_controller: |
| |
| cmd_args = [ |
| f"{python_path}", |
| "controller.py", |
| "--host", |
| "0.0.0.0", |
| "--port", |
| f"{controller_port}", |
| ] |
| kill_processes_by_cmd_substring(" ".join(cmd_args)) |
| print("Launching controller: ", " ".join(cmd_args)) |
| controller_process = subprocess.Popen(cmd_args) |
| atexit.register(controller_process.terminate) |
|
|
| worker_processes = [] |
| if run_worker: |
| worker_port = 10088 |
| for worker_name in worker_names: |
| cmd_args = [ |
| f"{python_path}", |
| "model_worker.py", |
| "--port", |
| f"{worker_port}", |
| "--controller-url", |
| f"{host}:{controller_port}", |
| "--model-path", |
| f"{worker_name}", |
| "--load-8bit", |
| ] |
| kill_processes_by_cmd_substring(" ".join(cmd_args)) |
| print("Launching worker: ", " ".join(cmd_args)) |
| worker_process = subprocess.Popen(cmd_args) |
| worker_processes.append(worker_process) |
| atexit.register(worker_process.terminate) |
| worker_port += 1 |
|
|
| time.sleep(60) |
| gradio_process = None |
| if run_gradio: |
| |
| cmd_args = [ |
| f"{python_path}", |
| "gradio_web_server.py", |
| "--port", |
| f"{gradio_port}", |
| "--controller-url", |
| f"{host}:{controller_port}", |
| "--model-list-mode", |
| "reload", |
| ] |
| kill_processes_by_cmd_substring(" ".join(cmd_args)) |
| print("Launching gradio: ", " ".join(cmd_args)) |
| gradio_process = subprocess.Popen(cmd_args) |
| atexit.register(gradio_process.terminate) |
|
|
| sd_worker_process = None |
| if run_sd_worker: |
| |
| cmd_args = [f"{python_path}", "sd_worker.py"] |
| kill_processes_by_cmd_substring(" ".join(cmd_args)) |
| print("Launching sd_worker: ", " ".join(cmd_args)) |
| sd_worker_process = subprocess.Popen(cmd_args) |
| atexit.register(sd_worker_process.terminate) |
|
|
| for worker_process in worker_processes: |
| worker_process.wait() |
| if controller_process: |
| controller_process.wait() |
| if gradio_process: |
| gradio_process.wait() |
| if sd_worker_process: |
| sd_worker_process.wait() |
|
|
|
|
| if __name__ == "__main__": |
| fire.Fire(main) |
|
|