Skip to content

masterlyj/Env_Manager

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

18 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Environment Fabric

Ray ็š„็Žฏๅขƒไพ›ๅบ”ๆ’ไปถ โ€” ๅŸบไบŽ UV + NAS + Hardlink ็š„ AOT ้ข„ๆž„ๅปบ่™šๆ‹Ÿ็Žฏๅขƒ็ฎก็†ๆœๅŠก


๐ŸŽฏ ้กน็›ฎๅฎšไฝ

Environment Fabric ไธๆ˜ฏ Ray ็š„ๆ›ฟไปฃๅ“๏ผŒ่€Œๆ˜ฏ Ray ็š„ใ€Œ็Žฏๅขƒไพ›ๅบ”ๆ’ไปถใ€ใ€‚

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                           ็ณป็ปŸๆžถๆž„ๅฎšไฝ                                           โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                                 โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚     Environment Fabric       โ”‚   API   โ”‚      Execution Engine             โ”‚ โ”‚
โ”‚  โ”‚     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€     โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ–บ โ”‚      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€          โ”‚ โ”‚
โ”‚  โ”‚     โ€ข AOT ้ข„ๆž„ๅปบ็Žฏๅขƒ          โ”‚         โ”‚      โ€ข Ray                        โ”‚ โ”‚
โ”‚  โ”‚     โ€ข NAS ๅ…ฑไบซๅญ˜ๅ‚จ + Hardlink โ”‚   ่พ“ๅ‡บ   โ”‚      โ€ข Celery                     โ”‚ โ”‚
โ”‚  โ”‚     โ€ข pyproject.toml + uv.lockโ”‚  ่ทฏๅพ„   โ”‚      โ€ข Kubernetes Job             โ”‚ โ”‚
โ”‚  โ”‚     โ€ข ็Žฏๅขƒ็”Ÿๅ‘ฝๅ‘จๆœŸ็ฎก็†         โ”‚         โ”‚      โ€ข Docker / subprocess        โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚                                                                                 โ”‚
โ”‚  ไบงๅ‡บ๏ผšๆ ‡ๅ‡†็š„ .venv ่ทฏๅพ„๏ผˆๅฆ‚ /mnt/nas/envs/wf-001/node-A/.venv/bin/python๏ผ‰      โ”‚
โ”‚  ๆถˆ่ดน่€…๏ผšไปปไฝ•่ƒฝไฝฟ็”จ Python ่งฃ้‡Šๅ™จ่ทฏๅพ„็š„ๆ‰ง่กŒๅผ•ๆ“Ž                                    โ”‚
โ”‚                                                                                 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ”Œ ไธŽ Ray ็š„่žๅˆๆ–นๆกˆ๏ผšpy_executable

ๅˆฉ็”จ Ray ็š„ py_executable ๅ‚ๆ•ฐ๏ผˆๅฎž้ชŒๆ€งๅŠŸ่ƒฝ๏ผ‰๏ผŒๅฏไปฅ่ฎฉ Ray Worker ็›ดๆŽฅไฝฟ็”จ Environment Fabric ้ข„ๆž„ๅปบ็š„ Python ็Žฏๅขƒ๏ผš

import ray

# 1. Environment Fabric ้ข„ๅ…ˆๆž„ๅปบ็š„็Žฏๅขƒ่ทฏๅพ„๏ผˆไฝไบŽ NAS ๅ…ฑไบซๅญ˜ๅ‚จ๏ผ‰
#    ๆ‰€ๆœ‰ Ray Worker ่Š‚็‚น้€š่ฟ‡ NFS ๆŒ‚่ฝฝๅŒไธ€่ทฏๅพ„
PREBUILT_PYTHON = "/mnt/nas/envs/workflow-001/node-A/.venv/bin/python"

