๐ง Spaces์์ Label Studio ์ฌ์ฉํ๊ธฐ
๐ง Spaces์์ Label Studio ์ฌ์ฉํ๊ธฐ
Label Studio๋ ์ฌ๋ฌ ๋ฐ์ดํฐ ์ ํ์ ๋ผ๋ฒจ๋งยท์ด๋ ธํ ์ด์ ยทํ์ํ๋ ์คํ์์ค ๋ฐ์ดํฐ ๋ผ๋ฒจ๋ง ํ๋ซํผ์ด์์. ๋ํ Label Studio๋ ์ ๋ชจ๋ธ ํ์ต, ์กํฐ๋ธ ๋ฌ๋, ์ง๋ ํ์ต ๋ฑ ์ฌ๋ฌ ํ์ต ๊ธฐ๋ฒ์ ์ธ ์ ์๋ ๊ฐ๋ ฅํ ๋จธ์ ๋ฌ๋ ์ธํฐํ์ด์ค๋ฅผ ํฌํจํด์.
์ถ์ฒ: ๋ฌธ์
๋ณธ๋ฌธ
์ด ๊ฐ์ด๋๋ Hugging Face Hub ์์์ ๋ฐ์ดํฐ ๋ผ๋ฒจ๋งยท์ด๋ ธํ ์ด์ ์ฉ Label Studio๋ฅผ ๋ฐฐํฌํ๋ ๋ฒ์ ๊ฐ๋ฅด์ณ์ค์. ๋ฐ๋ชจยทํ๊ฐ ๋ชฉ์ ์ผ๋ก Docker๋ก Hub์ ์์ ํ ํธ์คํ ๋ ๋ ๋ฆฝ ์ ํ๋ฆฌ์ผ์ด์ ์ธ Label Studio์ ๊ธฐ๋ณธ ๊ตฌ์ฑ์ ์ธ ์๋ ์๊ณ , ์์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง๋ฅผ ์ฐ๊ฒฐํด Spaces์ ํธ์คํ ๋ ํ ํ๋ก๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์๋ ์์ด์.
โก๏ธ Spaces์ Label Studio ๋ฐฐํฌํ๊ธฐ
๋ช ๋ฒ์ ํด๋ฆญ๋ง์ผ๋ก Spaces์ Label Studio๋ฅผ ๋ฐฐํฌํ ์ ์์ด์.
Spaces์์ ์ ์ํด์ผ ํ ๊ฒ๋ค:
- Owner(์์ ์): ๊ฐ์ธ ๊ณ์ ๋๋ ์์๋ ์กฐ์ง.
- Space name(์ด๋ฆ): ๊ณ์ ์์ Space ์ด๋ฆ.
- Visibility(๊ณต๊ฐ ์ฌ๋ถ): ๋๋ ์กฐ์ง๋ง ๋ณด์ด๊ฒ ํ๋ ค๋ฉด private, ๋ค๋ฅธ ์ฌ์ฉ์๋ Label Studio API๋ฅผ ์ฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์ด๊ฒ ํ๋ ค๋ฉด public(๊ถ์ฅ).
๐ ๊ธฐ๋ณธ ๊ตฌ์ฑ ์ฌ์ฉํ๊ธฐ
๊ธฐ๋ณธ์ ์ผ๋ก Label Studio๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ก์ปฌ ์คํ ๋ฆฌ์ง๋ฅผ ์ฌ์ฉํด ๊ตฌ์ฑ, ๊ณ์ ์๊ฒฉ ์ฆ๋ช , ํ๋ก์ ํธ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๊ตฌ์ฑ์ผ๋ก Spaces์ ์ค์น๋ผ์. ๋ผ๋ฒจ๋ง ์์ ๊ณผ ๋ฐ์ดํฐ ํญ๋ชฉ๋ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ๋ณด๊ด๋ผ์.
[!WARNING] Hugging Face Spaces์ ์คํ ๋ฆฌ์ง๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์์์์. ์ฌ์์ ํ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ๋ ค๋ฉด Storage Bucket์ ์ฐ๊ฒฐํ์ธ์ โ ์๋ persistence ์น์ ์ ์ฐธ๊ณ ํ์ธ์.
Label Studio๋ฅผ ์คํํ๋ฉด ํ์ค ๋ก๊ทธ์ธ ํ๋ฉด์ด ๋ํ๋์. ์ด๋ฉ์ผ ์ฃผ์๋ก ์ ๊ณ์ ์ ๋ง๋ค๊ณ ์ ์๊ฒฉ ์ฆ๋ช ์ผ๋ก ๋ก๊ทธ์ธํ๋ฉด ๋ฉ๋๋ค. ๋ก๊ทธ์ธ ํ ์ฃผ๊ธฐ์ ์ผ๋ก Label Studio๊ฐ ์คํ ๋ฆฌ์ง๊ฐ ์์์ด๊ณ Space๊ฐ ์ฌ์์๋๋ฉด ๋ฐ์ดํฐ๊ฐ ์ ์ค๋ ์ ์๋ค๊ณ ๊ฒฝ๊ณ ํด์. ๋์์ด ๋๋ Label Studio ๋ง์ค์ฝํธ Heidi๊ฐ ๋ฐ์ดํฐ ๋ผ๋ฒจ๋ง์ ์์ํ ์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๋ผ๊ณ ํ๋กฌํํธ๋ ๋ณด์ฌ์ค์. ์์ํ๋ ค๋ฉด ๊ฐ์ฑ ๋ถ์ ์ด๋ ธํ ์ด์ ์ธํฐํ์ด์ค ๊ตฌ์ถ ๊ฐ์ด๋๊ฐ ์๋ "Zero to One" ํํ ๋ฆฌ์ผ์ ํ์ธํ์ธ์.
๐ ๏ธ ํ๋ก๋์ ์ค๋น Label Studio ์ธ์คํด์ค ๊ตฌ์ฑํ๊ธฐ
Space๋ฅผ ํ๋ก๋์ ์ค๋น ์ํ๋ก ๋ง๋ค๋ ค๋ฉด ์ธ ๊ฐ์ง ๊ตฌ์ฑ ๋ณ๊ฒฝ์ด ํ์ํด์:
- ์ ๊ณ์ ์ ๋ฌด์ ํ ์์ฑ์ ๋นํ์ฑํํ๋ค.
- Storage Bucket ๋๋ ์ธ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๊ฒฐํด ์์์ฑ์ ์ผ ๋ค.
- ์ ํ์ ์ผ๋ก, ๋ผ๋ฒจ๋ง ์์ ์ฉ ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง๋ฅผ ์ฐ๊ฒฐํ๋ค.
์ ๊ณ์ ๋ฌด์ ํ ์์ฑ ๋นํ์ฑํ
Label Studio์ ๊ธฐ๋ณธ ๊ตฌ์ฑ์ ์ฑ URL์ด ์๋ ๋ชจ๋ ์ฌ๋์ด ๋ฌด์ ํ์ผ๋ก ์ ๊ณ์ ์ ๋ง๋ค ์ ์๊ฒ ํด์. Space Settings์ ๋ค์ ๊ตฌ์ฑ ์ํฌ๋ฆฟ์ ์ถ๊ฐํด ๊ฐ์ ์ ์ ํํ ์ ์์ด์.
LABEL_STUDIO_DISABLE_SIGNUP_WITHOUT_LINK:true๋ก ์ค์ ํ๋ฉด ๋ฌด์ ํ ๊ณ์ ์์ฑ์ ๋นํ์ฑํํด์.LABEL_STUDIO_USERNAME: Label Studio Space์์ ์ฒซ ์ฌ์ฉ์๋ก ์ธ ๊ณ์ ์ ์ฌ์ฉ์ ์ด๋ฆ. ์ ํจํ ์ด๋ฉ์ผ ์ฃผ์์ฌ์ผ ํด์.LABEL_STUDIO_PASSWORD: ์ฒซ ์ฌ์ฉ์ ๊ณ์ ๊ณผ ์ฐ๊ฒฐ๋ ๋น๋ฐ๋ฒํธ.
์ด ์ค์ ์ ์ ์ฉํ๋ ค๋ฉด Space๋ฅผ ์ฌ์์ํ์ธ์. ๋ก๊ทธ์ธ ํ๋ฉด์์ ์ ๊ณ์ ์ ๋ง๋๋ ๊ธฐ๋ฅ์ด ๋นํ์ฑํ๋ผ์. ์ ๊ณ์ ์ ๋ง๋ค๋ ค๋ฉด Label Studio ์ฑ์ Organization ์ค์ ์์ ์ ์ฌ์ฉ์๋ฅผ ์ด๋ํด์ผ ํด์.
HF Storage Buckets๋ก ์์์ฑ ์ผ๊ธฐ
๊ธฐ๋ณธ์ ์ผ๋ก ์ด Space๋ ๋ชจ๋ ํ๋ก์ ํธ ๊ตฌ์ฑ๊ณผ ๋ฐ์ดํฐ ์ด๋ ธํ ์ด์ ์ SQLite๋ก ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ ์ฅํด์. Space๊ฐ ๋ฆฌ์ ๋๋ฉด Space์ ๋ชจ๋ ๊ตฌ์ฑ๊ณผ ์ด๋ ธํ ์ด์ ๋ฐ์ดํฐ๊ฐ ์ ์ค๋ผ์.
์์์ฑ์ ์ผ๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ Storage Bucket์ ์ฐ๊ฒฐํ๋ ๊ฑฐ์์. ์๊ตฌ ๊ฐ์ฒด ์คํ ๋ฆฌ์ง๋ฅผ Space์ ์ง์ ๋ง์ดํธํด์. Label Studio๊ฐ SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฏธ๋์ด ์ ๋ก๋๋ฅผ ๋ง์ดํธ๋ ๋ฒํท์ ์ฐ๋ฏ๋ก ํ๋ก์ ํธ์ ์ด๋ ธํ ์ด์ ์ด ์ฌ์์ ํ์๋ ์ด์๋จ์์.
- ๋ฒํท ๋ง๋ค๊ธฐ:
hf buckets create <your-namespace>/label-studio-data - Space Settings โ Storage Buckets์์ ์ฐ๊ฒฐํ๊ณ ๋ง์ดํธ ๊ฒฝ๋ก๋ฅผ
/data๋ก ์ค์ ํ๋ค. - ๋ ๊ฐ์ Space ๋ณ์ ์ค์ :
LABEL_STUDIO_BASE_DATA_DIR=/data STORAGE_PERSISTENCE=1 - Space๋ฅผ Factory rebuildํ๋ค.
[!TIP] ์ฌ์์ ํ์๋ ์ฌ์ฉ์ ์ธ์ ์ ์ ์งํ๋ ค๋ฉด
SECRET_KEYSpace Secret์ ์ค์ ํ์ธ์. ์์ผ๋ฉด Label Studio๊ฐ ๋ถํ ํ ๋๋ง๋ค ์์์ ํค๋ฅผ ์์ฑํด ์ฌ์์ ์ ๋ชจ๋ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์์๋ผ์.
์ฝ๋ฉ ์์ด์ ํธ๊ฐ ๋์ ํ๊ฒ ํ๊ธฐ
Space ์ค์ ์ ์ง์ ํด๋ฆญํ๊ณ ์ถ์ง ์๋ค๋ฉด huggingface_hub์ ์ ๊ทผํ ์ ์๋ ์ฝ๋ฉ ์์ด์ ํธ์๊ฒ Space๋ฅผ ํ๋ก๋น์ ๋ํ๊ฒ ํ ์ ์์ด์. Space ID์ ๋ฒํท ์ด๋ฆ์ ์๋ ค์ฃผ๋ฉด ๋ค์์ ํด๋นํ๋ ์์
์ ์คํํ ์ ์์ด์:
from huggingface_hub import HfApi, Volume
api = HfApi()
space_id = "<your-namespace>/<your-space>"
# Attach the bucket at /data
api.set_space_volumes(
space_id,
volumes=[
Volume(type="bucket", source="<your-namespace>/label-studio-data", mount_path="/data"),
],
)
# Tell Label Studio to write its SQLite DB and media into the mounted bucket
api.add_space_variable(space_id, "LABEL_STUDIO_BASE_DATA_DIR", "/data")
api.add_space_variable(space_id, "STORAGE_PERSISTENCE", "1")
# Optional: set a stable SECRET_KEY so sessions survive restarts
api.add_space_secret(space_id, "SECRET_KEY", "<random-string>")
# Factory rebuild so the new mount and variables take effect
api.restart_space(space_id, factory_reboot=True)
huggingface_hub๋ก Space์ ๋ณผ๋ฅจ ๋ง์ดํธ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ manage-spaces ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํ์ธ์.
Postgres๋ก ์์์ฑ ์ผ๊ธฐ
๋ ๋ฌด๊ฑฐ์ด ๋ค์ค ์ฌ์ฉ์ ๋ฐฐํฌ๋ ์ธ๋ถ Postgres ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ Space์ ์ฐ๊ฒฐํด ํ๋ก์ ํธยท์ด๋ ธํ ์ด์ ์ค์ ์ด ๋ชจ๋ ๋ณด์กด๋๋๋ก ํ ์ ์์ด์.
์์ ์ด ํธ์คํ ํ๋ Postgres ์ธ์คํด์ค์ ๋ง๊ฒ ๋ค์ ์ํฌ๋ฆฟ ๋ณ์๋ฅผ ์ค์ ํ์ธ์. ์ด ๊ฐ๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋น์ค์ ๋ํ ์ ๋ณด๊ฐ Space ์ ์์์ ๊ณต๊ฐ๋ก ์์ง ์๋๋ก ์ํฌ๋ฆฟ์ผ๋ก ์ค์ ํ๋ ๊ฒ์ ๊ฐ๋ ฅํ ๊ถ์ฅํด์.
DJANGO_DB:default๋ก ์ค์ .POSTGRE_NAME: Postgres ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ์ผ๋ก ์ค์ .POSTGRE_USER: Postgres ์ฌ์ฉ์ ์ด๋ฆ์ผ๋ก ์ค์ .POSTGRE_PASSWORD: Postgres ์ฌ์ฉ์ ๋น๋ฐ๋ฒํธ๋ก ์ค์ .POSTGRE_HOST: Postgres ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์คํ ์ค์ธ ํธ์คํธ๋ก ์ค์ .POSTGRE_PORT: Postgres ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์คํ ์ค์ธ ํฌํธ๋ก ์ค์ .STORAGE_PERSISTENCE: ์์ ์คํ ๋ฆฌ์ง ๊ฒฝ๊ณ ๋ฅผ ์์ ๊ธฐ ์ํด1๋ก ์ค์ .
์ด ์ค์ ์ ์ ์ฉํ๋ ค๋ฉด Space๋ฅผ ์ฌ์์ํ์ธ์. ์ฌ์ฉ์, ํ๋ก์ ํธ, ์ด๋ ธํ ์ด์ ์ ๋ณด๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋๊ณ , Space๊ฐ ์ฌ์์ยท๋ฆฌ์ ๋๋ฉด Label Studio๊ฐ ๋ค์ ๋ถ๋ฌ์์.
ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง ์ผ๊ธฐ
๊ธฐ๋ณธ์ ์ผ๋ก ์ด Space์์ ํ์ฑํ๋ ์ ์ผํ ๋ฐ์ดํฐ ์คํ ๋ฆฌ์ง๋ ๋ก์ปฌ์ด์์. Space๊ฐ ๋ฆฌ์ ๋๋ฉด ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ค๋ผ์. ์๊ตฌ ์ ์ฅ์ ์ผ๋ ค๋ฉด ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง ์ปค๋ฅํฐ๋ฅผ ํ์ฑํํด์ผ ํด์. ์ ์ ํ ํด๋ผ์ฐ๋ ์ปค๋ฅํฐ๋ฅผ ์ ํํ๊ณ ๊ทธ ์ํฌ๋ฆฟ์ ๊ตฌ์ฑํ์ธ์.
Amazon S3
STORAGE_TYPE:s3๋ก ์ค์ .STORAGE_AWS_ACCESS_KEY_ID:<YOUR_ACCESS_KEY_ID>STORAGE_AWS_SECRET_ACCESS_KEY:<YOUR_SECRET_ACCESS_KEY>STORAGE_AWS_BUCKET_NAME:<YOUR_BUCKET_NAME>STORAGE_AWS_REGION_NAME:<YOUR_BUCKET_REGION>STORAGE_AWS_FOLDER: ๋น ๋ฌธ์์ด๋ก ์ค์ .
Google Cloud Storage
STORAGE_TYPE:gcs๋ก ์ค์ .STORAGE_GCS_BUCKET_NAME:<YOUR_BUCKET_NAME>STORAGE_GCS_PROJECT_ID:<YOUR_PROJECT_ID>STORAGE_GCS_FOLDER: ๋น ๋ฌธ์์ด๋ก ์ค์ .GOOGLE_APPLICATION_CREDENTIALS:/opt/heartex/secrets/key.json์ผ๋ก ์ค์ .
Azure Blob Storage
STORAGE_TYPE:azure๋ก ์ค์ .STORAGE_AZURE_ACCOUNT_NAME:<YOUR_STORAGE_ACCOUNT>STORAGE_AZURE_ACCOUNT_KEY:<YOUR_STORAGE_KEY>STORAGE_AZURE_CONTAINER_NAME:<YOUR_CONTAINER_NAME>STORAGE_AZURE_FOLDER: ๋น ๋ฌธ์์ด๋ก ์ค์ .
๐ค ๋ค์ ๋จ๊ณ, ํผ๋๋ฐฑ, ์ง์
Label Studio๋ฅผ ์์ํ๋ ค๋ฉด ์์ ๊ฐ์ฑ ๋ถ์ ์ด๋ ธํ ์ด์ ํ๋ก์ ํธ๋ฅผ ์๋ดํ๋ "Zero to One" ํํ ๋ฆฌ์ผ์ ํ์ธํ์ธ์. Label Studio ํํ์ด์ง์์ Label Studio์ ์ปค๋ฎค๋ํฐ์ ๋ํ ์ ์ฒด ๋ฆฌ์์ค๋ฅผ ์ฐพ์ ์ ์์ด์. ์ฌ๊ธฐ์๋ ์ ์ฒด ๋ฌธ์, ์ด๋ ธํ ์ด์ ์ธํฐํ์ด์ค๋ฅผ ์ํํด ๋ณผ ๋ํํ ํ๋ ์ด๊ทธ๋ผ์ด๋, Label Studio Slack ์ปค๋ฎค๋ํฐ ๊ฐ์ ๋งํฌ๊ฐ ํฌํจ๋ผ์.
๋ ์์๋ณด๊ธฐ (Learn more)
- Storage Bucket์ผ๋ก ๋ฐ์ดํฐ ์์์ฑ์ ๊ตฌ์ฑํด ๋ณด์ธ์.
- Label Studio ๋ฌธ์์์ ์ด๋ ธํ ์ด์ ๊ธฐ๋ฅ์ ์ตํ ๋ณด์ธ์.