Spaces:
Paused
Paused
Commit
·
79ef841
1
Parent(s):
d39f16b
update code
Browse files- Dockerfile +4 -1
- web_server.py +65 -7
Dockerfile
CHANGED
|
@@ -15,7 +15,6 @@ ENV PATH /app/miniconda/bin:$PATH
|
|
| 15 |
|
| 16 |
SHELL ["conda", "run","--no-capture-output", "-p","/app/env", "/bin/bash", "-c"]
|
| 17 |
|
| 18 |
-
COPY --chown=1000:1000 ./test_server.py /app/test_server.py
|
| 19 |
COPY --chown=1000:1000 ./web_server.py /app/web_server.py
|
| 20 |
COPY --chown=1000:1000 ./docker/web_server_config/scene-0383-medium-00.yaml /app/docker/web_server_config/scene-0383-medium-00.yaml
|
| 21 |
COPY --chown=1000:1000 ./download_pre_datas.py /app/download_pre_datas.py
|
|
@@ -27,6 +26,10 @@ ENV TORCH_CUDA_ARCH_LIST "7.5"
|
|
| 27 |
ENV http_proxy=
|
| 28 |
ENV https_proxy=
|
| 29 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 30 |
RUN ./.pixi/envs/default/bin/python /app/download_pre_datas.py
|
| 31 |
|
| 32 |
CMD ["./.pixi/envs/default/bin/python", "web_server.py"]
|
|
|
|
| 15 |
|
| 16 |
SHELL ["conda", "run","--no-capture-output", "-p","/app/env", "/bin/bash", "-c"]
|
| 17 |
|
|
|
|
| 18 |
COPY --chown=1000:1000 ./web_server.py /app/web_server.py
|
| 19 |
COPY --chown=1000:1000 ./docker/web_server_config/scene-0383-medium-00.yaml /app/docker/web_server_config/scene-0383-medium-00.yaml
|
| 20 |
COPY --chown=1000:1000 ./download_pre_datas.py /app/download_pre_datas.py
|
|
|
|
| 26 |
ENV http_proxy=
|
| 27 |
ENV https_proxy=
|
| 28 |
|
| 29 |
+
RUN ./.pixi/envs/default/bin/python3 -m ensurepip
|
| 30 |
+
|
| 31 |
+
RUN ./.pixi/envs/default/bin/python3 -m pip install psutil
|
| 32 |
+
|
| 33 |
RUN ./.pixi/envs/default/bin/python /app/download_pre_datas.py
|
| 34 |
|
| 35 |
CMD ["./.pixi/envs/default/bin/python", "web_server.py"]
|
web_server.py
CHANGED
|
@@ -7,23 +7,26 @@ import time
|
|
| 7 |
import io
|
| 8 |
import enum
|
| 9 |
import hugsim_env
|
|
|
|
| 10 |
from collections import deque, OrderedDict
|
| 11 |
from datetime import datetime
|
| 12 |
-
from typing import Any, Dict
|
| 13 |
sys.path.append(os.getcwd())
|
| 14 |
|
| 15 |
-
from fastapi import FastAPI, Body, Header, Depends, HTTPException
|
| 16 |
from fastapi.responses import HTMLResponse, Response
|
| 17 |
from omegaconf import OmegaConf
|
| 18 |
-
from huggingface_hub import HfApi
|
| 19 |
import open3d as o3d
|
| 20 |
import numpy as np
|
| 21 |
import gymnasium
|
| 22 |
import uvicorn
|
|
|
|
| 23 |
|
| 24 |
from sim.utils.sim_utils import traj2control, traj_transform_to_global
|
| 25 |
from sim.utils.score_calculator import hugsim_evaluate
|
| 26 |
|
|
|
|
| 27 |
HF_TOKEN = os.getenv('HF_TOKEN', None)
|
| 28 |
COMPETITION_ID = os.getenv('COMPETITION_ID', None)
|
| 29 |
|
|
@@ -38,6 +41,38 @@ class SubmissionStatus(enum.Enum):
|
|
| 38 |
FAILED = 4
|
| 39 |
|
| 40 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 41 |
def get_token_info(token: str) -> Dict[str, Any]:
|
| 42 |
token_info_path = hf_api.hf_hub_download(
|
| 43 |
repo_id=COMPETITION_ID,
|
|
@@ -276,9 +311,15 @@ _result_dict= FifoDict(max_size=100)
|
|
| 276 |
env_manager = EnvHandlerManager()
|
| 277 |
|
| 278 |
|
| 279 |
-
def _get_env_handler(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 280 |
try:
|
| 281 |
-
token_info = get_token_info(
|
| 282 |
except Exception:
|
| 283 |
raise HTTPException(status_code=401)
|
| 284 |
return env_manager.get_env_handler(token_info["submission_id"])
|
|
@@ -376,13 +417,30 @@ def main_page_endpoint(env_handler: EnvHandler = Depends(_get_env_handler)):
|
|
| 376 |
|
| 377 |
|
| 378 |
@app.get("/")
|
| 379 |
-
def main_page_endpoint(
|
|
|
|
|
|
|
| 380 |
"""
|
| 381 |
Main page endpoint to display logs.
|
| 382 |
"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 383 |
html_content = f"""
|
| 384 |
<html>
|
| 385 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 386 |
</html>
|
| 387 |
"""
|
| 388 |
return HTMLResponse(content=html_content)
|
|
|
|
| 7 |
import io
|
| 8 |
import enum
|
| 9 |
import hugsim_env
|
| 10 |
+
import subprocess as sp
|
| 11 |
from collections import deque, OrderedDict
|
| 12 |
from datetime import datetime
|
| 13 |
+
from typing import Any, Dict, Optional
|
| 14 |
sys.path.append(os.getcwd())
|
| 15 |
|
| 16 |
+
from fastapi import FastAPI, Body, Header, Depends, HTTPException, Query
|
| 17 |
from fastapi.responses import HTMLResponse, Response
|
| 18 |
from omegaconf import OmegaConf
|
| 19 |
+
from huggingface_hub import HfApi
|
| 20 |
import open3d as o3d
|
| 21 |
import numpy as np
|
| 22 |
import gymnasium
|
| 23 |
import uvicorn
|
| 24 |
+
import psutil
|
| 25 |
|
| 26 |
from sim.utils.sim_utils import traj2control, traj_transform_to_global
|
| 27 |
from sim.utils.score_calculator import hugsim_evaluate
|
| 28 |
|
| 29 |
+
ADMIN_TOKEN = os.getenv('ADMIN_TOKEN', None)
|
| 30 |
HF_TOKEN = os.getenv('HF_TOKEN', None)
|
| 31 |
COMPETITION_ID = os.getenv('COMPETITION_ID', None)
|
| 32 |
|
|
|
|
| 41 |
FAILED = 4
|
| 42 |
|
| 43 |
|
| 44 |
+
def get_gpu_memory():
|
| 45 |
+
output_to_list = lambda x: x.decode('ascii').split('\n')[:-1]
|
| 46 |
+
COMMAND = "nvidia-smi --query-gpu=memory.used --format=csv"
|
| 47 |
+
try:
|
| 48 |
+
memory_use_info = output_to_list(sp.check_output(COMMAND.split(),stderr=sp.STDOUT))[1:]
|
| 49 |
+
except sp.CalledProcessError as e:
|
| 50 |
+
raise RuntimeError("command '{}' return with error (code {}): {}".format(e.cmd, e.returncode, e.output))
|
| 51 |
+
memory_use_values = [int(x.split()[0]) for x in memory_use_info]
|
| 52 |
+
return memory_use_values
|
| 53 |
+
|
| 54 |
+
|
| 55 |
+
def get_system_status():
|
| 56 |
+
cpu_percent = psutil.cpu_percent(interval=1)
|
| 57 |
+
cpu_count = psutil.cpu_count(logical=True)
|
| 58 |
+
|
| 59 |
+
virtual_mem = psutil.virtual_memory()
|
| 60 |
+
total_mem = virtual_mem.total / (1024 ** 3)
|
| 61 |
+
used_mem = virtual_mem.used / (1024 ** 3)
|
| 62 |
+
mem_percent = virtual_mem.percent
|
| 63 |
+
|
| 64 |
+
system_info = {
|
| 65 |
+
"cpu_percent": cpu_percent,
|
| 66 |
+
"cpu_count": cpu_count,
|
| 67 |
+
"total_memory_gb": round(total_mem, 2),
|
| 68 |
+
"used_memory_gb": round(used_mem, 2),
|
| 69 |
+
"memory_percent": mem_percent,
|
| 70 |
+
"gpus": get_gpu_memory(),
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
+
return system_info
|
| 74 |
+
|
| 75 |
+
|
| 76 |
def get_token_info(token: str) -> Dict[str, Any]:
|
| 77 |
token_info_path = hf_api.hf_hub_download(
|
| 78 |
repo_id=COMPETITION_ID,
|
|
|
|
| 311 |
env_manager = EnvHandlerManager()
|
| 312 |
|
| 313 |
|
| 314 |
+
def _get_env_handler(
|
| 315 |
+
auth_token: Optional[str] = Header(None),
|
| 316 |
+
query_token: Optional[str] = Query(None)
|
| 317 |
+
) -> EnvHandler:
|
| 318 |
+
token = auth_token or query_token
|
| 319 |
+
if not token:
|
| 320 |
+
raise HTTPException(status_code=401, detail="Authorization token is required.")
|
| 321 |
try:
|
| 322 |
+
token_info = get_token_info(token)
|
| 323 |
except Exception:
|
| 324 |
raise HTTPException(status_code=401)
|
| 325 |
return env_manager.get_env_handler(token_info["submission_id"])
|
|
|
|
| 417 |
|
| 418 |
|
| 419 |
@app.get("/")
|
| 420 |
+
def main_page_endpoint(
|
| 421 |
+
admin_token: Optional[str] = Query(None),
|
| 422 |
+
):
|
| 423 |
"""
|
| 424 |
Main page endpoint to display logs.
|
| 425 |
"""
|
| 426 |
+
if admin_token != ADMIN_TOKEN:
|
| 427 |
+
html_content = f"""
|
| 428 |
+
<html>
|
| 429 |
+
running
|
| 430 |
+
</html>
|
| 431 |
+
"""
|
| 432 |
+
return HTMLResponse(content=html_content)
|
| 433 |
+
|
| 434 |
+
system_info = get_system_status()
|
| 435 |
html_content = f"""
|
| 436 |
<html>
|
| 437 |
+
<head>
|
| 438 |
+
<title>System Status</title>
|
| 439 |
+
</head>
|
| 440 |
+
<body>
|
| 441 |
+
<h1>System Status</h1>
|
| 442 |
+
<pre>{json.dumps(system_info, indent=4)}</pre>
|
| 443 |
+
</body>
|
| 444 |
</html>
|
| 445 |
"""
|
| 446 |
return HTMLResponse(content=html_content)
|