Abhishek Thakur
commited on
Commit
·
0558a9f
1
Parent(s):
09d288e
add timeout
Browse files- competitions/evaluate.py +21 -2
- competitions/info.py +4 -0
- competitions/params.py +1 -0
- competitions/runner.py +2 -1
competitions/evaluate.py
CHANGED
|
@@ -36,13 +36,32 @@ def generate_submission_file(params):
|
|
| 36 |
# the script.py will generate a submission.csv file in the submission_dir
|
| 37 |
# push the submission.csv file to the repo using upload_submission_file
|
| 38 |
logger.info("Generating submission file")
|
| 39 |
-
|
|
|
|
| 40 |
shutil.copyfile("socket-kit.so", f"{submission_dir}/socket-kit.so")
|
|
|
|
|
|
|
| 41 |
cmd = "python script.py"
|
| 42 |
socket_kit_path = os.path.abspath(f"{submission_dir}/socket-kit.so")
|
|
|
|
|
|
|
| 43 |
env = os.environ.copy()
|
| 44 |
env["LD_PRELOAD"] = socket_kit_path
|
| 45 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 46 |
|
| 47 |
api = HfApi(token=params.token)
|
| 48 |
api.upload_file(
|
|
|
|
| 36 |
# the script.py will generate a submission.csv file in the submission_dir
|
| 37 |
# push the submission.csv file to the repo using upload_submission_file
|
| 38 |
logger.info("Generating submission file")
|
| 39 |
+
|
| 40 |
+
# Copy socket-kit.so to submission_dir
|
| 41 |
shutil.copyfile("socket-kit.so", f"{submission_dir}/socket-kit.so")
|
| 42 |
+
|
| 43 |
+
# Define your command
|
| 44 |
cmd = "python script.py"
|
| 45 |
socket_kit_path = os.path.abspath(f"{submission_dir}/socket-kit.so")
|
| 46 |
+
|
| 47 |
+
# Copy the current environment and modify it
|
| 48 |
env = os.environ.copy()
|
| 49 |
env["LD_PRELOAD"] = socket_kit_path
|
| 50 |
+
|
| 51 |
+
# Start the subprocess
|
| 52 |
+
process = subprocess.Popen(cmd, cwd=submission_dir, shell=True, env=env)
|
| 53 |
+
|
| 54 |
+
# Wait for the process to complete or timeout
|
| 55 |
+
try:
|
| 56 |
+
process.wait(timeout=params.time_limit)
|
| 57 |
+
except subprocess.TimeoutExpired:
|
| 58 |
+
logger.info(f"Process exceeded {params.time_limit} seconds time limit. Terminating...")
|
| 59 |
+
process.kill()
|
| 60 |
+
process.wait()
|
| 61 |
+
|
| 62 |
+
# Check if process terminated due to timeout
|
| 63 |
+
if process.returncode and process.returncode != 0:
|
| 64 |
+
logger.error("Subprocess didn't terminate successfully")
|
| 65 |
|
| 66 |
api = HfApi(token=params.token)
|
| 67 |
api.upload_file(
|
competitions/info.py
CHANGED
|
@@ -121,3 +121,7 @@ class CompetitionInfo:
|
|
| 121 |
@property
|
| 122 |
def submission_rows(self):
|
| 123 |
return self.config["SUBMISSION_ROWS"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 121 |
@property
|
| 122 |
def submission_rows(self):
|
| 123 |
return self.config["SUBMISSION_ROWS"]
|
| 124 |
+
|
| 125 |
+
@property
|
| 126 |
+
def time_limit(self):
|
| 127 |
+
return self.config["TIME_LIMIT"]
|
competitions/params.py
CHANGED
|
@@ -16,6 +16,7 @@ class EvalParams(BaseModel):
|
|
| 16 |
submission_rows: int
|
| 17 |
output_path: str
|
| 18 |
submission_repo: str
|
|
|
|
| 19 |
|
| 20 |
class Config:
|
| 21 |
protected_namespaces = ()
|
|
|
|
| 16 |
submission_rows: int
|
| 17 |
output_path: str
|
| 18 |
submission_repo: str
|
| 19 |
+
time_limit: int
|
| 20 |
|
| 21 |
class Config:
|
| 22 |
protected_namespaces = ()
|
competitions/runner.py
CHANGED
|
@@ -36,6 +36,7 @@ class JobRunner:
|
|
| 36 |
self.submission_id_col = self.competition_info.submission_id_col
|
| 37 |
self.submission_cols = self.competition_info.submission_cols
|
| 38 |
self.submission_rows = self.competition_info.submission_rows
|
|
|
|
| 39 |
|
| 40 |
def get_pending_subs(self):
|
| 41 |
submission_jsons = snapshot_download(
|
|
@@ -62,7 +63,6 @@ class JobRunner:
|
|
| 62 |
}
|
| 63 |
)
|
| 64 |
if len(pending_submissions) == 0:
|
| 65 |
-
logger.info("No pending submissions.")
|
| 66 |
return None
|
| 67 |
logger.info(f"Found {len(pending_submissions)} pending submissions.")
|
| 68 |
pending_submissions = pd.DataFrame(pending_submissions)
|
|
@@ -119,6 +119,7 @@ class JobRunner:
|
|
| 119 |
"submission_rows": self.submission_rows,
|
| 120 |
"output_path": self.output_path,
|
| 121 |
"submission_repo": submission_repo,
|
|
|
|
| 122 |
}
|
| 123 |
|
| 124 |
api.add_space_secret(repo_id=space_id, key="PARAMS", value=json.dumps(params))
|
|
|
|
| 36 |
self.submission_id_col = self.competition_info.submission_id_col
|
| 37 |
self.submission_cols = self.competition_info.submission_cols
|
| 38 |
self.submission_rows = self.competition_info.submission_rows
|
| 39 |
+
self.time_limit = self.competition_info.time_limit
|
| 40 |
|
| 41 |
def get_pending_subs(self):
|
| 42 |
submission_jsons = snapshot_download(
|
|
|
|
| 63 |
}
|
| 64 |
)
|
| 65 |
if len(pending_submissions) == 0:
|
|
|
|
| 66 |
return None
|
| 67 |
logger.info(f"Found {len(pending_submissions)} pending submissions.")
|
| 68 |
pending_submissions = pd.DataFrame(pending_submissions)
|
|
|
|
| 119 |
"submission_rows": self.submission_rows,
|
| 120 |
"output_path": self.output_path,
|
| 121 |
"submission_repo": submission_repo,
|
| 122 |
+
"time_limit": self.time_limit,
|
| 123 |
}
|
| 124 |
|
| 125 |
api.add_space_secret(repo_id=space_id, key="PARAMS", value=json.dumps(params))
|