# 2. ๅฎšไน‰ runtime_env๏ผŒๅ‘Š่ฏ‰ Ray๏ผš"ๅˆซ่‡ชๅทฑ่ฃ…ๅŒ…ไบ†๏ผŒ็›ดๆŽฅ็”จๆˆ‘็ป™ไฝ ็š„่ฟ™ไธช Python"
runtime_env = {
    "py_executable": PREBUILT_PYTHON,  # ๅ…ณ้”ฎ๏ผšๆŒ‡ๅฎš Worker ๅฏๅŠจๆ—ถไฝฟ็”จ็š„่งฃ้‡Šๅ™จ
    "working_dir": "./my_project_code"  # ไปๅฏๆŒ‚่ฝฝไปฃ็ ็›ฎๅฝ•
}

@ray.remote(runtime_env=runtime_env)
def heavy_computing_task():
    import sys
    import torch
    # ่ฟ™้‡Œไฝฟ็”จ็š„ๆ˜ฏ Environment Fabric ้ข„ๆž„ๅปบ็š„็Žฏๅขƒ
    return f"Running on {sys.executable} with torch {torch.__version__}"

# 3. ๆ‰ง่กŒ
ray.init()
print(ray.get(heavy_computing_task.remote()))

Tip

่žๅˆๆžถๆž„็š„ๆ ธๅฟƒๆ€ๆƒณ

  • Environment Fabric๏ผš่ดŸ่ดฃ AOT ้ข„ๆž„ๅปบ็Žฏๅขƒ๏ผŒไบงๅ‡บ .venv ่ทฏๅพ„
  • Ray๏ผš่ดŸ่ดฃ JIT ไปปๅŠก่ฐƒๅบฆ๏ผŒ้€š่ฟ‡ py_executable ไฝฟ็”จ้ข„ๆž„ๅปบ็Žฏๅขƒ
  • ็ป“ๆžœ๏ผš็Žฏๅขƒๆž„ๅปบไธŽไปปๅŠกๆ‰ง่กŒ่งฃ่€ฆ๏ผŒไธค่€…ๅ„ๅธๅ…ถ่Œ

๐Ÿš€ ไธบไป€ไนˆ้œ€่ฆ Environment Fabric๏ผŸ

Ray ็š„ runtime_env ่™ฝ็„ถๅผบๅคง๏ผŒไฝ†ๅฎƒๆœฌ่ดจไธŠๆ˜ฏ "ๅˆ†ๅธƒๅผ็š„ใ€่Š‚็‚นๆœฌๅœฐ็š„ใ€JIT ็š„"ใ€‚ ่€Œ Environment Fabric ๆ˜ฏ "ไธญๅฟƒๅŒ–็š„ใ€ๅ…จๅฑ€ๅ…ฑไบซ็š„ใ€AOT ็š„"ใ€‚

ไปฅไธ‹ 4 ไธช็”Ÿไบง็บงๅœบๆ™ฏ๏ผŒRay ๅŽŸ็”Ÿๆ–นๆกˆ่งฃๅ†ณไธไบ†๏ผŒ่€Œ Environment Fabric ๆ˜ฏๅฎŒ็พŽ่งฃๆณ•๏ผš

ๅœบๆ™ฏไธ€๏ผšๅคง่ง„ๆจก SaaS ๅนณๅฐ๏ผˆ10000+ ็Žฏๅขƒ๏ผ‰

้—ฎ้ข˜๏ผš็ฃ็›˜ๆˆๆœฌ็ˆ†็‚ธ

ๆžถๆž„ 10 ๅฐๆœบๅ™จ ร— ๅฎ‰่ฃ… torch (2GB) ๆ€ป็ฃ็›˜ๅ ็”จ
Ray Runtime Env (Node-local) ๆฏๅฐๆœบๅ™จ็‹ฌ็ซ‹ๅฎ‰่ฃ… 20 GB
Environment Fabric (NAS + Hardlink) ๅ…ฑไบซๅญ˜ๅ‚จ + ็กฌ้“พๆŽฅ 2 GB

