Native Body Composition - kimjooyoon/meta-ontology-go GitHub Wiki
์กฐ๋ฆฝํ ํ๋ ๋ณธ๋ฌธ์ ์ฐ๊ฒฐํด์ ์คํํ๊ธฐ
Gooo์ bind๋ ํ ํ๋์ ๊ฒฐ๊ณผ๋ฅผ ๋ค๋ฅธ ํ๋์ ์
๋ ฅ์ ์ฐ๊ฒฐํฉ๋๋ค. body-compose๋
๊ทธ ์ฐ๊ฒฐ์ ๋ฐ๋ผ ์ค์ ํจ์ ๋ณธ๋ฌธ์ ์กฐ๋ฆฝํ๊ณ , ํ๋์ Go ํ๋ก๊ทธ๋จ์ผ๋ก ๋น๋ํ ๋ค
๋ฐ๋ก ์คํํฉ๋๋ค. ์์ ์
๋ ฅ์ ์ด๋ฆ์ผ๋ก ์ง์ ํ๊ณ ๊ฐ ๋จ๊ณ์ ์ค์ ์
๋ ฅ๊ณผ ์ถ๋ ฅ์
๊ธฐ๋กํฉ๋๋ค. ์์ฑํ ๋ถํ์ ์ฐ๊ฒฐ์ ์ ๊ฝ์ ์ ์ฒด ๋์์ ํ์ธํ๋ ๊ณผ์ ์
๋๋ค.
ํ์ฌ ๊ณต๊ฐ ์ค์น๋ณธ์ 0.6.22-dev ์์ค d3b44fc6ยทGo1.27.2ยทSDK v0.2.26์
๋๋ค.
๊ฐ๋ฐ ์์ค 485ef8ed์ gooo-dev๋ ์
๋ ฅ๋ง ๋ฃ๊ณ ๊ด์ธกํ ๋ค ์ ์ฅ ์์ฑ๋ฌผ์
๊ธฐ๋๊ฐ์ผ๋ก ๊ฒ์ฌํ๋ body-compose --inputs๋ฅผ ์ ๊ณตํฉ๋๋ค.
์
๋ ฅ๋ถํฐ ์คํํ๊ธฐ์์ ์์ํ ์ ์์ต๋๋ค.
์ฌ๋ฌ ์
๋ ฅ์ ํฉ๋ฅ์ ์ผ๋ถ ์
๋ ฅ๋ง ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์
์ ์
๋ ฅ ํฉ๋ฅ ๊ฐ์ด๋์์ ๋ฐ๋ผ ํ ์ ์์ต๋๋ค.
ํ์ฌ ์ํ ยท ๊ณ ์ ์์ค์์ ์์ํ๊ธฐ.
์ด ํ์ด์ง์ ์๋ ๊ด์ธก์ ์์ main 2d1ce2d07eaa29f00a412cbaa22c96008f0b7250์์
์์งํ์ต๋๋ค. ๊ฐ๋ฐ #1219ยทmain #1220์ ์ ์ฒด CI์ ๋
๋ฆฝ ์ฆ๊ฑฐ ํ์ธ ํ
๋ณํฉํ๊ณ CLIยท์คํ๊ธฐ๋ฅผ ํจ๊ป ์ค์นํ ๊ธฐ๋ก์
๋๋ค.
์ผ๊ณฑ ํ๋์ ์์
์ ์ ์กฐ๋ฆฝ โโโ ๋ฒ์ ์ ํ โโโ ์ฐธ๊ฑฐ์ง ํ๋จ โโโ ๋ถ์
โโโโโโโโ ๋ ๋ฐฐ๋ก ๋ง๋ค๊ธฐ
๋ณ๋ ํ
์คํธ ์
๋ ฅ โโโ ๋๋ํ ๋ถ์ด๊ธฐ โโโ ๊ฐ์ ๋ฌธ์์ธ์ง ํ๋จ
๋ ํ๋์ ์ ์ ๋ณธ๋ฌธ์ assembling ์ ํยทํ์ ์๋ยท์ ํ ์์๋ก ์กฐ๋ฆฝํฉ๋๋ค.
๋๋จธ์ง๋ Gooo์ ์์ฑํ ์ผ๋ฐ ๋ณธ๋ฌธ์ด๋ฉฐ IntegerยทBooleanยทText ํ์
์ ์ ์ธํ
์ฐ๊ฒฐ๋ก ์ ๋ฌํฉ๋๋ค. ๋ชจ๋ธ์ ํ ์์ฒญ์์ ํ ๋ฒ ๋ก๋ํ๊ณ ๊ฐ ์กฐ๋ฆฝ์ ํ ๋ฒ ํ๋จํฉ๋๋ค.
๋ชจ๋ธ์ ์๋ตํ๋ฉด ๊ฒฐ์ ๋ก ์ ์ผ๋ก ํ์ํฉ๋๋ค.
์ด๋ฒ ๊ด์ธก์ ์์ฒด ๋ชจ๋ธ์ ์ฐ๊ฒฐํ๋ ค๋ฉด ๊ณต๊ฐ ๋ชจ๋ธ ์ ์ฅ์์์ ๋ ํ์ผ๋ง ๋ฐ์ต๋๋ค. ๋ฉํ๋ฐ์ดํฐ 1,215๋ฐ์ดํธ์ FP32 ๊ฐ์ค์น 74,624๋ฐ์ดํธ์ด๋ฉฐ, ์๋ ๊ณ ์ ๋ฆฌ๋น์ ์ ๋ฉํ๋ฐ์ดํฐยท๊ณต๊ฐ ๊ฐ์ค์น ์ง๋ฌธ์ด ์ค์ ์ฌ์ฉํ ํ์ผ๊ณผ ๊ฐ์ต๋๋ค.
hf download asketeddy/gooo-three-choice-feedback-tiny-v1 \
models/set-feedback/fp32/model.json \
models/set-feedback/fp32/weights.bin \
--revision 24238ca67048b36bc305731799985271bb752dd1 \
--local-dir gooo-models
gooo body-compose \
--source examples/body-codegen/native-composition.gooo.fixture \
--cases examples/body-codegen/native-composition-cases.json \
--model gooo-models/models/set-feedback/fp32/model.json \
--out /tmp/gooo-model-composition
์ด๋ฒ์ ์ด ๊ณต๊ฐ ๋ชจ๋ธ.
๋ฉํ๋ฐ์ดํฐ์ ์ธ์ ํ weights.bin์ ํจ๊ป ๋ก๋๋ค.
gooo body-compose \
--source examples/body-codegen/native-composition.gooo.fixture \
--cases examples/body-codegen/native-composition-cases.json \
--out /tmp/gooo-composition
์ ์ถ๋ ฅ ํด๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. original.gooo, cases.json, composition.json,
runtime.json, realized.gooo, generated.go, main.go, go.mod๊ฐ ์ ์ฅ๋ฉ๋๋ค.
๋ง์ง๋ง ์ธ ํ์ผ์ด ์ค์ ์คํ ํ๋ก๊ทธ๋จ์
๋๋ค. main.go์์ ์ฐ๊ฒฐ๋ณ ๊ฐ์ ์ ๋ฌ์
ํ์ธํ ์ ์๊ณ , realized.gooo๋ ๋ค์ ์กฐ๋ฆฝ์ ์
๋ ฅ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ ์ฅ๋ ์กฐ๋ฆฝ ๊ธฐ๋ก์ ๋ค๋ฅธ ์์๋ก ํ์ธํ๋ ค๋ฉด:
gooo body-compose \
--source /tmp/gooo-composition/original.gooo \
--composition /tmp/gooo-composition/composition.json \
--cases /tmp/gooo-composition/cases.json
์ด ๊ณผ์ ์ ์ถ๊ฐ ๋ชจ๋ธ ํธ์ถ ์์ด ๋ชจ๋ ์ ํ ๋ณธ๋ฌธ๊ณผ ์ฐ๊ฒฐ ์ฝ๋๋ฅผ ์ฌ๊ตฌ์ฑํ ๋ค ์๋ก ์ปดํ์ผํ๊ณ ๋ ๋ฒ ์คํํฉ๋๋ค. ๊ธฐ์กด ๋ชจ๋ธ ํ๋จ ๊ธฐ๋ก๊ณผ ์ด๋ฒ ์คํ์ ๋๋์ด ๋จ๊น๋๋ค.
์์ ์ฑ ์ฝ๊ธฐ
{
"schema": "gooo/body-composition-cases/v1",
"cases": [{
"inputs": {"Assemble": -8, "Decorate": "gooo"},
"expected": {"Clamp": 10, "Invert": false, "Same": true}
}]
}
์
๋ ฅ์ ์ฐ๊ฒฐ์ ๋ฐ์ง ์๋ ๋ชจ๋ ์์ ํ๋์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฏธ ์ฐ๊ฒฐ๋ ์
๋ ฅ์
์ ํ๋์ ์ค์ ๊ฒฐ๊ณผ๋ก๋ง ๋ฐ์ต๋๋ค. ๊ธฐ๋๊ฐ์ ์์ยท์ค๊ฐยท๋ง์ง๋ง ํ๋ ์ด๋์๋
์ ์ ์ ์๊ณ , finite_passed / finite_total์ ์ ๊ณตํ ๊ธฐ๋๊ฐ์ ์
๋๋ค.
๊ธฐ๋๊ฐ์ ์ ์ง ์์ ์ค๊ฐ ๊ฒฐ๊ณผ๋ ๊ด์ธกํ์ง๋ง ์ ํ๋ ์ ์๋ฅผ ์ฃผ์ง ์์ต๋๋ค.
stage๋ ๊ฒ์ฌยท๋น๋ยท์คํ์ ์งํ ์ํ๋ฅผ, finite_passed์ finite_total์
์ ๊ณตํ ๊ธฐ๋ฅ ์์์ ์ถฉ์กฑ ์๋ฅผ ๋ํ๋
๋๋ค. runtime_replayed๋ ๋ ๋ฒ์ ์ค์
์คํ์ด ๊ฐ์ ๊ฐ์ ๋๋ค๋ ๊ธฐ๋ก์
๋๋ค. ์์๊ฐ ์คํจํด๋ ๊ทธ ๊ฐ์ ๊ด์ธกํ๊ณ ์ ์
์ฌํํ๋ค๋ฉด ์คํ ๋จ๊ณ๊ฐ ์๋ฃ๋ ์ ์์ต๋๋ค. ๋ค์ ์๋๋ฅผ ๊ณ ๋ฅผ ๋๋ ์ด ํญ๋ชฉ๋ค์
ํจ๊ป ์ฝ์ต๋๋ค.
์์ ์์๋ ์ผ๊ณฑ ์ ๋ ฅ ์กฐํฉ์ ์ผ๊ณฑ ํ๋์ ๊ธฐ๋๊ฐ์ ๊ฐ๊ฐ ์ฃผ์ด 49/49๋ฅผ ํ์ธํ์ต๋๋ค. ๊ธฐ๋๊ฐ ํ๋๋ฅผ ์ผ๋ถ๋ฌ ๋ฐ๊พธ๋ฉด ์ค์ ์คํ์ ์ ์ ์ฌํ๋๋ฉฐ 48/49๊ฐ ๊ธฐ๋ก๋ฉ๋๋ค. 16๊ฐ ํ๋์ ์ฐ๊ฒฐํ ๊ฒ์ฌ์์ ๋ง์ง๋ง ๊ฐ ํ๋๋ง ์ฃผ๋ฉด ๋ถ๋ชจ๋ 1์ ๋๋ค.
์ ๋ ฅ์ ์์ฑํ ๋
- ๋ชจ๋ ์์ ํ๋์ ์
๋ ฅ์ ์ด๋ฆ์ผ๋ก ์ ์ต๋๋ค.
0,false, ๋น ๋ฌธ์์ด๋ ์ง์ ์ ์ต๋๋ค. - ์ฐ๊ฒฐ์ ๋ฐ์ ํ๋์ ์ ๋จ๊ณ์ ์ค์ ๊ฐ์ ์ฌ์ฉํฉ๋๋ค.
inputs์์ ๊ทธ ๊ฐ์ ๋ฎ์ด์ฐ์ง ์์ต๋๋ค. - Integer๋ ์ด ์คํ ํ๋กํ์์ ์ ํํ int64๋ก ์ฝ์ต๋๋ค. ์์์
null์ ์ ๋ ฅ ์ค๋ฅ๋ก ๊ธฐ๋ก๋ฉ๋๋ค. - Text๋ ํ๊ตญ์ดยท์ด๋ชจ์งยท์ค๋ฐ๊ฟ์ ๊ทธ๋๋ก ์ ๋ฌํฉ๋๋ค. JSON์ ์ค๋ฐ๊ฟ์
\n์ผ๋ก ์ ์ต๋๋ค. - ๊ธฐ๋๊ฐ์๋ ํ์ธํ ํ๋๋ง ์ ์ ์ ์์ต๋๋ค. ์ ์๋ฅผ ๋ฐ์ ์ต์ ํ ํ๋์ ์ง์ ํฉ๋๋ค.
Integer ์ฐ์ฐ์ ์์ฑ๋ Go์ int64 ์คํ์ ๋ฐ๋ฆ ๋๋ค. ์ ์์ ์ ์ต๋ ์ ์ ์ ๋ ฅ์ ๋บ์ ๊ณผ ๊ณฑ์ ์ ๊ฒฝ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋๋ก ๊ธฐ๋๊ฐ์ ๊ธฐ๋กํฉ๋๋ค. ๋จ์ ์ํ์์ ๋ฌดํ ์ ์๋ก ํด์ํ๊ธฐ๋ณด๋ค ์ค์ ์ ํํ ์คํ ํ์ ๊ณผ ์์๋ฅผ ํจ๊ป ์ฝ์ต๋๋ค.
์ค์ ์์ฒด ๋ชจ๋ธ ๊ด์ธก
ํ ํ๋ก๊ทธ๋จ์ ๋ชจ๋ธ/๊ฒฐ์ ๋ก ๊ฒฝ๋ก๋ฅผ ๊ฐ๊ฐ ์ธ ๋ฒ ์ด์ด ์์ฑํ๊ณ , ๊ฐ ์ ์ฅ ๊ธฐ๋ก์ ๋ณ๋๋ก ์ฌ์คํํ์ต๋๋ค. ์ ์์ฑ ์ฌ์ฏ ๊ฑดยท์ ์ฅ ์ฌ์คํ ์ฌ์ฏ ๊ฑด, ์ ํ ๊ธฐ๋๊ฐ 588/588ยท์ค๊ฐ ๊ฒฐ๊ณผ 588๊ฐยท์ฐ๊ฒฐ ์ ๋ฌ 420๊ฐยท์ค์ ์คํ 24ํ์ ๋๋ค. ์ค์ ๋ชจ๋ธ ํ๋จ์ ์ด ์ฌ์ฏ ๋ฒ, ์ ์ฅ ์ฌ์คํ์ 0๋ฒ์ ๋๋ค. ๋ ๊ฒฝ๋ก์ ์ฝ๋์ Gooo๊ฐ ์๋ก ๋ค๋ฅด๋ฉฐ ๊ฐ ๊ฒฝ๋ก ์์์๋ ์ธ ์์ฑ ์ดํ์๋ ์ ์ง๋์ต๋๋ค.
์ฒซ ๋ชจ๋ธ ํ๋ณด๋ ์ ์ ์กฐ๋ฆฝ 0/6ยท๋ฒ์ ์ ํ 1/3์ผ๋ก ์คํจํ์ต๋๋ค. ๋ชจ๋ธ์ ๋ค์ ์์์ ์ ํ ํ ์คํธ ํ์์ด ์ฃผ์ด์ง ์์๋ฅผ ์ถฉ์กฑํ๊ณ , ์ ํ์ต์ ํ์ง ์์์ต๋๋ค. ์ด ๊ธฐ๋ก์ ํ ์์ฑ ํ๋ก๊ทธ๋จ์ ๋ฐ๋ณตํ ๊ด์ธก์ ๋๋ค.
| ์กฐ๊ฑด | ์กฐ๋ฆฝ ์ค์๊ฐ | ์ ์ฒด ๋ช ๋ น ์ค์๊ฐ |
|---|---|---|
| ๋ชจ๋ธ ์ ์์ฑ | 13.527ms | 374.219ms |
| ๊ฒฐ์ ๋ก ์ ์์ฑ | 13.011ms | 346.143ms |
| ๋ชจ๋ธ ์ ์ฅ ๊ธฐ๋ก ์ฌ์คํ | ์ถ๊ฐ ์์ฑ 0ํ | 469.090ms |
| ๊ฒฐ์ ๋ก ์ ์ฅ ๊ธฐ๋ก ์ฌ์คํ | ์ถ๊ฐ ์์ฑ 0ํ | 337.886ms |
๊ฐ๊ฐ ์ธ ๊ด์ธก์ด๋ฉฐ ๊ณ ์ ์์ยท๊ธฐ์กด Go ์บ์๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ๋ช ๋ น ์ต๋ RSS๋ 81.03โ83.30MiB์ด๋ฉฐ Go ๋น๋ ์์๋ ํฌํจํฉ๋๋ค. ๋ชจ๋ธ ํ ์๋ 74,624๋ฐ์ดํธ์ ๋๋ค. ๋ช ๋ น CPU ์๊ฐ์ผ๋ก ํ์ฐํ ํ ์ฝ์ด ์ฌ์ฉ๋ฅ ์ค์๊ฐ์ ์กฐ๊ฑด๋ณ 69.32โ75.11%์ด๋ฉฐ ์ ์ฒด ์ปดํจํฐ์ CPU ์ฆ๊ฐ๋์ ๊ด์ธกํ์ง ์์์ต๋๋ค. ์ ์ฅ ์ฌ์คํ์ด ๋ ๋๋ฆฐ ์กฐ๊ฑด๋ ๊ทธ๋๋ก ๊ณต๊ฐํ๊ณ ์๋ ๊ฐ์ ํ๋จ์ ์ถ๊ฐ ๋น๊ต์ ๋จ๊น๋๋ค.
main ์ค์น ํ ๋ค์ ํ์ธํ ๊ฒฐ๊ณผ
์ ์ค์น๋ณธ์์ ๊ฐ์ ์ด๋ ์ ์ด๋ฅผ ๋ค์ ์คํํด 588/588ยท์ค์ ํ๋จ ์ฌ์ฏ ๋ฒยท ์คํ 24ํ๋ฅผ ํ์ธํ์ต๋๋ค. GoooยทGoยท์ฐ๊ฒฐ ์ฝ๋ ์ง๋ฌธ๊ณผ ๊ฐ ์ ํ ๊ฒฐ๊ณผยทํธ์ถ ์๋ ๊ฐ๋ฐ ํ๋ณด์ ๊ฐ์ต๋๋ค. ๋์ ๋ ์์ฒญ์ 98/98๋ก ์ ์ ์ข ๋ฃํ์ต๋๋ค. ์ถ๊ฐ ์ธ ์ ๋ ฅ์ int64 ์ต์๊ฐยท์ ๊ฒฝ๊ณ๊ฐยท์ค๋ฐ๊ฟ ํ ์คํธ๋ฅผ ํฌํจํ๋ฉฐ ๋ ๊ฒฝ๋ก์์ 42/42์ ๋๋ค. ๊ธฐ๋๊ฐ ํ๋๋ฅผ ํ๋ฆฌ๊ฒ ์ค ๋ณ๋ ์คํ์ 48/49ยท์ ์ ์ฌํ์ ๊ธฐ๋กํ์ต๋๋ค.
์ค์น ํ ์กฐ๋ฆฝ ์ค์๊ฐ์ ๋ชจ๋ธ 36.933msยท๊ฒฐ์ ๋ก 32.216ms, ์ ์ฒด ๋ช ๋ น ์ค์๊ฐ์ ์กฐ๊ฑด๋ณ 721.523โ778.166ms, ์ต๋ RSS๋ 81.05โ82.78MiB์์ต๋๋ค. ๊ฐ ์ธ ๋ฒ์ด๋ฉฐ ๊ฐ๋ฐ ํ๋ณด ๊ด์ธก๋ณด๋ค ์๊ฐ์ด ๋์์ต๋๋ค. ๋ ์ธก์ ์ ์์ ์ด ๋ค๋ฅด๊ณ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ๋ ์คํ ์ค์ธ ํ๊ฒฝ์ด๋ฏ๋ก ์๋ ๋ณํ์ ์์ธ์ ๋ถ๋ฆฌํ์ง ์์์ต๋๋ค. ์คํ ํ ๋ณ๋ ๋ CPU ์ค๋ ์ท์ ์ ์ฒด ์ฌ์ฉ๋ 26.47%ยท17.70%์์ต๋๋ค. ๋ชจ๋ธ์ ๋ฐ๋ฅธ CPU ์ฆ๊ฐ๋์ ๊ณ์ฐํ ์คํ ์ ยท์ค ๋์กฐ๊ตฐ์ ์์ต๋๋ค. ์๋ณธ์ Hugging Face์ ์ค์น ๋ถ๋ก์ ๋จ๊น๋๋ค.
๋ฒ์์ ๋ค์ ์์
์ด ํ์ด์ง์ ์ค์น ๊ด์ธก์ 2..16๊ฐ ํ๋, ๊ฐ ํ๋์ ์ ๋ ฅยท๊ฒฐ๊ณผ, ๋ช ์์ ์ฐ๊ฒฐ, ์ฌ๋ฌ ์์ ์ ๋ ฅ๊ณผ ๊ฒฐ๊ณผ์ ๋ถ๊ธฐ ์ ๋ฌ์ ์ง์ํฉ๋๋ค. ํ๋ ์์๋ ํ์ ๊ณํ์ ๊ฒฐ์ ๋ก ์ ์์ ์์์ด๋ฉฐ, ์ค๊ฐ ๊ฐ์ ํ์ ์ด ์ ํด์ง ์ง์ญ๊ฐ์ผ๋ก ์ ๋ฌํฉ๋๋ค. ์ค๋น์๋ 16์นธ ํ๋ ๋ฐฐ์ด, ์คํ ์ ๋ ฅยท๊ด์ธก์๋ ๊ณ ์ ํญ ๋ฐฐ์ด์ ์ฌ์ฉํฉ๋๋ค. ์คํ ์ค ์์กด์ฑ ๋๊ธฐ๋ ์์ต๋๋ค.
์ ์ ์กฐ๋ฆฝ์ ํ์ฌ์ ์ํ ๋ชจ๋ธ ๊ณ์ฝ์ ์ฌ์ฉํฉ๋๋ค. BooleanยทText๋ ์ผ๋ฐ ๋ณธ๋ฌธ์ ๊ฒ์ฌ์ ์ฐ๊ฒฐ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฌ๋ฌ ์ ๋ ฅ์ ํฉ๋ฅ๋ ํ์ ๊ฐ๋ฐ๊ณผ ์์ฑ ๊ฐ์ด๋๋ก ์ด์ด์ก์ต๋๋ค. ๊ธฐ๋ก๊ฐ ํ์ , ํธ์ถยท๋ฐ๋ณต, ํธ์ถ์ ๋๋ ํผ๋๋ฐฑ์ ๋ค์ ์ธ์ด ๊ธฐ๋ฅ์ผ๋ก ๋จ์ ์์ต๋๋ค. ์ด ํ์ฅ์ ์ค์ ๋ณธ๋ฌธ ์ฐ๊ฒฐ์ ์ ์ง์ํค๋ฉฐ ์ ์ฒด ๋๋ฉ์ธ ์ ๋ฌ ์ด์874์ ๋จ์ ๋ฒ์๋ ํจ๊ป ๊ธฐ๋กํฉ๋๋ค.
์๋ณธ๊ณผ ์ฌํ ยท ์ปดํ์ผ๋ฌ ์ฌ์ฉ๋ฒ๊ณผ ๊ฒฝ๊ณ ยท ์ ์ธ ์์ ๋ณธ๋ฌธ ์กฐ๋ฆฝ.