시간이 없다고 하기보다는 이상하게 관리 하기 힘들어서... ㅜㅜ
요샌 뭘 제대로 하질 못하네 ㅜㅜ
에휴...;;
로봇 게이트 생성 기법을 4족 보행 -> 휴머노이드로 이전하면서, 해공간의 특성 분석이 필요해서 몇가지 샘플트리에 대해 적합도 공간 변화가 어떤지 체크해본 그래프이다. 4족 보행 로봇의 경우 네 발로 지탱하는 특성 때문에, 안정성에 대한 지표가 크게 변하지 않지만, 휴머노이드는 넘어짐이라는 특성이 발생하기 때문에 아주 작은 변화에도 결과에 매우 큰 영향을 주는 현상이 나타날 수 있다고 생각했고, 그것을 증명하기 위한 그래프 자료이다.
아래와 같은 각각의 트리에서 ERC 값, 즉 실수값을 P1, P2, ... ,P8 의 변수로 표현하여, 각각 0.001 씩 증가시키면서 해공간의 변화를 나타낸 것이다. x 축은 0.001씩 몇번이나 증가 시켰는지를 의미하며, y 축은 적합도값을 의미한다.
HP:
(/ (/ X -1.23399)
(- X -0.34431))
KP:
(/ (+ (sin 0.41949)
(* -0.09291 X))
(/ (cos 0.20874)
(sin 0.41949)))
AP:
(- -0.44653 -0.39964)
적합도 함수는 거리를 기반으로 한 형태이며, fitness = 0.8 * 전진거리 - 0.2 * 좌,우 틀어짐 으로 사용한다. 또한, 넘어지거나 유도한 방향으로 움직이지 않을 경우, 적합도를 0 으로 할당한다.
아는 만큼 보인다는 말은 공부를 하면 할수록 와닿는 말이다.
로봇의 보행에 대해 아무것도 모르던 시절, 그저 논문을 보면 아 그냥 그런가보다... 여기선 이렇게 저기선 저렇게... 이런식으로 오로지 보행의 "방법"에 대한 것만 보였다. 아무것도 모르던 상태에서 이것을 새롭게 개선시켜나갈 방법도 묘연하고, 이것에 대해 "다룬다" 라는 말이 무색할 정도로, 그저 이것이 어떤 것이다 를 아는 것도 힘들었었다.
하지만 그 당시엔 그것만으로도 충분했다. 그렇게 시간이 흐르고 흘러서 몇년이 지나고 나니, 로봇의 보행에 대한 수 많은 이론들을 접하게 되고, 이해하게 되었으며, 왜? 어째서? 라는 의문과 함께 "방법" 보다는 이것이 적용된 "이유" 라는 것에 초점이 더 맞춰지게 되었다.
방법론적으로 매우 단순한 것임에도 그것이 가지고 있는 타당한 "이유". 즉, 타당한 이유에 대한 적절한 접근 방식을 통해 목표를 향해 다가가는 느낌을 주는 그런 것들이 있다. 예전에는 알 수 없었던, 이제는 이해할 수 있고, 느낄 수 있는 그들이 가지고 있는 철학과 그 단순하면서 오묘함이 주는 아름다움을 보면서 다시 한번 아직은 멀었다는 생각을 하게 된다.
시간이 좀 더 흘러 가까운 미래 혹은 언젠가는 다른 사람들이 나의 철학과 결과에 주목하고, 그것에 공감할 수 있는 무엇인가를 하길 바란다.
더보기
연구노트를 작성한다는 취지와 그 내용은 분명히 좋지만, 연구 기록들을 전자화해서 보관하는 것이 일상화되어 있는데, 연구노트로 인정받기 위한 기록물은 반드시 종이와 펜을 이용하여 기록해야 한다고 한다. 전자화된 기록을 일일이 다시 종이와 펜을 이용해 재기록한다는 것은 생각보다 귀찮은 작업이다. 물론 애초에 전자화된 기록이 아닌 종이와 펜으로 모든 실험내용을 기록하면 되긴 한다. 그러나 상식적으로 전산 관련일을 하고 있는 사람들이 실험 기록이나 데이터에 대한 분석을 그것이 있는 자료에 바로 기록하는 것이 효율적일까? 그렇지 않으면 그것을 모두 손으로 기록하고 거기에 대한 분석을 추가적으로 기입하는것이 효율적일까?
물론 전자연구노트도 단점이 없는것은 아니다. 전자연구노트를 사용할 경우 해킹에 의해 모든 데이터를 누군가에게 빼앗길 수 있다는 단점이 있다. 그리고 그림을 그리는 것도 타블렛이나 여타 장비를 사용하거나 마우스 그림에 아주 익숙하지 않는 한 종이와 펜을 사용하는 것이 더 나을 수 있다. 그러나 대량의 데이터를 기록하기에 편리함과 효율성, 보존성을 따지자면 아무래도 종이와 펜 보다는 전자 연구노트가 더 낫지 않을까 싶다.
2008년 6월쯤인가 국내에서 전자화된 연구노트를 개발하여 무료로 보급한다는 기사를 본 적이 있다. 개인적으로 연구 기록을 남기기에 어떤 프로그램이 좋을까 이것저것 재고 있을 때에 이러한 기사를 보게되어 관심을 갖게 되었다.
더보기
1. Two (2) computers running Windows Vista or Windows 7 on the same network, one to host Visual Studio, and a target for running your application.
2. One (1) G92 or GT200 based GeForce, Quadro or Tesla GPU in the target machine.
어쩌면 대단히 중요한 일
처음 목표는 GA 의 연산과정중 Evaluation 만을 CUDA 로 수정하여 속도를 가속화시키는 것
그러나
이를 실제 코드로 구현하여 수행해 보았더니 생각보다 빠른 속도가 안나온다
그 이유인즉 CPU -> GPU 간 Memory Copy 연산 및 GPU 상의 Memory Allocation 때문인데, 다른 여러 논문에서 GPU 로 GA 를 수행할 때 속도가 증가되었다고 했던 것들을 검토해 보았더니 전부 GPU 상에서 모든 유전 연산을 수행하고 있었다.
분명 단일 연산만을 놓고 보았을 때는 GPU 상에서 Evaluation 을 한번 처리한 것이 가장 빠르지만, 유전 연산을 CPU 상에서 하게되면, 결국 Memory 할당과 복사를 반복하게 되어 속도가 느려지는 것이다. Evaluation 연산을 하기 위해서는 반드시 GPU 상의 메모리에 CPU 의 현재 상태를 복사해야 하니까 결국 이것때문에 반복적인 메모리 복사가 수행될 수 밖에 없는 것.
그렇다면 결론은 GPU 상에서 모든 연산을 처리하는 것인가?
뭐 중요한 요소중에 하나는 내 GPU 가 Geforce G105M 256M 이기 때문에 큰 메모리 할당도 어려울 뿐아니라, Stream Processor 수도 부족해서 제 속도 나오긴 어려울 수 밖에 없다는 건데...
동일한 실험 조건
static const int POPSIZE = 5000;
static const int MAXGENS = 100;
static const int ITERATION = 200;
static const int NVARS = 10;
GPU 상의 실험 결과(Geforce G105M 256MB)
Durations : 14118.000000 ms
CPU 상의 실험 결과(Intel Core2Duo P8600@2.4Ghz, 4 GB ram)
Durations : 10998 ms
다음엔 Geforce GTX270 876MB 에서 테스트 해볼 예정.
과연 어느정도 시점에서 Evaluation 작업만을 수행할 때 GPU 사용 작업이 속도가 대폭 상승할 수 있을 것인가?
이 글은 SHHyun님의 2009년 12월 30일의 미투데이 내용입니다.