Environment Fabric ๆ–นๆกˆ๏ผš

  • ๆ‰€ๆœ‰็Žฏๅขƒๆž„ๅปบๅœจ NAS ๅ…ฑไบซๅญ˜ๅ‚จไธŠ
  • ๅˆฉ็”จ uv ็š„ Hardlink ๆœบๅˆถ๏ผŒ็›ธๅŒๅŒ…ๅชๅ ็”จไธ€ไปฝ็‰ฉ็†็ฉบ้—ด
  • ่Š‚็œ 90% ไปฅไธŠๅญ˜ๅ‚จๆˆๆœฌ
NAS ๅ…ฑไบซๅญ˜ๅ‚จๆžถๆž„๏ผš
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  /mnt/nas/                        <- NFS/EFS ๆŒ‚่ฝฝ็‚น                 โ”‚
โ”‚    โ”‚                                                                โ”‚
โ”‚    โ”œโ”€โ”€ envs/                      <- ๆ‰€ๆœ‰็Žฏๅขƒ                       โ”‚
โ”‚    โ”‚   โ”œโ”€โ”€ wf-001_node-A/.venv/   <- ็ŽฏๅขƒA (torch)                 โ”‚
โ”‚    โ”‚   โ”œโ”€โ”€ wf-001_node-B/.venv/   <- ็ŽฏๅขƒB (torch)  โ”€โ”€โ”            โ”‚
โ”‚    โ”‚   โ””โ”€โ”€ wf-002_node-C/.venv/   <- ็ŽฏๅขƒC (torch)  โ”€โ”€โ”ผโ”€ Hardlink  โ”‚
โ”‚    โ”‚                                                  โ”‚             โ”‚
โ”‚    โ””โ”€โ”€ uv_cache/                  <- ๅ…จๅฑ€็ผ“ๅญ˜ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜             โ”‚
โ”‚        โ””โ”€โ”€ torch-2.0.0.whl        <- ็‰ฉ็†ๆ–‡ไปถๅชๅญ˜ไธ€ไปฝ               โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๅœบๆ™ฏไบŒ๏ผš็”Ÿไบง็Žฏๅขƒ้›ถๅ†ทๅฏๅŠจ

้—ฎ้ข˜๏ผšRay JIT ๅฏผ่‡ดไปปๅŠกๅ†ทๅฏๅŠจไธๅฏๆŽง

sequenceDiagram
    participant User
    participant Ray as Ray (JIT ๆจกๅผ)
    participant EnvFabric as Environment Fabric (AOT ๆจกๅผ)
    participant Task

    Note over Ray: Ray ๅŽŸ็”Ÿๆ–นๆกˆ - ๅ†ทๅฏๅŠจ
    User->>Ray: ๆไบคไปปๅŠก
    Ray->>Ray: ๅ‘็Žฐๆฒก็Žฏๅขƒ
    Ray->>Ray: ๅผ€ๅง‹ๆž„ๅปบ็Žฏๅขƒ๏ผˆๅฏ่ƒฝ่€—ๆ—ถๆ•ฐๅˆ†้’Ÿ๏ผ‰
    Ray->>Task: ็ญ‰ๅพ…... ๆ‰ง่กŒไปปๅŠก

    Note over EnvFabric: Environment Fabric ๆ–นๆกˆ - ้ข„็ƒญ
    User->>EnvFabric: ไฟๅญ˜ๅทฅไฝœๆต้…็ฝฎ
    EnvFabric->>EnvFabric: ๅŽๅฐ้™้ป˜ๆž„ๅปบ็Žฏๅขƒ โœ…
    Note over User: ็จๅŽ...
    User->>EnvFabric: ็‚นๅ‡ป่ฟ่กŒ
    EnvFabric->>Task: ็Žฏๅขƒๅทฒๅฐฑ็ปช โ†’ ๆฏซ็ง’็บงๅฏๅŠจ ๐Ÿš€
Loading

