포스트

Unity3D 커스텀 환경을 Excutable로 빌드하고 더 많은 인스턴스로 빠르게 훈련하기

#환경빌드해서_훈련하기 #유니티 #unity

이번 포스팅은 CLI 창에서 CLI 인자로 env의 개수를 늘려 멀티 인스턴스로 훈련하는 방법을 다루겠습니다. *먼저 주의할 점은, 바로 지난 포스팅에서 다루었던 TrainingAreaReplicator가 작동하지 않으니 아래와 같이 직접 수 작업으로 TrainingArea를 복제해줍시다.

빌드 세팅에 들어가서 필요한 세팅을 하고 빌드를 합니다.

Scene체크, Debug log를 보기 위해 Dev 모드 체크

Excutable학습환경 빌드 완료.

위의 exe 실행파일을 눌러보면 아래와 같이 우리가 만든 Scene이 나옵니다. 훈련된 모델을 넣지 않았고, 훈련모드이기 아니기 때문에 아무런 움직임이 없어야 정상입니다. 게임을 다시 닫습니다.

이제 CLI 명령어로 훈련을 해보겠습니다. 그에 앞서 훈련에 필요한 Config 폴더를 Copy해서 가져옵니다.


이제 Exe파일이 있는 Root에서 CLI 파이썬 훈련 명령어를 입력하겠습니다. Excutable Environment를 병렬로 2개만 생성해서 훈련해보겠습니다.

mlagents-learn {yaml경로} –run-id={훈련id} –env {Scene경로} –num-envs {병렬개수}

1
mlagents-learn config/rollerball_config.yaml --run-id=RollerBall_multi_concurrent --env "Test_Concurrent_learning.exe" --num-envs 2

넣는 인자에 대한 설명은 아래와 같습니다. 그 외에는 mlagents-learn –help 를 입력하시면 볼 수 있습니다.

–env ENV_PATHPath to the Unity executable to train (default: None)
–num-envs NUM_ENVSThe number of concurrent Unity environment instances to collect experiences from when training (default: 1)

그런데 빌드 세팅에서 Visible in BackGround를 false로 해놓으니 아래와 같이 창을 열수는 없네요. 그래도 2개 창이 생성되어 있는 것은 확인이 가능합니다. ^.ㅡ

만약 이런 창이 생기는 것도 싫다면 아래와 같이 –no-graphics 인자도 넣어주시면 됩니다. 여기서 아래 표에 담고 비교하지는 않지만, 제가 해보니 더 빨라집니다. ㅎㅎ(10만 step에 150초).

| –no-graphics | Train without any graphics window. | | — | — |


그럼 지난번에 유니티Editor에서 직접 했었던 훈련과 비교해볼까요?

학습방법Agent 수 / Environment인스턴스 복제10만 Step 걸린 시간비교(걸린 시간)
유니티 에디터9없음266초-
Excutable exe 실행파일92배178초0.67 배


여기까지 우리가 직접 많은 학습 환경을 빌드해서 별도의 Excutable파일로 만들고, 그걸로 훈련하는 것을 진행해보았습니다. 이 방법의 이점은, 실행파일과 파이썬 환경만 있다면 유니티 에디터를 설치하지 않아도 서버에서 마음껏 훈련이 가능합니다.

감사합니다.

sticker

참고자료) https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/docs/Training-ML-Agents.md#training-using-concurrent-unity-instances https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/docs/Learning-Environment-Executable.md https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/docs/Learning-Environment-Create-New.md


이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.