개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
Training a model for DeepRacer involves getting a lot of data and then while you can ignore it, you can also analyze it and use for your own benefit.
Training a model for DeepRacer involves getting a lot of data and then while you can ignore it, you can also analyze it and use for your own benefit.
DeepRacer 모델을 교육하려면 많은 양의 데이터를 가지고 분석한 후 여러분의 모델의 성능향상을 위해 사용하는 것도 필요합니다.
You can spend an hour watching the stream as your car trains and observing its behaviour (and I've done it myself before), but you might not have the time to do this. Also, you might blink, you know? Finally, if your car is fast, like really fast, it could do all 5 evaluation laps in one minute. First you wait 4-7 minutes for the evaluation to start, then you see it take 4-7 minutes to stop. Video? Sorry, you've missed it.
차를 한 시간 훈련하는 동안 스트림을 보면서 그 차의 행동을 관찰할 수도 있습니다 (예전엔 저도 이렇게 했습니다.) 하지만 항상 이렇게 시간이 충분이 있지는 않을 겁니다. 또한 당신이 눈을 깜빡이는 동안 무엇인가를 놓칠 수 있죠. 당신의 차가 정말 정말 빠르다면 1분 안에 5번의 평가를 끝낼 수도 있습니다. 일단 평가작업이 시작하기 까지 4~7분을 기다려야 합니다. 그리고 나서 완료 될 때까지 4~7분을 기다립니다. 비디오요? 안 됐지만 당신을 그것을 볼 기회를 놓쳤습니다.
Yeah, I'm stretching this a bit too far. Having data you can plot, compile, transform and replay over and over again will always be a handy solution. That's why I love what guys at Amazon have shared inthe DeepRacer workshop repository (link takes you to GitHub).
네, 제가 설명을 질질 끌고 있네요. 데이터를 가지고 플롯, 컴파일, 변환 및 재생하는 방법이 훨씬 더 편리할 겁니다. 그래서 아마존의 사람들이 DeepRacer 워크샵 저장소 (GitHub로 연결되는 링크)를 공유 하는 것을 저는 좋아합니다.
Log analysis
While we're here, I hope you'll like this post. Once you're done reading, I'd like to recommend reading about what I have come up with based on this tool in"Analyzing the AWS DeepRacer logs my way"- it might help you and give a couple ideas for your own modifications.
이 글이 당신에게 도움이 되길 바랍니다. 일단 읽고 나면, "AWS DeepRacer 로그 분석하기"에서이 도구를 기반으로 작성한 내용을 읽어 보는 것을 추천합니다. 그 글을 읽으면 여러모로 도움이 될 수 있으며 자신 만의 modifications를 위한 몇 가지 아이디어를 얻을 수 있을 겁니다.
The tools provided include a couple functions to help working with the data, track data, a Jupyter notebook that leads you through the analysis and some sample data.
제공된 도구에는 데이터 작업, 데이터 추적, 분석 및 샘플 데이터를 안내하는 Jupyter 노트북을 지원하는 몇 가지 기능이 포함되어 있습니다.
It lets you assemble aggregated information about your car's performance, plot its behaviour on the track, plot reward values depending on the car's location during evaluation, plot the route during the evaluation (including the virtual race evaluation), analyse the behaviour depending on the visual input, detect which pieces of image matter to the car the most.
그것은 당신이 다음과 같은 정보를 집계해서 assemble 하도록 합니다. '자동차의 퍼포먼스', 트랙에서의 행동에 대한 플롯', '평가 기간 동안 자동차의 위치에 근거한 reward 값에 대한 픞롯', '평가 기간 동안 (virtual race evaluation을 포함) route에 대한 plot', 'visual input에 근거한 행동 분석', '자동차에 어떤 image matter들이 가장 많이 탐지 되는지' 등등.
I may have lost my skills in statistics and might not be able to predict future trends based on the time series anymore (I still remember that the classic linear regression model is calculated with ((X'X)^(-1))X'y, I still have dreams of econometrics lectures with Professor Osiewalski), but I can appreciate good statistics when I see them. The guys at Amazon have provided an excellent tool that I have used before to present some images to you. I didn't however know what the ipynb file provided with the tools was. I mean, I managed to open it (GitHub comes with a viewer), but it wasn't until the AWS Summit that I actually installed Jupyter Notebook and understood what power it gives me. Nice!
나는 통계에서 나의 기술을 잃어 버렸을지도 모른다. 그리고 더 이상 time series에 기초한 미래의 추세를 예측할 수 없을지도 모른다. (나는 고전적인 linear regression model이 (X'X) ^ (- 1) X ' y로 계산된다는 것을 아직 기억하고 있다. 나는 아직 Osijalski 교수의 econometrics 강의를 꿈꾸고 있다.) 그러나 나는 좋은 통계를 볼 때 그것에 고마와 한다. 아마존의 사람들은 내가 당신에게 이미지를 보여주기 위해 사용했던 훌륭한 도구를 제공했습니다. 그러나 ipynb 파일이 제공 한 도구가 무엇인지는 알지도 못했습니다. 내 말은, 나는 그것을 오픈하기는 했지만 (GitHub에는 뷰어가 포함되어 있음), 내가 실제로 Jupyter Notebook을 설치하고 그것이 가지고 있는 강력함을 이해하게 된 것은 AWS Summit이었다. Nice!
Summit
Jupyter Notebookis a web application that provides an editor for files containing formatted text, code and its latest results. It can be either hosted or run locally. AWS provides a solution to view notebooks within the SageMaker, but if you tend to leave stuff lying around like me, I wouldn't recommend this solution. The pricing of it matches its usefulness and I tell you, this is a really, really useful tool. I'm exaggerating here, but it does add up if you leave the EC2 running.
Jupyter Notebook은 형식이 지정된 텍스트, 코드 및 그것들의 최신 결과를 포함하는 파일에 대한 편집기를 제공하는 웹 application입니다. 호스팅되거나 로컬에서 실행될 수 있습니다. AWS는 SageMaker에서 노트북을 볼 수있는 솔루션을 제공하지만 나처럼 물건을 놓고 다니는 경향이 있다면이 솔루션을 권장하지 않습니다. 나는 그것이 가성비 면에서 좋다고 생각한다. 그것은 정말 정말 정말 유용한 툴이다. 조금 과장하는 면이 있지만 만일 당신이 EC2를 달리게 내버려두면 그것은 add up된다.
The code can be in one of many languages, python included. I think more interesting stuff will come out of actually using the notebook.
코드는 파이썬을 포함해 다른 많은 언어로 작성될 수 있다. 실제로 노트북을 사용하면 훨씬 더 흥미로운 사실들을 만나보게 될 것이다.
Installation
To install it you need to be familiar with either Python or Anaconda. You will find theinstallation instructions on their website. I'll leave you with this, I am assuming that if you're here and still reading, you know how to install a Python interpreter and how to install modules.
설치하려면 Python 또는 Anaconda에 익숙해야합니다. 웹 사이트에서 설치 지침을 찾을 수 있습니다. 일단 파이썬 인터프리터를 설치하는 방법과 모듈을 설치하는 방법을 알고 있다고 가정하겠습니다.
익숙하다면 당신은 또한 Docker를 사용할 수 있습니다. 이 문서 (Jupyter 문서로 이동)는 이를 수행하는 방법을 설명합니다. Tensorflow notebook docker image는 모든 것을 설치하지 않고도 로그 분석 노트북을 실행하는 데 가장 가까운 이미지라고 생각합니다.
Note: I am referring to instructions which in most cases contain details for Linux/Mac/Windows. I use Linux and so might miss the shortcomings of how other systems are described, but they do look well written. I am also assuming that you have some level of confidence working either with Python/pip or Anaconda/conda. In case of Python I use Python 3 and I recommend using it. It's time for Python 2.7 to go.
참고 : 대부분의 경우 Linux / Mac / Windows에 대한 세부 정보가 포함 된 지침을 언급하고 있습니다. 나는 리눅스를 사용하기 때문에 다른 시스템이 어떻게 기술되는지에 대한 단점을 놓치지 만 잘 작성된 것처럼 보인다. 나는 또한 당신이 Python / pip 또는 Anaconda / conda로 어느 정도 자신감을 가지고 있다고 가정하고 있습니다. 파이썬의 경우에는 파이썬 3을 사용합니다. 파이썬 2.7이 나올 때입니다.
Project structure
In thelog-analysisfolder you will find a couple things: log-analysis 폴더에는 다음과 같은 것들이 있습니다.
intermediate_checkpoint- folder for data used in some of the analysis
logs- folder for the logs
simulation_episode- you'll be downloading images from the simulation to understand what actions the car is likely to take
tracks- folder for the tracks points
DeepRacer Log Analysis.ipynb- the notebook itself
cw_utils.py- utility methods for downloading of logs
log_analysis.py- utility methods for the analysis
Dependencies to run log-analysis
Before we continue with running the notebook itself, let's have a look at the required dependencies that you can install using pip:
노트북을 계속 실행하기 전에 pip를 사용하여 설치할 수있는 관련된 필수 요소들을 살펴 보겠습니다.
boto3 - python library for interacting with AWS
awscli - not really needed, but useful - I used it to runaws configureand set up default access to AWS. Once I've done this, I didn't have to provide credentials in code.Click here for installation instructions, thenclick here for configuration instructions. Remember DeepRacer region isus-east-1.Click here for instructions to set up an IAM user. The roles listed in a page linked there do not provide permissions needed to get a list of streams in a log group, I've learned this one is part of role CloudWatchLogFullAccess or something like that. This is somewhat excessive so you might just want to apply permissionDescribeLogStreams
numpy, tensorflow, PIL, glob - analysis of actions probability (picture to action mapping)
cv2, numpy, tensorflow, glob - analysis of an image heatmap (what the car cares about when processing the picture)
Some of those will already be available in your Python/Anaconda bundle or venv evironment. Others you should install yourself.
그 중 일부는 이미 Python / Anaconda 번들 또는 venv 환경에서 사용할 수 있습니다. 다른 것들은 직접 설치해야합니다.
I may write a bit more about some of them at some point.
나는 그들 중 일부에 대해 좀 더 자세히 기술 할 것이다.
Running the notebook
We could have done that earlier, but I like being prepared.
이전에 다룬적이 있지만 다시 설명하겠습니다.
To run the notebook, go to thelog-analysisfolder in a terminal and run:
notebook을 실행하려면 터미널에서 log-analysis 폴더로 가서 다음을 실행하세요.
jupyter notebook 'DeepRacer Log Analysis.ipynb'
A browser will open with a Jupyter notebook.
그러면 브라우저가 열리면서 주피터 노트북이 실행 될 겁니다.
Running the code
The editor will look more or less like that: 편집기는 아래와 같이 생겼을 겁니다.
The usual stuff: some text, a toolbar, a menu, some code.
When you get on the code section and press "Run" in the toolbar, the code executes, output (if available) gets printed out. That's pretty much how you go through the document: read, execute, analyse results of the code run.
코드 섹션에서 도구 모음의 "실행"을 누르면 코드가 실행되고 출력 (사용 가능한 경우)이 인쇄됩니다. 코드를 실행하고 결과를 읽고, 실행하고, 분석합니다.
노트북 사용에 관한 간단한 문서에서 Jupyter 노트북으로 작업하는 것에 대한 몇 가지 힌트를 찾을 수 있습니다.
Analysis
When you start working with your notebook, be sure to execute the code blocks with imports at the top. They also include an instruction to display plotted images in the notebook.
notebook 작업을 시작할 때는 코드 블록 위에 imports를 먼저 한 후에 실행해야 합니다. 또한 노트북에 플롯 된 이미지를 표시하는 지침도 포함됩니다.
The files currently available in the data folders are samples. You will be using your own and downloading them as you go through the notebook.
현재 데이터 폴더에서 사용할 수있는 파일은 샘플입니다. 노트북을 사용하면서 당신의 파일을 다운로드 할 겁니다.
The notebook itself has quite a bit of helping code in it like the mentioned downloading of logs or loading the track info. I will not be covering it here.
노트북 자체는 위에서 언급 한 로그 다운로드 나 트랙 정보로드와 같이 코드 자체에 도움이되는 코드를 가지고 있습니다. 나는 여기서 그것을 다루지는 않을 것이다.
Plot rewards per Iteration
This analysis takes the rewards and calculates mean and standard deviation. It then displays those values per iteration. Also a reward per episode is presented.
이 분석은 보상을 취하고 평균 및 표준 편차를 계산합니다. 그런 다음 반복 당 값을 표시합니다. 에피소드 당 보상도 표시됩니다.
Analyze the reward function
The next section uses the track data and training logs to display where the car goes and what reward it receives.
다음 섹션에서는 트랙 데이터와 트레이닝 로그를 사용하여 자동차가 가는 곳과 받는 보상을 표시합니다.
You can display all the points where the car had a reward function calculated:
자동차에 보상 기능이 계산 된 모든 지점을 표시 할 수 있습니다.
In this one above you can see how the car is all over the place. But then have a look at this one (this is a reward distribution for my AWS Summit London model):
위 그림을 보면 차가 여기 저기 많이 다녔다는 것을 알 수 있습니다. 그런데 이걸 한번 봐 보세요. (이것은 AWS Summit London 모델의 reward distribution입니다).
As you can guess, I trained my model to cut corners and to go straight on the straight line.
짐작할 수 있듯이, 나는 내 모델을 코너에서는 안쪽으로 돌고 직선도로에서는 똑바로 가도록 훈련했습니다.
You can display a specific iteration:
이렇게 특정 iteration을 표시할 수 있습니다.
You can get top iterations and analyse the path taken:
top iterations 에서 통과한 길을 분석할 수도 있습니다.
Or just a particular episode: 특정 에피소드만을 볼 수도 있고
Or maybe a particular iteration: 또는 특정 iteration만을 볼 수도 있습니다.
Actions breakdown
This function is pretty damn impressive, but applicable to the re:invent track only. I might spend some time and make something similar for the London Loop.
이 기능은 상당히 인상적이지만 re : invent 트랙에만 적용됩니다. London Loop에서도 비슷하게 시간을 투자해서 비슷한 그림들을 만들어 낼 수도 있습니다.
The output of this function is a graph of decisions taken in different parts of the track. The track is broken down into sections like turns and stuff, then the car's decision process is evaluated and displayed on a histogram. This may help you spot undesired decisions and discourage the car from taking them going forward. Just bear in mind that some wrong actions have a rather low impact and therefore it might be not worth training away from them as you might overtrain.
이 기능의 출력은 트랙의 다른 부분에서 취해진 결정의 그래프입니다. track은 sections으로 나눠집니다. 그리고 나서 자동차에 결정과정은 평가되고 히스토그램에 표시됩니다. 이것을 통해 여러분은 원하지 않는 결정을 찾아내고 앞으로는 자동차가 그런 결정을 하지 않도록 할 수 있게 도와 줍니다. 어떤 잘못된 행동은 영향이 미미할 수 있습니다. 그것들을 너무 과도하게 훈련 시키면 별로 효과가 없을 수도 있습니다.
Simulation Image Analysis
In here you will be loading trained models, loading screens from simulation and observing probability of taking a particular action.
여기에서는 숙련 된 모델을 로드하고, 시뮬레이션에서 화면을 로드하고, 특정 작업을 수행 할 probability을 관찰합니다.
First you need to download the intermediate checkpoints, then load the session model from the file. The final graph displays separation of probability of taking particular actions. If I understand properly, this can be used to determine how confident the model is about taking a specific action. The bigger difference from the best to second-best action, the better.
먼저 intermediate checkpoints를 다운로드 한 다음 파일에서 세션 모델을로드해야합니다. 마지막 그래프는 특정 동작을 취할 probability의 separation를 표시합니다. 내가 제대로 이해한다면, 이것은 모델이 특정 행동을 취하는 것에 대한 confident을 결정하는 데 사용될 수 있습니다. 최선책과 차선책 행동의 차이가 크면 클수록 좋습니다.
I haven't used it before. I guess it will be handy when I understand more of it.
나는 전에 이것을 사용하지 않았습니다. 이것에 대해 더 많은 것을 이해할수록 좀 더 편리하게 사용할 수 있을 겁니다.
Model CSV Analysis
I don't really get this one, sorry. I thin it's just about downloading some metadata about the training and showing distribution of rewards and length of episode (the longer the episodes, the more stable the model.
죄송하지만 이 부분은 제가 제대로 이해하지 못했습니다. 나는 훈련에 대한 메타 데이터를 다운로드하고 보상의 분배와 에피소드의 길이를 보여주는 것에 관한 것이라고 생각합니다 (에피소드가 길수록 모델이 더 안정적입니다).
I will have to learn to understand it better. The description says about downloading the model from DeepRacer Console, but the analysis is happening on some csv file only. Maybe it's part of the model archive?
이것을 더 잘 이해하는 법을 배워야 할 것 같습니다. DeepRacer Console에서 모델을 다운로드하는 것에 대한 설명이 있지만 분석은 일부 CSV 파일에서만 발생합니다. 어쩌면 모델 아카이브의 일부일까요?
Evaluation Run Analysis
This is specifically useful since you can look at your evaluations both in the console and in the virtual race.
이것은 콘솔과 가상 레이스에서 평가를 볼 수 있으므로 특히 유용합니다.
You can load logs from evaluation, then plot them on the track to see the path taken, distance covered, time, average throttle, velocity etc.
평가에서 로그를 로드 한 다음 트랙에 그려서 경로, 거리, 시간, 평균 스로틀, 속도 등을 확인할 수 있습니다.
On the plotted images you can see what throttle decision the car has taken.
플롯 된 이미지에서 자동차가 취한 throttle결정을 볼 수 있습니다.
Just being able to compare faster and slower results from the evaluation can be very useful in terms of making decisions on future training sessions.
보다 빠르고 느린 평가 결과를 비교할 수 있다면 향후 교육 세션에 대한 결정을 내리는 데 매우 유용 할 수 있습니다.
What is the model looking at
I haven't used this one yet and I treat it more like a helpful utility to understand what the model cares about. After loading a model and some images, it is possible to get a processed image with highlighted elements that are of value when making decisions. It looks like that:
나는 이것을 아직 사용하지 않았으며 모델이 무엇을 중요하게 생각 하는지를 이해하는 데 도움이되는 유틸리티처럼 취급합니다. 모델 및 일부 이미지를로드 한 후에는 결정할 때 가치가있는 강조 표시된 요소가있는 처리 된 이미지를 가져올 수 있습니다. 그것은 다음과 같이 보입니다.
Example
Let's say I want to analyse one of my virtual race evaluations. I want to see the race information from when I managed to do the 23 seconds. I located the log stream starting withsim-ynk2kzw3q7lf, located in/aws/deepracer/leaderboard/SimulationJobs.
내 가상 경주 평가 중 하나를 분석하려고한다고 가정 해 봅시다. 나는 23 초를 할 수 있었을 때부터 경주 정보를보고 싶다. / aws / deepracer / leaderboard / SimulationJobs에있는 sim-ynk2kzw3q7lf로 시작하는 로그 스트림을 찾았습니다.
Then load the track data: 그리고 트랙 데이터를 로드 합니다.
Then fetch the evaluation data and plot it (some small corrections to the code needed):
그런 다음 평가 데이터를 가져 와서 플롯합니다 (코드에 약간의 수정이 필요함).
The result comes as a scrollable frame. It's quite annoying and can be expanded by a single click on the left margin:
결과는 스크롤 가능한 프레임으로 제공됩니다. 매우 성가 시며 왼쪽 여백을 한 번 클릭하여 확장 할 수 있습니다.
From here you can clearly see I had a stable, but slow model. I made some advancements from that point, but I'll wait with sharing them till the London Loop virtual race is over.
여기서 안정적이지만 느린 모델을 분명히 볼 수 있습니다. 나는 그 시점부터 몇 가지 발전을 이루었지만, 런던 루프 가상 경주가 끝날 때까지 나눠서 기다릴 것입니다.
Track data
프로젝트에 몇 가지 샘플 트랙이 포함되어 있습니다. London Loop은 그들 중 하나가 아니기 때문에 가상의 인종에 참여하고 있기 때문에 스스로 준비했습니다. 내가 제기 한 GitHub 끌어 오기 요청에서 가져올 수 있습니다. 다행스럽게도 곧 병합 될 예정이지만, 지금은 워크샵 저장소에 가입하여 거기에서 London_Loop_track.npy 파일을 다운로드 할 수 있습니다.
log_groupis the log group in CloudWatch that you want to download the logs from. The log groups you will be interested in are:
/aws/robomaker/SimulationJobs- logs from training simulations and evaluations,
/aws/deepracer/leaderboard/SimulationJobs- logs from evaluations submitted to a virtual race,
not_older_than- date string to provide the lower time limit for the log event streams; if there is at least one log event newer than that, the stream will be downloaded; For today logs (19th of May) I set it to2019-05-19; refer todateutil documentationto learn about accepted formats,
older_than- upper limit date, pretty similar as not_older_than but the other way round; If you set it to2019-05-19, the newest entries in accepted stream will be from 2019-05-18 23:59:59.999 at the latest.
Return value is a list of tuples containing:
log file path
simulation id
first log event timestamp
last log event timestamp
Entries are ordered by occurence of the last timestamp event.
If you are using a non-root account to access DeepRacer, you may be needed permissions to run method describe_log_streams.
If you call the method withpathprefixvalueooh/eeh/ooh/ah/aah/ting/tang/walla/walla/bing/bang/deepracer-eval-andlog_groupis/aws/deepracer/leaderboard/SimulationJobs, and there is a log_stream for simulationsim-l337h45h, the file created will beooh/eeh/ooh/ah/aah/ting/tang/walla/walla/bing/bang/deepracer-eval-sim-l337h45h.log
That's all folks
I'm not pretending I know much about the notebooks. Two weeks ago I didn't understand what they were or how to use them. This one has proven to be extremely useful when analysing my model's performance, and not only mine.
Well done, you've made it this far! Once again, let me mention my modification of the tool:"Analyzing the AWS DeepRacer logs my way"- I have raised a Pull Request to AWS with this change but you can already enjoy it now from my fork.
나는 노트북에 대해 많이 알고있는 척하지 않습니다. 2 주 전 나는 그들이 무엇인지, 어떻게 사용하는지 이해하지 못했습니다. 이 모델은 내 모델의 성능을 분석 할 때 매우 유용하다는 것이 입증되었습니다.
잘 했어, 너 지금까지 해냈어! "AWS DeepRacer 로그 분석하기"-이 변경으로 AWS로 끌어 오기 요청을 제기했지만 현재 내 포크에서 이미이 기능을 사용할 수 있습니다.
Great thanks to Lyndon Leggate for spotting that I misused the logs api initially. Lyndon is currently in top 10 in London Loop as well, he started the discussion group on Slack that I mentioned in my earlier posts. You are most welcome to join it:click here.
처음에 로그 API를 오용 한 점을 발견 한 Lyndon Leggate에게 감사드립니다. 린든은 현재 런던 루프 (London Loop)에서도 톱 10에 속해 있으며, 이전 글에서 언급 한 슬랙 (Slack)에 대한 토론 그룹을 시작했습니다. 가입하시는 것이 가장 좋습니다 : 여기를 클릭하십시오.
I will be soon writing about the First AWS DeepRacer League Virtual Race called London Loop which I'm taking part in. It's different from the London Loop and much bigger in scale - almost 600 participants so far (and more to come, I'm sure), still two weeks left to compete, top lap of 12.304 seconds and fifty best entries are within a second of that. And I'm fifth at the moment :)
런던 루프와 다른 점은 규모가 훨씬 더 큰 것입니다. 거의 600 명의 참가자가 참여하고 있습니다. 물론), 경쟁하기 위해 2 주 남겨 뒀다, 12.304 초의 최고의 랩과 50 최고의 항목은 그것의 두 번째 이내에있다. 그리고 나는 지금 5 번째입니다 :)
# Calculate 3 markers that are at varying distances away from the center line marker_1 = 0.1 * track_width marker_2 = 0.25 * track_width marker_3 = 0.5 * track_width
# Give higher reward if the car is closer to center line and vice versa if distance_from_center <= marker_1: reward = 1.0 elif distance_from_center <= marker_2: reward = 0.5 elif distance_from_center <= marker_3: reward = 0.1 else: reward = 1e-3 # likely crashed/ close to off track
return float(reward)
이 때의 트랙은 직선 트랙이었다.
그래서 중앙선에 가까운 경우 reward를 주는 로직을 만들어서 훈련 시켰다.
두번째도 Straigh track인데 함수를 조금 바꿨다.
def reward_function(params): ''' Example of rewarding the agent to follow center line ''' reward=1e-3
※ 본 리그는 메가존 클라우드가 자체적으로 진행하는 행사로 AWS에서 개최하는 리그와 무관합니다. ※ 상금 및 경품 지급 시 소득세 등 제세공과금이 차감 혹은 청구 됩니다. ※ 본 경기 규칙은 AWS DeepRacer League 규칙을 따르며 트랙 또한 re:Invent 2018 트랙에서 진행 됩니다.
========================================
저는 AWS Deepracer 모델 차량을 7월 중순에 받을 예정이라서 10월 3일 토론토에서 열리는 경기에 참가할 수 있을 것 같습니다.
휴가 내고 비행기 타고 가서 참가할 생각인데....
어떻게 될 지 아직......
지금 제가 만들고 있는 모델은 Kumo Torakku 트랙에서 23초를 기록하고 그 이후에는 전혀 기록이 나아 지질 않고 있습니다.
지금 1,2,3 등은 모두 10초 대 이던데.... 그런 기록은 어떻게 하면 낼 수 있을 지.......
re:Invent 2019에서 AWS DeepRacer Cup에서 우승해 상금, 영예, AWS DeepRacer Championship Cup을 획득하세요. 매월 열리는 가상 Circuit 레이스에서 온라인으로 경쟁하거나 전 세계 Summit Circuit 경주 행사에서 직접 경쟁 할 수 있습니다.
Standings: Check out the live leaderboard and latest race results
일본의 스즈카 트랙에서 영감을 얻은 Kumo Torakku 서킷 레이싱에서 우승해 re:Invent로 가는 경비 지원을 받으세요. 후지산을 보며 도쿄의 거리를 달려 승리하세요. 그리고 포인트와 상금을 획득하세요. 그리고 AWS re:Invent 2019에서 열리는 AWS DeepRacer Championship Cup 출전권도 받으세요.
AWS Free Tier를 사용하면 최대 10 시간동안 훈련을 무료로 진행할 수 있습니다. 그러니까 AWS DeepRacer League에 아무런 비용을 들이지 않고 참여해 보세요.
Take a step inside the AWS DeepRacer League. Episode 1 follows the competition to Amsterdam, featuring developers of all skill levels hoping to qualify for a chance to win the Championship Cup at AWS re:Invent 2019. Tune in now to learn more about their strategy and how you can build and tune a model for a chance to win!
AWS DeepRacer League를 향해 한걸음 내디뎌 보세요. 에피소드 1은 암스테르담에서의 경기가 나옵니다. AWS re:Invent 2019 에서 열리는 Championship Cup에서 우승하는 것을 목표로 하는 다양한 수준의 개발자들이 나옵니다. 그들의 전략에 대해 배워 보세요 그리고 여러분은 우승을 위해 어떻게 모델을 만들어 갈 것인지 생각해 보세요.
Pick a race
개발자는 매월 공개 될 유명한 raceways에서 영감을 얻은 가상 트랙을 통해 Virtual Circuit에서 경쟁함으로써 테스트에 자신의 기술을 적용 할 수 있습니다. re:Invent 2019에서 열리는 AWS DeepRacer Championship Cup에 대한 경비와 경품을 얻기 위해 경쟁 할 수 있습니다.
20 개의 AWS Summit 중 아무 Summit이나 선택해서 직접 참가하세요. (참여하고 싶으면 여러 Summit에 참여하실 수 있습니다.) 워크샵을 통해 re:MARS 및 re:Invent 2019에서 모델을 어떻게 만들고 트레이닝 시킬 지에 대해 도움을 드릴 겁니다. 여러분이 트레이닝 시킨 모델을 집으로 가져 가실 수도 있습니다. 그리고 그 모델을 테스트하고 엑스포에서 그것을 가지고 경쟁하실 수 있습니다.
기계 학습을 처음 사용 하던지 기존 스킬을 기반으로 준비하든, 우리는 당신이 경주 준비를하는 것을 도울 수 있습니다. e- 러닝 수업 인 AWS DeepRacer : 강화 학습 학습에 의해 시작할 수 있습니다. 약 90 분 후에 보강 학습 (자율 차량 교육에 이상적인 기계 학습의 한 분야)의 기본 사항과 AWS DeepRacer - 트랙을 누빌 준비가되었습니다!
Summit Circuit 레이스 또는 Virtual Circuit 레이스에서 경쟁하십시오. 경쟁하는 레이스 수에는 제한이 없습니다. Virtual Circuit 또는 Summit Circuit 레이스 중 하나만이라도 1등을 하면 라스베가스에서 열리는 AWS re:Invent에서 열리는 AWS DeepRacer final round에 참가하는 경비를 지원받으실 수 있습니다. 각 레이스의 10등까지는 AWS DeepRacer 자동차를 받으실 수 있습니다.
각 레이스마다 참여하시면 포인트를 받게 됩니다. 2019년 말에 이 포인트들의 합계를 가지고 등수를 가립니다. 각 Circuit의 우승자에게는 re:Invent 2019의 AWS DeepRacer knockout(final) 라운드에 참가하는 경비를 지원 받으실 수 있습니다. 자세한 내용은 AWS DeepRacer 공식 규칙을 참조하십시오.
레이스에 참가하면 2019 AWS DeepRacer League Champion이 될 수 있습니다!
# Calculate 3 markers that are at varying distances away from the center line marker_1 = 0.1 * track_width marker_2 = 0.25 * track_width marker_3 = 0.5 * track_width
# Give higher reward if the car is closer to center line and vice versa if distance_from_center <= marker_1: reward = 1.0 elif distance_from_center <= marker_2: reward = 0.5 elif distance_from_center <= marker_3: reward = 0.1 else: reward = 1e-3 # likely crashed/ close to off track
return float(reward)
소스코드를 보니 트랙 중앙선 가까이 가면 점수(reward)를 더 많이 주는 간단한 로직이다.
30분 트레이닝 시키고 곧바로 Evaluate 결과는 조금 있다가…
이 첫번째 모델을 clone 해서 두번째 모델을 만들었다. 다 똑같고 reward function 함수만 내가 원하는 대로 조금 바꾸었다.
def reward_function(params): ''' Example of rewarding the agent to follow center line ''' reward=1e-3
if distance_from_center >=0.0 and distance_from_center <= 0.03: reward = 1.0
if not all_wheels_on_track: reward = -1 else: reward = params['progress']
# Steering penality threshold, change the number based on your action space setting ABS_STEERING_THRESHOLD = 15
# Penalize reward if the car is steering too much if steering > ABS_STEERING_THRESHOLD: reward *= 0.8
# add speed penalty if speed < 2.5: reward *=0.80
return float(reward)
이전에 썼던 디폴트 함수와는 다르게 몇가지 조건을 추가 했다. 일단 중앙선을 유지하면 좀 더 점수를 많이 주는 것은 좀 더 간단하게 만들었다. 이 부분은 이전에 훈련을 했으니까 이 정도로 해 주면 되지 않을까? 그리고 아무 바퀴라도 트랙 밖으로 나가면 -1을 하고 모두 트랙 안에 있으면 progress 만큼 reward를 주었다. Progress는 percentage of track completed 이다. 직진해서 결승선에 더 가까이 갈 수록 점수를 더 많이 따도록 했다. 이건 차가 빠꾸하지 않고 곧장 결승점으로 직진 하도록 만들기 위해 넣었다. 그리고 갑자기 핸들을 과하게 돌리면 차가 구르거나 트랙에서 이탈할 확률이 높으니 핸들을 너무 과하게 돌리면 점수가 깎이도록 했다. (15도 이상 핸들을 꺾으면 점수가 깎인다.) 그리고 속도도 너무 천천히 가면 점수를 깎는다.
속도 세팅이 최대 5로 만들어서 그 절반인 2.5 이하고 속도를 줄이면 점수가 깎인다.
이렇게 조건들을 추가하고 Training 시작. 이건 좀 복잡하니 트레이닝 시간을 1시간 주었다.
이 두개의 모델에 대한 결과는…
딱 보니 첫번째 디폴트 함수를 사용했을 때는 시간이 갈수록 결과가 좋게 나왔다. 그런데 두번째는 시간이 갈수록 실력이 높아지지는 않는 것 같다.
너무 조건이 여러개 들어가서 그런가?
생각해 보니 조건을 많이 넣는다고 좋은 것은 아닌것 같다. 일반적으로 코딩을 하다 보면 예외 상황을 만들지 않게 하기 위해 조건들을 아주 많이 주는 경향이 있는데 이 인공지능 쪽은 꼭 조건을 많이 줄 필요는 없을 것 같다.
앞으로 인공지능 쪽을 하다보면 일반 코딩에서의 버릇 중에 고칠 것들이 많을 것 같다. Evaluation 결과를 보면 두개의 차이가 별로 없다. 두 모델 모두 3번중 2번 완주 했고 완주시간도 비슷한 것 같다. 조건을 쪼금 더 준 Model 2 가 좀 더 낫긴 하네. (0.2 ~0.3 초 더 빠르다.) 다음은 곡선이 있는 다른 트랙으로 훈련을 시킬 계획이다.
그런데 곡선이 있는 트랙에서는 스피드가 무조건 빠르다고 좋은 건 아닌 것 같다. 내가 스피드를 5로 주었는데 Clone을 만들어서 할 때는 이 스피드를 조절하지 못하는 것 같다.
지난주 매일 1달러씩 부과 되던 NAT Gateways 서비스를 언제 세팅 했는지 몰랐었다.
여하튼 아마존 Support 서비스의 도움을 받아서 해당 서비스를 Delete 한 이후 요금은 더이상 부과 되지는 않았는데...
문제는 그걸 지우고 난 이후 Deepracer model을 생성하면 에러가 발생해서 일을 더이상 진행 할 수가 없었다.
도저히 안되서 새로운 account를 생성하고 Deepracer Model을 하나 생성했다.
그랬더니 모델과 더불어 NAT Gateways가 생성되더라.
이제 알았다. 처음 DeepRacer를 시작하기 위해 account resources를 생성할 때 이 NAT Gateway가 생성된다는 것을....
참고로 아래는 DeepRacer 모델을 하나 생성하면 청구되는 금액들이다.
* Data Transfer에서 $0.010 per GB - regional data transfer - in/out/between EC2 AZs or using elastic IPs or ELB 가 5기가가넘어서 5센트가 청구됐다.
* 그 다음 EC2에서 NAT Gateway가 생성과 연계해서 2.10 달러가 청구 됐다.
* 여기서 NAT Gateway는 매일 1달러씩 청구되게 돼 있다.
* 그 다음은 시뮬레이터 서비스인 RoboMaker 서비스에 대해 1.52달러가 청구됐고 SageMaker는 30센트가 청구됐다.
다른 서비스들은 사용하면 사용한 시간만큼만 내는데 NAT Gateway는 24시간 계속 돌아가기 때문에 매일 1불씩 내야 한다.
사용하지 않을 때 Stop 할 수도 없는 것 같다.
하루에 1달러이면 아무것도 아니라고 생각할 수 있지만... 아무것도 하지 않는데도 청구가 되니 속이 쓰렸다.
그래서 AWS Support Case를 하나 더 Raise 했다.
오늘 아침에 했는데 퇴근 할 때 쯤 답변이 오더라구.
다음은 답변 내용...
Hey there! This is Merlyn, your AWS Billing & Accounts specialist. I hope you are having a wonderful day! I understand you have some concerns about the DeepRacer pricing and you bill. Worry not as I'm here to help.
DeepRacer의 가격 책정과 청구서와 관련 우려가 있다는 것에대해 이해합니다. 걱정마세요. 제가 도와드릴테니까요.
With AWS DeepRacer console services, there are no charges for driving the AWS DeepRacer car or upfront charges. You will only pay for the AWS services you use. You will be billed separately by each of the AWS services used to provide the AWS DeepRacer console services such as creating and training your models, storing your models and logs, and evaluating them, including racing them in the virtual simulator or deploying them to their AWS DeepRacer car. You will see the bill for each service on your monthly billing statement.
AWS DeepRacer console services는 AWS DeepRacer 차량을 driving 하는데에 대한 가격 책정이나 선불로 어떠한 돈을 낼 필요가 없습니다. 당신이 AWS services를 사용한 것에 대한 요금만 지불 하시면 됩니다. AWS DeepRacer console services를 통해 사용하시는 AWS services들에 대해 각각의 사용료가 따로 청구 될 것입니다. 예를 들어 당신의 모델들을 생성하고 훈련하는 것 그리고 그 모델들이나 로그들을 저장하는 것, 그 모델들을 평가하는 작업, 가상 시뮬레이터에서 모델의 레이싱을 하거나 AWS DeepRacer car에 배치하는 일들에 대해 따로 사용료가 부과 됩니다.
Upon first use of AWS DeepRacer simulation in the AWS console, new customers will get 10 hours of Amazon SageMaker training, and 60 Simulation Unit (SU) hours for Amazon RoboMaker in the form of service credits; $6 for SageMaker, $24 for RoboMaker and $34 for NAT Gateway. The service credits are available for 30 days and applied at the end of the month. A typical AWS DeepRacer simulation uses up to six SUs per hour, thus you will be able to run a typical AWS DeepRacer simulation for up to 10 hours at no charge.
AWS console에서 AWS DeepRacer simulation을 처음 사용하는 새 고객에게는 10시간 동안 Amazon SageMaker training과 Amazon RoboMaker에 대해 60 Simulation Unit (SU) 시간에 대해 service credits이라는 형태로 무료 사용하실 수 있는 기회를 드립니다. SageMaker는 $6 , RoboMaker $24 그리고 NAT Gateway는 $34 입니다. 이 service credits은 30일간 사용 가능하고 그 달의 말에 적용됩니다. 일반적으로 AWS DeepRacer simulation 사용은 시간당 six SUs이므로 당신은 AWS DeepRacer simulation을 10시간 동안 무료로 사용하실 수 있습니다.
Please visit the link below for more pricing information:
This inquiry is a bit out of our scope. Here in the Billing and Accounts department we don’t handle technical questions. Please note that AWS unbundles technical support in order to lower the prices of the services themselves instead of billing it to all customers disregarding if they’d like to use it or not. However, if technical support is required, I would like to tell you we offer several Premium Support plans starting at just $29 a month, which enables you to speak to an engineer by email, chat, or phone depending on what support plan you choose.
당신의 요청 중 일부는 우리의 권한을 벗어나는 부분이 있습니다. 저희 Billing and Accounts department에서는 기술적인 질문은 다루지 않습니다. 저희는 모든 고객에게 비용 지불의 부담을 주지 않고 저렴한 가격을 유지하기 위해 기술 부문의 Support는 분리해서 다루고 있습니다. 만약 기술적인 support를 원하시면 월 $29 부터 시작되는 Premium Support plan 서비스들이 있습니다. 이 유료 기술 지원 서비스를 이용하시면 이메일, 채팅 그리고 전화등 여러분이 편한 방식으로 엔지니어들과 소통을 할 수 있습니다.
All Premium Support plans include direct access to Support Engineers, and these plans offer a tailored support experience that allows you to select the support level that best fits your needs. More information including pricing and how to sign up can be found here:
모든 Premium Support plan 들에는 Support Engineers과의 직접 access 권한이 포함되며 이러한 플랜들에서는 사용자의 요구 사항에 가장 적합한 서포트 레벨을 선택할 수 있는 맞춤 지원 서비스가 제공 됩니다. 가격 정책 및 가입 방법에 대한 자세한 정보는 여기를 참조하세요.
You can also search the Amazon Web Services Developer forums or post a new question. Our technical staff and the Amazon Web Services developer community participate in the forums regularly and might be able to help you. Generally, questions are responded to in about a day, though there is not a guaranteed response time.
그 외에 Amazon Web Services Developer forums에서 궁금한 내용을 검색해서 찾는 방법도 있습니다. 또한 새로운 질문을 이곳에 올릴 수도 있구요. Our technical staff와 Amazon Web Services developer community에 참여하는 개발자들로 부터 지원을 받으실 수도 있을 겁니다. 일반적으로 하루 정도 기다리면 답변을 받습니다. (응답 시간에 대한 보장은 없지만요.)
I certainly want you to have the best experience while using our services, so please feel free to let me know if you have any other concern in the meantime, it will be an honor to keep on assisting you. On behalf of Amazon Web Services, I wish you Happy Cloud Computing!
Best regards,
Merlyn N.
Amazon Web Services
==================================================================== Learn to work with the AWS Cloud. Get started with free online videos and self-paced labs at http://aws.amazon.com/training/ ====================================================================
Hands-on Exercise 1: Model Training Using AWS DeepRacer Console
This is the first of four exercises that you will encounter in this course. This first exercise guides you through building, training, and evaluating your first RL model using the AWS DeepRacer console. To access the instructions for three of these exercises,download and unzip this course package. For this particular exercise, find and open the relevant PDF file and follow the steps within to complete the exercise.
*Note:This exercise is designed to be completed in your AWS account. AWS DeepRacer is part of AWS Free Tier, so you can get started at no cost. For the first month after sign-up, you are offered a monthly free tier of 10 hours of Amazon SageMaker training and 60 simulation units of Amazon RoboMaker (enough to cover 10 hours of training). If you go beyond those free tier limits, you will accrue additional costs. For more information, see the AWS DeepRacer Pricing page.
AWSTemplateFormatVersion: "2010-09-09" Description: 'AWS DeepRacer: Driven by Reinforcement Learning' Parameters: SagemakerInstanceType: Description: 'Machine Learning instance type that should be used for Sagemaker Notebook' Type: String AllowedValues: - ml.t2.medium - ml.t2.large - ml.t2.xlarge - ml.t3.medium - ml.t3.large - ml.t3.xlarge - ml.m5.xlarge Default: ml.t3.medium CreateS3Bucket: Description: Create and use a bucket created via this template for model storage Default: True Type: String AllowedValues: - True - False ConstraintDescription: Must be defined at True|False. VPCCIDR: Description: 'CIDR Block for VPC (Do Not Edit)' Type: String Default: 10.96.0.0/16 PUBSUBNETA: Description: 'Public Subnet A (Do Not Edit)' Type: String Default: 10.96.6.0/24 PUBSUBNETB: Description: 'Public Subnet B (Do Not Edit)' Type: String Default: 10.96.7.0/24 PUBSUBNETC: Description: 'Public Subnet C (Do Not Edit)' Type: String Default: 10.96.8.0/24 PUBSUBNETD: Description: 'Public Subnet D (Do Not Edit)' Type: String Default: 10.96.9.0/24 S3PathPrefix: Type: String Description: 'Bootstrap resources prefix' Default: 'awsu-spl-dev/spl-227' S3ResourceBucket: Type: String Description: 'Bootstrap S3 Bucket' Default: 'aws-training' Conditions: CreateS3Bucket: !Equals [ !Ref CreateS3Bucket, True ] # NoCreateS3Bucket: !Equals [ !Ref CreateS3Bucket, False ] Resources:
# Defining the VPC Used for the sanbox ENV, and notebook instance VPC: Type: 'AWS::EC2::VPC' Properties: CidrBlock: !Ref VPCCIDR EnableDnsSupport: 'true' EnableDnsHostnames: 'true' Tags: - Key: Name Value: 'DeepRacer Sandbox' # There is a few calls made to public to download supporting resources InternetGateway: Type: 'AWS::EC2::InternetGateway' DependsOn: VPC Properties: Tags: - Key: Name Value: 'DeepRacer Sandbox IGW' # Attached this IGW to the sanbox VPC AttachGateway: Type: 'AWS::EC2::VPCGatewayAttachment' DependsOn: - VPC - InternetGateway Properties: VpcId: !Ref VPC InternetGatewayId: !Ref InternetGateway # Default setting in the notebook is to use Public IP address to communicate # between instances running the simulation, and the instances collecting and # processing. A NatGW could have been used with added costs, but would allow for # use of private IP address.
# Found in testing that not all ML instance types may not be deployed or avaliable # in all AZ's within a given region. We are using the newest instance family of T3 PublicSubnetA: Type: 'AWS::EC2::Subnet' DependsOn: VPC Properties: VpcId: !Ref VPC CidrBlock: !Ref PUBSUBNETA AvailabilityZone: !Select - '0' - !GetAZs '' Tags: - Key: Name Value: 'Deepracer Sandbox - Public Subnet - A' PublicSubnetB: Type: 'AWS::EC2::Subnet' DependsOn: VPC Properties: VpcId: !Ref VPC CidrBlock: !Ref PUBSUBNETB AvailabilityZone: !Select - '1' - !GetAZs '' Tags: - Key: Name Value: 'Deepracer Sandbox Public Subnet - B' PublicSubnetC: Type: 'AWS::EC2::Subnet' DependsOn: VPC Properties: VpcId: !Ref VPC CidrBlock: !Ref PUBSUBNETC AvailabilityZone: !Select - '2' - !GetAZs '' Tags: - Key: Name Value: 'Deepracer Sandbox Public Subnet - C' PublicSubnetD: Type: 'AWS::EC2::Subnet' DependsOn: VPC Properties: VpcId: !Ref VPC CidrBlock: !Ref PUBSUBNETD AvailabilityZone: !Select - '3' - !GetAZs '' Tags: - Key: Name Value: 'Deepracer Sandbox Public Subnet - D' # Define the Public Routing Table PublicRouteTable: Type: 'AWS::EC2::RouteTable' DependsOn: - VPC - AttachGateway Properties: VpcId: !Ref VPC Tags: - Key: Name Value: 'Deepracer Sandbox Public Routing Table' # And add in the default route to 0.0.0.0/0 PublicRouteIGW: Type: 'AWS::EC2::Route' DependsOn: - PublicRouteTable - InternetGateway Properties: RouteTableId: !Ref PublicRouteTable DestinationCidrBlock: 0.0.0.0/0 GatewayId: !Ref InternetGateway # Attach the routing table to each of the subnets PublicRouteTableAssociationA: Type: 'AWS::EC2::SubnetRouteTableAssociation' Properties: SubnetId: !Ref PublicSubnetA RouteTableId: !Ref PublicRouteTable PublicRouteTableAssociationB: Type: 'AWS::EC2::SubnetRouteTableAssociation' Properties: SubnetId: !Ref PublicSubnetB RouteTableId: !Ref PublicRouteTable PublicRouteTableAssociationC: Type: 'AWS::EC2::SubnetRouteTableAssociation' Properties: SubnetId: !Ref PublicSubnetC RouteTableId: !Ref PublicRouteTable PublicRouteTableAssociationD: Type: 'AWS::EC2::SubnetRouteTableAssociation' Properties: SubnetId: !Ref PublicSubnetD RouteTableId: !Ref PublicRouteTable # Define a S3 endpoint for all the S3 traffic during training S3Endpoint: Type: AWS::EC2::VPCEndpoint Properties: VpcId: !Ref VPC RouteTableIds: - !Ref PublicRouteTable ServiceName: !Join - '' - - com.amazonaws. - !Ref 'AWS::Region' - .s3 PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: '*' Action: - 's3:*' Resource: - '*' # This exercise is going to need a bucket to store any file generated from training # There is a conditions to evaluate if the PRAM is true, else this resource would # not be created. SandboxBucket: Type: 'AWS::S3::Bucket' DeletionPolicy: Retain Condition: CreateS3Bucket Properties: BucketName: Fn::Join: - "-" - - deepracer-trainingexercise - Ref: AWS::Region - Ref: AWS::AccountId # Sagemaker is going to be making calls to Robomaker to launch the sim, and # Sagemaker to launch the training insance. This requries AWS credentals. A # Principal of sagemaker and robomaker needs to be assiged as both service will # assuming this role. Default Sagemaker full access and s3 access is needed. SageMakerNotebookInstanceRole: Type: 'AWS::IAM::Role' Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - sagemaker.amazonaws.com - robomaker.amazonaws.com Action: - 'sts:AssumeRole' ManagedPolicyArns: - 'arn:aws:iam::aws:policy/AmazonSageMakerFullAccess' Path: / Policies: - PolicyName: DeepRacerPolicy PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: [ 's3:*', 'iam:GetRole' ] Resource: '*' # This is how the notebook gets loaded on to sagemaker. There is a zip file with # with the needed files, and a second http call to pull down the notebook. # This is only done "OnCreate" - when the sagemaker instance is first deployed # You can can the script get run "OnStart" (when a sagemaker instance changes # from a stopped state to a running state). This would automaticlly update file # to be the latest form source, but could over write changes applied during # your testing SageMakerNotebookInstanceLifecycleConfig: Type: 'AWS::SageMaker::NotebookInstanceLifecycleConfig' Properties: # OnStart: # - Content: # Fn::Base64: # #!/bin/bash # !Sub | # cd SageMaker # chown ec2-user:ec2-user -R /home/ec2-user/SageMaker
OnCreate: - Content: Fn::Base64: !Sub | cd SageMaker curl -O https://us-west-2-${S3ResourceBucket}.s3.amazonaws.com/${S3PathPrefix}/scripts/rl_deepracer_robomaker_coach.ipynb curl -O https://us-west-2-${S3ResourceBucket}.s3.amazonaws.com/${S3PathPrefix}/scripts/rl_deepracer_robomaker_coach.zip unzip rl_deepracer_robomaker_coach.zip chown ec2-user:ec2-user -R /home/ec2-user/SageMaker # Security Group for sagemaker instance running in this VPC SagemakerInstanceSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Sagemaker Security Group VpcId: !Ref VPC SecurityGroupIngress: - IpProtocol: tcp FromPort: 1 ToPort: 65535 CidrIp: !Ref VPCCIDR - IpProtocol: udp FromPort: 1 ToPort: 65535 CidrIp: !Ref VPCCIDR SecurityGroupEgress: - IpProtocol: tcp FromPort: 1 ToPort: 65535 CidrIp: !Ref VPCCIDR - IpProtocol: udp FromPort: 1 ToPort: 65535 CidrIp: !Ref VPCCIDR # Creating the Sagemaker Notebook Instance SageMakerNotebookInstance: Type: 'AWS::SageMaker::NotebookInstance' Properties: #NotebookInstanceName: 'DeepracerSagemakerSandbox' NotebookInstanceName: !Join ["-", ["DeepRacerSagemakerSandbox", !Ref "AWS::StackName"]] SecurityGroupIds: - !GetAtt - SagemakerInstanceSecurityGroup - GroupId InstanceType: !Ref SagemakerInstanceType SubnetId: !Ref PublicSubnetA Tags: - Key: Name Value: 'DeepRacer Sandbox' LifecycleConfigName: !GetAtt - SageMakerNotebookInstanceLifecycleConfig - NotebookInstanceLifecycleConfigName RoleArn: !GetAtt - SageMakerNotebookInstanceRole - Arn Outputs: # Display the name of the bucekt that was created from this CFN Stack ModelBucket: Condition: CreateS3Bucket Value: !Ref SandboxBucket # URL to get to the Sagemaker UI, and find the Jupyter button. SagemakerNotebook: Value: !Sub | https://console.aws.amazon.com/sagemaker/home?region=${AWS::Region}#/notebook-instances/${SageMakerNotebookInstance.NotebookInstanceName}
(RL)Reinforcement learning (RL)은 기계 학습 machine learning의 한 유형으로, agent가 원하는 임무를 어떻게 수행할 것인가를 배우기 위해 주어진 환경environment 을 탐구하는 것입니다. 좋은 결과를 위한 액션을 취하고 나쁜 결과를 초래하는 액션은 회피함으로서 원하는 임무에 최적화 된 행동을 학습하게 됩니다.
reinforcement learning 모델은 경험을 통해 배우며 시간이 지남에 따라 어떤 행동이 최상의 보상reward으로 이어질지 식별 할 수 있게 됩니다.
다른 타입의 machine learning
Supervised learning
예제 중심 교육 - 주어진 입력들에 대해 알려진 출력들에 대한 레이블된 데이터를 가지고 이 모델은 새로운 입력에 대한 출력을 예측하도록 훈련됩니다.
Unsupervised learning
추론 기반 교육 - 알려진 출력이 없는 레이블된 데이터를 가지고 이 모델은 입력 데이터 내의 관련 구조 또는 유사한 패턴을 식별하도록 훈련됩니다.
How does AWS DeepRacer learn to drive by itself?
In reinforcement learning, anagentinteracts with anenvironmentwith an objective to maximize its totalreward.
The agent takes anactionbased on the environmentstateand the environment returns the reward and the next state. The agent learns from trial and error, initially taking random actions and over time identifying the actions that lead to long-term rewards.
Let's explore these ideas and how they relate to AWS DeepRacer.
reinforcement learning에서 agent는 환경environment과 상호 작용하여 총 보상reward을 최대화합니다.
agent는 환경environment 상태state에 따라 조치를 취하고 환경environment은 보상reward과 다음 상태state를 반환합니다. 에이전트agent는 초기에 무작위로 행동을 취하고 시간이 지남에 따라 장기 보상long-term rewards으로 이어지는 행동을 식별함으로써 이러한 시행 착오를 통해 학습합니다.
이런 각각의 개념들을 살펴보고 AWS DeepRacer와의 관계에 대해서도 알아보겠습니다.
Agent
Theagentsimulates the AWS DeepRacer vehicle in the simulation for training. More specifically, it embodies the neural network that controls the vehicle, taking inputs and deciding actions.
에이전트agent는 훈련을 하기 위해 시뮬레이션에서 AWS DeepRacer 차량을 시뮬레이트 합니다. 보다 구체적으로, 차량을 제어하고 입력을 취하고 행동을 결정하는 신경망을 구현합니다.
Environment
Theenvironmentcontains a track that defines where the agent can go and what state it can be in. The agent explores the envrionment to collect data to train the underlying neural network.
환경environment 은 에이전트agent 가 어디로 갈 수 있고 어떤 상태에 놓일 수 있는 지에 대해 정의하는 트랙으로 구성됩니다. 에이전트는 기본 신경 네트워크를 훈련하기 위해 주어진 환경(트랙)을 탐색하면서 데이터를 수집합니다.
State
Astaterepresents a snapshot of the environment the agent is in at a point in time.
For AWS DeepRacer, a state is an image captured by the front-facing camera on the vehicle.
상태state는 특정 시점에 에이전트가있는 환경의 스냅 샷을 가리킵니다. AWS DeepRacer의 경우 상태는 차량의 전면 카메라가 캡처 한 이미지입니다.
Action
Anactionis a move made by the agent in the current state. For AWS DeepRacer, an action corresponds to a move at a particular speed and steering angle.
동작action은 현재 상태에서 agent가 수행 한 동작입니다. AWS DeepRacer의 경우 동작은 특정 속도 및 방향(핸들) 각도 등의 움직임과 관계된 액션을 말합니다.
Reward
Therewardis the score given as feedback to the agent when it takes an action in a given state.
In training the AWS DeepRacer model, the reward is returned by areward function. In general, you define or supply a reward function to specify what is desirable or undesirable action for the agent to take in a given state.
보상reward은 어떤 주어진 상태에서 action를 취했을 때 agent에게 피드백으로 주어지는 점수입니다.
AWS DeepRacer 모델을 교육 할 때 보상reward은 reward function에 의해 반환됩니다. 일반적으로 agent 가 주어진 상태에서 취할 수있는 바람직하거나 바람직하지 않은 작업을 지정하기 위해 보상 기능을 정의하거나 제공합니다.
훈련은 반복적 인 과정입니다. 시뮬레이터에서 에이전트는 환경을 탐색하고 경험을 쌓습니다. 수집 된 경험은 신경망을 주기적으로 업데이트하는 데 사용되며 업데이트 된 모델은 더 많은 경험을 생성하는 데 사용됩니다.
AWS DeepRacer를 사용하여 자율 운전을 위한 차량을 교육합니다. 교육 과정을 시각화하는 것이 까다로울 수 있으므로 간단한 예를 살펴 보겠습니다.
이 예에서는 출발점에서 결승점까지 차량이 최단 경로로 갈 수 있도록 훈련시키려고 합니다.
우리는 환경environment 을 사각형 격자로 단순화했습니다. 각 사각형은 개별 상태를 나타내며, 목표 방향으로 차량을 위 또는 아래로 움직일 수 있습니다.
grid 내의 각 격자(사각형)마다 점수를 할당 할 수 있습니다. 그럼으로서 어떤 행동에 인센티브를 줄지 결정할 수 있게 됩니다.
여기서 우리는 트랙의 가장자리에있는 사각형들을 "정지 상태 stop states"로 지정하여 차량이 트랙에서 벗어 났음을 알립니다.
우리가 트랙의 중심을 주행하는 법을 배울 수 있게 하도록 차량에 인센티브를 부여하기를 원하기 때문에 센터 라인의 사각형에 높은 보상reward 을 설정하고 다른 곳에는 보다 낮은 보상reward을 설정합니다.
An episode
In reinforcement training, the vehicle will start by exploring the grid until it moves out of bounds or reaches the destination.
As it drives around, the vehicle accumulates rewards from the scores we defined. This process is called anepisode.
In this episode, the vehicle accumulates a total reward of2.2before reaching a stop state.
reinforcement training은 여기서 차량이 grid 를 탐색하기 시작하여 경계를 벗어나거나 목적지까지 도달하면 일단락 하게 됩니다.
차량이 움직이게 되면 우리가 지정한 점수에 따라 rewards 가 점점 쌓이게 됩니다. 이러한 과정을 에피소드라고 합니다. 위 에피소드에서 이 차량이 stop state에 도달하기 까지 총 2.2 점의 reward 를 쌓았습니다.
Iteration
Reinforcement learning algorithms are trained by repeated optimization of cumulative rewards.
Reinforcement learning algorithms은 누적된 rewards를 최적화 (최대화) 하기 위해 반복해서 훈련하게 됩니다.
The model will learn which action (and then subsequent actions) will result in the highest cumulative reward on the way to the goal.
이 모델은 우리가 목표로 하는 것을 달성하기 위한 최대화된 누적보상의 결과를 가져 올 수 있게 하는 것이 어떤 행동 (그리고 후속 행동)인가를 배우게 됩니다.
Learning doesn’t just happen on the first go; it takes some iteration. First, the agent needs to explore and see where it can get the highest rewards, before it can exploit that knowledge.
학습은 한번에 완성되지 않습니다. 반복이 필요합니다. 첫째, 에이전트는 knowledge를 취하기 전에 가장 높은 보상을 받을 수 있는 것이 어떤 것인지를 탐색해야 합니다.
Exploration
As the agent gains more and more experience, it learns to stay on the central squares to get higher rewards.
If we plot the total reward from each episode, we can see how the model performs and improves over time.
agent 는 점점 더 많은 경험을 쌓게 됩니다. 그러는 와중에 더 많은 점수를 얻으려면 중앙 격자를 계속 따라가야 한다는 것을 배우게 될 것입니다.
각 에피소드별 보상 점수가 어떤지를 보면 이 모델이 어떤 퍼포먼스를 보여주고 있고 얼마나 개선되고 있는지를 알 수 있습니다.
Exploitation and Convergence
With more experience, the agent gets better and eventually is able to reach the destination reliably.
경험이 많아질 수록 agent 는 점점 더 나아지고 결국에는 목표에 도달할 수 있게 됩니다.
Depending on the exploration-exploitation strategy, the vehicle may still have a small probability of taking random actions to explore the environment.
이 exploration-exploitation strategy(탐사-탐사 전략)에 근거해서 차량은 환경을 탐사하기 위한 랜덤한 액션 (무작위 행동)을 할 가능성이 점점 더 줄어들게 됩니다.
AWS DeepRacer에서 보상 기능 reward function은 현재 상태를 설명하고 숫자 보상 값을 반환하는 특정 매개 변수가있는 Python 함수입니다.
보상 기능으로 전달 된 매개 변수는 트랙의 위치와 방향, 관측 된 속도, 조향 각도 등과 같은 차량 상태의 다양한 측면을 나타냅니다.
우리는이 매개 변수 중 몇 가지를 탐색하고 트랙 주변을 따라 차량을 묘사하는 방법을 살펴 보겠습니다.
Position on track
Heading
Waypoints
Track width
Distance from center line
All wheels on track
Speed
Steering angle
1. Position on track
The parametersxandydescribe the position of the vehicle in meters, measured from the lower-left corner of the environment.
매개 변수 x 및 y는 환경의 왼쪽 하단 모서리에서 측정 한 차량의 위치를 미터 단위로 나타냅니다.
2. Heading
Theheadingparameter describes the orientation of the vehicle in degrees, measured counter-clockwise from the X-axis of the coordinate system.
heading 매개 변수는 좌표계의 X 축에서 시계 반대 방향으로 측정 한 차량의 방향을 도 단위로 나타냅니다.
3. Waypoints
Thewaypointsparameter is an ordered list of milestones placed along the track center.
Each waypoint inwaypointsis a pair[x, y]of coordinates in meters, measured in the same coordinate system as the car's position.
waypoints 매개 변수는 트랙 센터를 따라 배치 된 마일스톤의 정렬 된 목록입니다. waypoints 안에있는 각 waypoints 는 자동차의 위치에 대해 좌표계에서 측정 된 미터 단위의 좌표 [x, y] 쌍입니다.
4. Track width
Thetrack_widthparameter is the width of the track in meters.
track_widthparameter는 미터로 된 트랙의 너비 입니다.
5. Distance from center line
Thedistance_from_centerparameter measures the displacement of the vehicle from the center of the track.
Theis_left_of_centerparameter is a boolean describing whether the vehicle is to the left of the center line of the track.
distance_from_center 매개 변수는 트랙의 중심에서 차량의 변위를 측정합니다. is_left_of_center 매개 변수는 차량이 트랙의 중심선 왼쪽에 있는지 여부를 나타내는 boolean 값입니다.
6. All wheels on track
Theall_wheels_on_trackparameter is a boolean (true / false) which is true if all four wheels of the vehicle are inside the track borders, and false if any wheel is outside the track.
all_wheels_on_track 매개 변수는 boolean (true / false)이며 차량의 네 바퀴가 모두 트랙 테두리 안에 있으면 true이고, 하나라도 바퀴가 밖에 있으면 false가 됩니다.
7. Speed
Thespeedparameter measures the observed speed of the vehicle, measured in meters per second.
speedparameter는 초속 몇미터인가를 나타내는 차량의 관측된 속도입니다.
8. Steering angle
Thesteering_angleparameter measures the steering angle of the vehicle, measured in degrees.
This value is negative if the vehicle is steering right, and positive if the vehicle is steering left.
steering_angle 매개 변수는 차량의 조향 각도를 도 단위로 측정합니다. 이 값은 차량이 오른쪽으로 조향하는 경우 음수이고 차량이 좌회전하는 경우 양수입니다.
With all these parameters at your disposal, you can define a reward function to incentivize whatever driving behavior you like.
Let's see a few examples of reward functions and how they use the parameters to determine a reward. The following three reward functions are available as examples in the AWS DeepRacer console so you can try them out and see how they behave, or submit them to the AWS DeepRacer League.
이러한 모든 매개 변수를 마음대로 활용하면 원하는 운전 행동에 대한 인센티브를 주는 보상 기능을 정의 할 수 있습니다.
보상 기능의 몇 가지 예와 보상을 결정하기 위해 매개 변수를 사용하는 방법을 살펴 보겠습니다. AWS DeepRacer 콘솔에서 다음과 같은 세 가지 보상 기능을 사용할 수 있으므로 이를 시험해보고 어떻게 동작하는지 보거나 AWS DeepRacer League에 제출할 수 있습니다.
이 예에서는 자동차가 궤도에 머무를 때 높은 보상을주고 차가 궤도 경계를 벗어나는 경우 페널티를줍니다.
이 예제에서는 all_wheels_on_track, distance_from_center 및 track_width 매개 변수를 사용하여 자동차가 트랙에 있는지 여부를 확인하고 높은 경우 보상을 제공합니다.
이 기능은 트랙에 머무르는 것 이외의 특정 종류의 행동에 대해 보상하지 않으므로이 기능으로 교육받은 agent 는 특정 행동으로 수렴하는 데 시간이 오래 걸릴 수 있습니다.
이 예제에서 우리는 트랙의 중심에서 차가 얼마나 떨어져 있는지 측정하고, 차가 중심선에 가까이 있으면 더 높은 보상을줍니다.
이 예제에서는 track_width 및 distance_from_center 매개 변수를 사용하고 트랙의 중심에서 차가 멀어 질수록 보상이 줄어 듭니다.
이 예는 보상의 대상이되는 운전 행동의 유형에 따라 다르므로이 기능을 사용하여 교육을받은 agent는 트랙을 잘 따라갈 수 있습니다. 그러나 모서리의 가속이나 제동과 같은 다른 행동을 배우기는 쉽지 않습니다.
대안의 전략 alternative strategy은 자동차가 운전하는 방식에 관계없이 각 단계에 대해 지속적인 보상을 제공하는 것입니다.
이 예제는 입력 매개 변수를 사용하지 않고 각 단계마다 상수 보상 1.0을 반환합니다.
에이전트의 유일한 인센티브는 트랙을 성공적으로 끝내는 것이고, 더 빠르게 운전하거나 특정 경로를 따라갈 인센티브가 없습니다. 그것은 불규칙하게 행동 할 수 있습니다.
그러나 보상 기능은 agent의 행동을 제한하지 않으므로 예상치 못한 전략과 행동을 탐색하여 오히려 실적이 좋을 수도 있습니다.