Environment Fabric ๆ–นๆกˆ๏ผš

  • AOT ้ข„ๆž„ๅปบ๏ผš็”จๆˆท็ผ–่พ‘ๅฎŒๅทฅไฝœๆต โ†’ ไฟๅญ˜ โ†’ ๅŽๅฐ้™้ป˜ๆž„ๅปบ็Žฏๅขƒ
  • ๆฏซ็ง’็บงๅฏๅŠจ๏ผš่ฟ่กŒๆ—ถ็Žฏๅขƒๅทฒๅฐฑ็ปช๏ผŒRay ็›ดๆŽฅไฝฟ็”จ py_executable
  • ่งฃ่€ฆๆž„ๅปบไธŽๆ‰ง่กŒ๏ผš็Žฏๅขƒๆž„ๅปบไฝœไธบ็‹ฌ็ซ‹็Žฏ่Š‚๏ผŒไธ้˜ปๅกžไปปๅŠก่ฐƒๅบฆ

ๅœบๆ™ฏไธ‰๏ผšๅฏ่ฐƒ่ฏ•็š„็™ฝ็›’็Žฏๅขƒ

้—ฎ้ข˜๏ผšRay ็Žฏๅขƒๆ˜ฏ้ป‘็›’๏ผŒๆ•…้šœ้šพๆŽ’ๆŸฅ

็ปดๅบฆ Ray Runtime Env Environment Fabric
็Žฏๅขƒไฝ็ฝฎ ไธดๆ—ถ็›ฎๅฝ•๏ผŒ่ขซ GC ๅŽๆถˆๅคฑ ๆŒไน…ๅŒ–็‰ฉ็†่ทฏๅพ„
ๆ•…้šœๆŽ’ๆŸฅ ๅช่ƒฝ็œ‹ Ray ๆ—ฅๅฟ— ๅฏ SSH ่ฟ›ๅŽป source .venv/bin/activate
็Žฏๅขƒๅ›žๆปš ไธๆ”ฏๆŒ ๅฏๅฏน็Žฏๅขƒๅš Snapshot
็กฎๅฎšๆ€ง pip list ๆพๆ•ฃ uv.lock ๅญ—่Š‚็บง้”ๅฎš

Environment Fabric ๆ–นๆกˆ๏ผš

  • ็Žฏๅขƒๆ˜ฏ็‰ฉ็†ๅญ˜ๅœจ็š„ๆ–‡ไปถๅคน๏ผŒๅฏ้šๆ—ถ่ฟ›ๅ…ฅๆŽ’ๆŸฅ
  • pyproject.toml + uv.lock ไฟ่ฏ็Žฏๅขƒๅญ—่Š‚็บงไธ€่‡ด
  • ๆ”ฏๆŒ็Žฏๅขƒ็‰ˆๆœฌ็ฎก็†ๅ’Œๅ›žๆปš

ๅœบๆ™ฏๅ››๏ผšVendor Agnostic๏ผˆไธ้”ๅฎšๆ‰ง่กŒๅผ•ๆ“Ž๏ผ‰

้—ฎ้ข˜๏ผšRay runtime_env ไธŽ Ray ๅผบ็ป‘ๅฎš

Environment Fabric ๆ–นๆกˆ๏ผš

  • ไบงๅ‡บๆ ‡ๅ‡†็š„ .venv ่ทฏๅพ„
  • ๅฏ่ขซไปปไฝ•ๆ‰ง่กŒๅผ•ๆ“Žๆถˆ่ดน
# ่ขซ Ray ๆถˆ่ดน
@ray.remote(runtime_env={"py_executable": venv_python_path})
def ray_task(): ...

# ่ขซ Docker ๆŒ‚่ฝฝ
# docker run -v /mnt/nas/envs:/envs python:3.11 /envs/wf-001/.venv/bin/python script.py

# ่ขซ Kubernetes Job ไฝฟ็”จ
# command: ["/mnt/nas/envs/wf-001/node-A/.venv/bin/python", "main.py"]

