From 19c824f9d069aa7ee5d800a8026c91cee71627eb Mon Sep 17 00:00:00 2001 From: SkqLiao Date: Thu, 20 Mar 2025 10:10:52 +0800 Subject: [PATCH 1/2] change cpu-infer due to actual cpu cores on self-hosted server. --- ktransformers/tests/score.py | 144 ++++++----------------------------- 1 file changed, 25 insertions(+), 119 deletions(-) diff --git a/ktransformers/tests/score.py b/ktransformers/tests/score.py index 6be19d9..9a8f012 100644 --- a/ktransformers/tests/score.py +++ b/ktransformers/tests/score.py @@ -1,135 +1,41 @@ import subprocess import time -import requests -import sys -import os - -def wait_for_server(base_url: str, timeout: int = None) -> None: - start_time = time.time() - while True: - try: - response = requests.get( - f"{base_url}/v1/models", - headers={"Authorization": "Bearer None"}, - ) - if response.status_code == 200: - time.sleep(5) - print("Server is ready.") - break - except requests.exceptions.RequestException: - time.sleep(1) - if timeout and time.time() - start_time > timeout: - raise TimeoutError("Server did not become ready within timeout period") server_cmd = [ - "numactl", "-N", "1", "-m", "1", "/home/qujing3/anaconda3/envs/ktransformers-dev/bin/ktransformers", "--model_path", "/home/qujing3/models/DeepSeek-R1-Q4_K_M/config", "--gguf_path", "/home/qujing3/models/DeepSeek-R1-Q4_K_M/", "--port", "10002", - "--cpu_infer", "64" + "--cpu-infer", "48" ] print("Starting ktransformers server...") -print(" ".join(server_cmd)) -with open("/tmp/server_log.txt", "w") as f: - server_process = subprocess.Popen(server_cmd, stdout=f, stderr=f, text=True) +server_process = subprocess.Popen(server_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) -try: - wait_for_server("http://localhost:10002", timeout=300) +while True: + output = server_process.stdout.readline() + if not output: + break + print(output.strip()) + if "Uvicorn running on http://0.0.0.0:10002" in output: + print("Server started successfully!") + break - eval_cmd = ["python", "ktransformers/tests/humaneval/eval_api.py"] - print("Running eval_api.py...") - print(f"Command: {' '.join(eval_cmd)}") - - env = os.environ.copy() - env["PYTHONUNBUFFERED"] = "1" - - eval_process = subprocess.Popen( - eval_cmd, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - text=True, - bufsize=1, - env=env, - universal_newlines=True - ) - - import threading - import queue - - def enqueue_output(out, queue): - for line in iter(out.readline, ''): - queue.put(line) - out.close() - - stdout_queue = queue.Queue() - stderr_queue = queue.Queue() - - stdout_thread = threading.Thread(target=enqueue_output, args=(eval_process.stdout, stdout_queue)) - stderr_thread = threading.Thread(target=enqueue_output, args=(eval_process.stderr, stderr_queue)) - - stdout_thread.daemon = True - stderr_thread.daemon = True - stdout_thread.start() - stderr_thread.start() - - while eval_process.poll() is None: - try: - line = stdout_queue.get_nowait() - print(line, end='', flush=True) - except queue.Empty: - pass - - try: - line = stderr_queue.get_nowait() - print(line, end='', file=sys.stderr, flush=True) - except queue.Empty: - pass - - time.sleep(1) +eval_cmd = ["python", "ktransformers/tests/humaneval/eval_api.py"] +print("Running eval_api.py...") +eval_process = subprocess.run(eval_cmd, capture_output=True, text=True) - while not stdout_queue.empty(): - print(stdout_queue.get(), end='', flush=True) - while not stderr_queue.empty(): - print(stderr_queue.get(), end='', file=sys.stderr, flush=True) - - eval_process.wait() - print(f"eval_api.py completed with exit code: {eval_process.returncode}") +print("Stopping ktransformers server...") +server_process.terminate() +server_process.wait() - evaluate_cmd = [ - "evaluate_functional_correctness", - "ktransformers/tests/humaneval/results/api/eval_b.jsonl" - ] - print("Running evaluate_functional_correctness...") - print(f"Command: {' '.join(evaluate_cmd)}") - - evaluate_process = subprocess.Popen( - evaluate_cmd, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - text=True, - bufsize=1, - universal_newlines=True - ) - - for line in evaluate_process.stdout: - print(line, end='', flush=True) - for line in evaluate_process.stderr: - print(line, end='', file=sys.stderr, flush=True) - - evaluate_process.wait() - - print(f"evaluate_functional_correctness completed with exit code: {evaluate_process.returncode}") - if evaluate_process.returncode != 0: - print(f"evaluate_functional_correctness exited with code {evaluate_process.returncode}") - sys.exit(evaluate_process.returncode) +evaluate_cmd = [ + "evaluate_functional_correctness", + "ktransformers/tests/humaneval/results/api/eval_b.jsonl" +] +print("Running evaluate_functional_correctness...") +evaluate_process = subprocess.run(evaluate_cmd, capture_output=True, text=True) -finally: - print("Stopping ktransformers server...") - server_process.terminate() - try: - server_process.wait(timeout=30) - except subprocess.TimeoutExpired: - print("Server did not terminate gracefully, forcing...") - server_process.kill() \ No newline at end of file +print("Evaluation Output:") +print(evaluate_process.stdout) +print(evaluate_process.stderr) From e7d7d2705c090145bff51dc140b21013e60e9c15 Mon Sep 17 00:00:00 2001 From: SkqLiao Date: Thu, 20 Mar 2025 10:11:24 +0800 Subject: [PATCH 2/2] rename CI/CD --- .github/workflows/score.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/score.yml b/.github/workflows/score.yml index 73d1633..bf66b6b 100644 --- a/.github/workflows/score.yml +++ b/.github/workflows/score.yml @@ -1,8 +1,8 @@ -name: Human Eval Score KTransformers -run-name: Human Eval Score KTransformers +name: Human Eval Score +run-name: Human Eval Score on: workflow_dispatch jobs: - Human-Eval-Score-KTransformers: + Human-Eval-Score: runs-on: self-hosted steps: - run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event."