Hub documentation
๐ง Spaces์ Label Studio
๐ง Spaces์ Label Studio
Label Studio๋ ๋ค์ํ ๋ฐ์ดํฐ ์ ํ์ ๋ผ๋ฒจ๋ง, ์ฃผ์ ๋ฐ ํ์ํ ์ ์๋ ์คํ์์ค ๋ฐ์ดํฐ ๋ผ๋ฒจ๋ง ํ๋ซํผ์ ๋๋ค. ๋ํ Label Studio์๋ ์๋ก์ด ๋ชจ๋ธ ํ์ต, ๋ฅ๋ ํ์ต, ์ง๋ ํ์ต ๋ฐ ๊ธฐํ ๋ค์ํ ํ์ต ๊ธฐ๋ฒ์ ์ํด ์ฌ์ฉํ ์ ์๋ ๊ฐ๋ ฅํ ๋จธ์ ๋ฌ๋ ์ธํฐํ์ด์ค๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
์ด ๊ฐ์ด๋์์๋ Hugging Face Hub ๋ด์์ ๋ฐ์ดํฐ ๋ผ๋ฒจ๋ง ๋ฐ ์ฃผ์์ ์ํด Label Studio๋ฅผ ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ์ ์๋ดํฉ๋๋ค. ๋ฐ๋ชจ ๋ฐ ํ๊ฐ ๋ชฉ์ ์ผ๋ก Docker๋ฅผ ์ฌ์ฉํ์ฌ Hub์ ์์ ํ ํธ์คํ ๋๋ ์์ฒด ์๊ฒฐํ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก Label Studio์ ๊ธฐ๋ณธ ๊ตฌ์ฑ์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์์ฒด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง๋ฅผ ์ฐ๊ฒฐํ์ฌ Spaces์ ํธ์คํ ๋๋ ์์ ํ ๊ธฐ๋ฅ์ ๊ฐ์ถ ํ๋ก๋์ ๊ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์๋ ์์ต๋๋ค.
โก๏ธ Spaces์ Label Studio ๋ฐฐํฌ
Label Studio๋ฅผ Spaces์ ๋ช ๋ฒ์ ํด๋ฆญ๋ง์ผ๋ก ๋ฐฐํฌํ ์ ์์ต๋๋ค:
Spaces๋ ๋ค์์ ์ ์ํ๋๋ก ์๊ตฌํฉ๋๋ค:
Owner: ๊ฐ์ธ ๊ณ์ ๋๋ ์์๋ ์กฐ์ง
Space ์ด๋ฆ: Space๋ฅผ ์์ฑํ๋ ค๋ ๊ณ์ ๋ด์์ ํด๋น Space์ ๋ถ์ฌํ ์ด๋ฆ
Space๋ฅผ ๋ณธ์ธ ๋๋ ์กฐ์ง์์๋ง ๋ณผ ์ ์๋๋ก ํ๋ ค๋ฉด Visibility: private์, Label Studio API๋ฅผ ์ฌ์ฉํ๋ ๋ค๋ฅธ ์ฌ์ฉ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๋ณผ ์ ์๋๋ก ํ๋ ค๋ฉด public์ ์ ํํฉ๋๋ค(๊ถ์ฅ).
๐ ๊ธฐ๋ณธ ๊ตฌ์ฑ ์ฌ์ฉ
๊ธฐ๋ณธ์ ์ผ๋ก Label Studio๋ Spaces์ ์ค์น๋๋ฉฐ, ์ด ๊ตฌ์ฑ์์๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ก์ปฌ ์คํ ๋ฆฌ์ง๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ, ๊ณ์ ์๊ฒฉ ์ฆ๋ช , ํ๋ก์ ํธ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. ๋ผ๋ฒจ๋ง ์์ ๋ฐ ๋ฐ์ดํฐ ํญ๋ชฉ๋ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ๋ณด๊ด๋ฉ๋๋ค.
Hugging Face Spaces์ ์คํ ๋ฆฌ์ง๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ผ์์ ์ ๋๋ค. ์ฌ์์ ํ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ๋ ค๋ฉด Storage Bucket์ ์ฐ๊ฒฐํด์ผ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์๋ ์ง์์ฑ ์น์ ์ ์ฐธ๊ณ ํ์ธ์.
Label Studio๋ฅผ ์คํํ๋ฉด ํ์ค ๋ก๊ทธ์ธ ํ๋ฉด์ด ํ์๋ฉ๋๋ค. ์ด๋ฉ์ผ ์ฃผ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ณ์ ์ ๋ง๋ค๊ณ ์ ์๊ฒฉ ์ฆ๋ช ์ผ๋ก ๋ก๊ทธ์ธํ์ฌ ์์ํ ์ ์์ต๋๋ค. ๋ก๊ทธ์ธ ํ ์ฃผ๊ธฐ์ ์ผ๋ก Label Studio๊ฐ ์คํ ๋ฆฌ์ง๊ฐ ์ผ์์ (ephemeral)์ด๋ฉฐ Space๊ฐ ์ฌ์์๋๋ฉด ๋ฐ์ดํฐ๊ฐ ์์ค๋ ์ ์๋ค๊ณ ๊ฒฝ๊ณ ํฉ๋๋ค. ๋ํ, ๋ฐ์ดํฐ ๋ผ๋ฒจ๋ง์ ์์ํ๊ธฐ ์ํด ์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๋ผ๋ Label Studio์ ์น์ ํ ๋ง์ค์ฝํธ์ธ Heidi์ ํ๋กฌํํธ๊ฐ ๋ฏธ๋ฆฌ ์ค์ ๋์ด ์์ต๋๋ค. ์์ํ๋ ค๋ฉด, ๊ฐ์ ๋ถ์์ ์ํ ์ด๋ ธํ ์ด์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ ์๋ดํ๋ Label Studio โ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=1Space๋ฅผ Factory rebuildํฉ๋๋ค.
์ฌ์์ ํ์๋ ์ฌ์ฉ์ ์ธ์ ์ด ์ ์ง๋๋๋ก
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๋ฅผ ํตํด ์คํ์ด์ค ๋ฐ ๋ณผ๋ฅจ ๋ง์ดํธ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ manage-spaces ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํ์ธ์.
Postgres๋ฅผ ์ฌ์ฉํ์ฌ ์์์ฑ ํ์ฑํ
๋ ๋ฌด๊ฑฐ์ด ๋ค์ค ์ฌ์ฉ์ ๋ฐฐํฌ ํ๊ฒฝ์์๋ ์ธ๋ถ Postgres ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์คํ์ด์ค์ ์ฐ๊ฒฐํ์ฌ ์ง์์ฑ์ ํ์ฑํํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ๋ชจ๋ ํ๋ก์ ํธ ๋ฐ ์ฃผ์ ์ค์ ์ด ๋ณด์กด๋ฉ๋๋ค.
๋ค์ ์ํฌ๋ฆฟ ๋ณ์๋ฅผ ์์ฒด ํธ์คํ ๋ Postgres ์ธ์คํด์ค์ ๋ง๊ฒ ์ค์ ํ์ธ์. Spaces ์ ์์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋น์ค์ ๋ํ ์ ๋ณด๊ฐ ๊ณต๊ฐ๋ก ๋์ถ๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด, ์ด๋ฌํ ๊ฐ์ ์ํฌ๋ฆฟ์ผ๋ก ์ค์ ํ๋ ๊ฒ์ ๊ฐ๋ ฅํ ๊ถ์ฅํฉ๋๋ค.
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์ ํ์ฑํ๋ ๋ฐ์ดํฐ ์ ์ฅ์๋ local๋ฟ์ ๋๋ค. Space๊ฐ ๋ฆฌ์ ๋๋ฉด ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์์ค๋ฉ๋๋ค. ์๊ตฌ ์ ์ฅ์ ํ์ฑํํ๋ ค๋ฉด cloud storage connector๋ฅผ ํ์ฑํํด์ผ ํฉ๋๋ค. ์ ์ ํ cloud connector๋ฅผ ์ ํํ๊ณ ํด๋น secrets๋ฅผ ๊ตฌ์ฑํ์ธ์.
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๋ฅผ ์์ํ๋ ค๋ฉด, ๊ฐ์ฑ ๋ถ์ ์ด๋ ธํ ์ด์ ํ๋ก์ ํธ ์์๋ฅผ ๋จ๊ณ๋ณ๋ก ์๋ดํ๋ Label Studio โZero to Oneโ ํํ ๋ฆฌ์ผ์ ํ์ธํด ๋ณด์ธ์. Label Studio ๋ฐ Label Studio ์ปค๋ฎค๋ํฐ์ ๋ํ ์ ์ฒด ๋ฆฌ์์ค๋ Label Studio ํ ํ์ด์ง์์ ์ฐพ์ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ์ ์ฒด ๋ฌธ์, ๋ค์ํ ์ด๋ ธํ ์ด์ ์ธํฐํ์ด์ค๋ฅผ ์ํํด ๋ณผ ์ ์๋ ์ธํฐ๋ํฐ๋ธ ํ๋ ์ด๊ทธ๋ผ์ด๋, ๊ทธ๋ฆฌ๊ณ Label Studio Slack ์ปค๋ฎค๋ํฐ์ ๊ฐ์ ํ ์ ์๋ ๋งํฌ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
Update on GitHub