# ่ขซ subprocess ่ฐƒ็”จ
subprocess.run([venv_python_path, "script.py"])

๐Ÿ“Š ๆŠ€ๆœฏๅฏนๆฏ”ๆ€ป็ป“

็ปดๅบฆ Environment Fabric Ray Runtime Env
ๆž„ๅปบๆ—ถๆœบ โฑ๏ธ AOT (ๆๅ‰ๆž„ๅปบ) โณ JIT (่ฟ่กŒๆ—ถๆž„ๅปบ)
ๅญ˜ๅ‚จๆจกๅž‹ ๐Ÿ’พ NAS ๅ…ฑไบซ + Hardlink ๐Ÿ“ฆ Node-local ็ผ“ๅญ˜
็Žฏๅขƒ็กฎๅฎšๆ€ง ๐Ÿ”’ uv.lock ๅญ—่Š‚็บง้”ๅฎš ๐ŸŽฒ pip list ๆพๆ•ฃๅฃฐๆ˜Ž
ๅ†ทๅฏๅŠจๆ—ถ้—ด ๐Ÿš€ ๆฏซ็ง’็บง ๐Ÿข ๅˆ†้’Ÿ็บง๏ผˆๅคงไพ่ต–๏ผ‰
ๅฏ่ฐƒ่ฏ•ๆ€ง โœ… ๆŒไน…ๅŒ–็™ฝ็›’ โŒ ไธดๆ—ถ้ป‘็›’
่€ฆๅˆๅบฆ ๐Ÿ”Œ Vendor Agnostic ๐Ÿ”— Ray ๅผบ็ป‘ๅฎš
็ฃ็›˜ๆ•ˆ็އ ๐Ÿ’ฐ ่Š‚็œ 90%+ ๐Ÿ“ˆ ็บฟๆ€งๅขž้•ฟ

๐Ÿ—๏ธ NAS ๅ…ฑไบซๅญ˜ๅ‚จๆžถๆž„

Important

็กฌๆ€ง้ƒจ็ฝฒๆกไปถ

UV_CACHE_DIR ๅฟ…้กปไธŽ ENVS_BASE_PATH ๅœจๅŒไธ€็‰ฉ็†ๅˆ†ๅŒบ๏ผˆNAS ๆŒ‚่ฝฝ็‚น๏ผ‰๏ผŒๆ‰่ƒฝไฝฟ็”จ Hardlink ๆœบๅˆถใ€‚

/mnt/nas/                           <- NFS/EFS ๆŒ‚่ฝฝ็‚น๏ผˆๆ‰€ๆœ‰่Š‚็‚นๅ…ฑไบซ๏ผ‰
โ”‚
โ”œโ”€โ”€ envs/                           <- ENVS_BASE_PATH
โ”‚   โ”œโ”€โ”€ workflow123_node123/        <- ็‹ฌ็ซ‹ UV ้กน็›ฎ
โ”‚   โ”‚   โ”œโ”€โ”€ .venv/                  <- ่™šๆ‹Ÿ็Žฏๅขƒ
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ bin/python          <- Ray py_executable ๆŒ‡ๅ‘่ฟ™้‡Œ
โ”‚   โ”‚   โ”œโ”€โ”€ pyproject.toml          <- ไพ่ต–ๅฃฐๆ˜Ž
โ”‚   โ”‚   โ”œโ”€โ”€ uv.lock                 <- ็‰ˆๆœฌ้”ๅฎš
โ”‚   โ”‚   โ””โ”€โ”€ metadata.json           <- ็Žฏๅขƒๅ…ƒๆ•ฐๆฎ
โ”‚   โ””โ”€โ”€ ...
โ”‚
โ””โ”€โ”€ uv_cache/                       <- UV_CACHE_DIR๏ผˆๅ…จๅฑ€ๅ…ฑไบซ็ผ“ๅญ˜๏ผ‰
    โ”œโ”€โ”€ wheels/                     <- .whl ๅŒ…ๆ–‡ไปถ
    โ””โ”€โ”€ archives/                   <- ๆบ็ ๅŒ…
            โ†‘
            โ””โ”€โ”€ Hardlink ๆŒ‡ๅ‘ๅ„็Žฏๅขƒ็š„ .venv/lib/

๐Ÿ“ ่ฏฆ็ป†ๆŠ€ๆœฏๆ–‡ๆกฃ

ๆŠ€ๆœฏ็ป†่Š‚ๅทฒๆ‹†ๅˆ†ๅˆฐ็‹ฌ็ซ‹ๆ–‡ๆกฃ๏ผš

ๆ–‡ๆกฃ ๆ่ฟฐ
๐Ÿ“‹ PRD - ไบงๅ“้œ€ๆฑ‚ๆ–‡ๆกฃ ่ƒŒๆ™ฏใ€็›ฎๆ ‡ใ€ๅŠŸ่ƒฝ่Œƒๅ›ด
๐Ÿ›๏ธ ARD - ๆžถๆž„้œ€ๆฑ‚ๆ–‡ๆกฃ ็ณป็ปŸๆžถๆž„ใ€็ป„ไปถ่ฎพ่ฎกใ€ๅญ˜ๅ‚จ็ญ–็•ฅ
โš™๏ธ TRD - ๆŠ€ๆœฏ้œ€ๆฑ‚ๆ–‡ๆกฃ API ่ง„่Œƒใ€้กน็›ฎ็ป“ๆž„ใ€้…็ฝฎ่ฏดๆ˜Ž

๐Ÿš€ ๅฟซ้€Ÿๅผ€ๅง‹

1. ็Žฏๅขƒ่ฆๆฑ‚

  • Python 3.11+
  • uv ๅŒ…็ฎก็†ๅ™จ
  • NAS/ๅ…ฑไบซๅญ˜ๅ‚จ๏ผˆ็”Ÿไบง็Žฏๅขƒ๏ผ‰
  • PostgreSQL๏ผˆๅฎก่ฎกๆ•ฐๆฎๅบ“๏ผ‰

2. ๅฎ‰่ฃ…ไธŽ่ฟ่กŒ

# ๅ…‹้š†้กน็›ฎ
git clone <repo-url>
cd env_manager

# ๅฎ‰่ฃ…ไพ่ต–
uv sync

# ้…็ฝฎ็Žฏๅขƒๅ˜้‡
cp .env.template .env
# ็ผ–่พ‘ .env ๆ–‡ไปถ้…็ฝฎ DATA_ROOTใ€DATABASE_URL ็ญ‰

# ๅฏๅŠจๆœๅŠก
uv run uvicorn src.api:app --host 0.0.0.0 --port 8000

3. ๅˆ›ๅปบ็Žฏๅขƒ

# ๅˆ›ๅปบไธ€ไธชๆ–ฐ็Žฏๅขƒ
curl -X POST http://localhost:8000/envs \
  -F "workflow_id=wf-001" \
  -F "node_id=node-A" \
  -F "packages=numpy>=1.24.0" \
  -F "packages=pandas>=2.0.0"

4. ไธŽ Ray ้›†ๆˆ

import ray
import httpx

# 1. ไปŽ Environment Fabric ่Žทๅ–้ข„ๆž„ๅปบ็Žฏๅขƒ่ทฏๅพ„
resp = httpx.get("http://localhost:8000/envs/wf-001/node-A")
env_path = resp.json()["env_path"]
python_path = f"{env_path}/.venv/bin/python"

# 2. ้…็ฝฎ Ray ไฝฟ็”จ่ฏฅ็Žฏๅขƒ
runtime_env = {"py_executable": python_path}

@ray.remote(runtime_env=runtime_env)
def my_task():
    import numpy as np
    return np.__version__

ray.init()
print(ray.get(my_task.remote()))

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors