9 minute read

악어가 살 것만 같은 플로리다의 습지



들어가며

풍문에 의하면 오렌지와 악어의 땅 플로리다에서 그 유명한 PLDI 학회가 열린다 하였다. PL 학회에 한번도 가 보지 못한 나로서는 솔깃한 소식이었다. 그러나 애석하게도 이번에 우리 연구실에서는 아무도 논문을 내지 않았기에 이번 PLDI는 나와 별 인연이 없는 듯 보였다. 그러던 중 허기홍 교수님께 문득 연락이 왔다. PLMW, 즉 PLDI에서 열리는 멘토링 워크샵에 참여하고 싶은지 의사를 물어보셨다. 나의 답은 물론 YES였다. 그리하여 6월 17일부터 21일까지 5일간 플로리다에서 PLMW와 PLDI를 참석하게 되었다.



목표 세우기

무엇을 하든 목표를 세우는 것이 중요하다. 항상 목표를 염두에 두고 있어야 작은 기회도 놓치지 않을 수 있기 때문이다. 이번 PLDI에서 나의 목표는 세 가지였다. 참고로 발표세션을 열심히 듣는다 등의 목표는 너무 기본이기 때문에 제외하였다.

  1. 친구 만들기
  2. 발표 세션에서 질문하기
  3. 식사 자리에서 옆 사람에게 말 걸기

사실 세 가지 모두 사람과 관련된 목표였다. 그렇기 때문에 실제로 사람을 만나는 학회에 가야먄 경험할 수 있는 것들이다. 결론부터 말하자면, 위의 세가지 목표를 모두 달성할 수 있었다. 따라서 남은 지면에는 이 세 가지 목표를 어떻게 달성하였는지, 그리고 그 외에 무엇을 경험하였는지에 대해 적어보려 한다.



목표 이루기

친구 만들기

이번 학회에서 만난 친구는 모두 세명이다. Jiani Huang, Ziyang Li, 그리고 Mayank Keoliya. 이들과의 만남은 예상치 못하게 튜토리얼 세션에서 시작되었다.

Scallop 튜토리얼

Scallop은 뉴로심볼릭(Neurosymbolic) 프로그래밍 언어이다. 뉴로심볼릭은 인공신경망의 Neuro와 논리적인 프로그래밍 이론의 Symbolic을 합성하여 만든 용어다. 따라서 인공지능과 PL의 장점을 결합하는 한 시도의 결과라고 볼 수 있다. 한창 우리 연구실에서 인공지능과 PL이 어떻게 접목될 수 있을 지 논의가 뜨거울 때 교수님께서 Scallop을 언급하신 적이 있었다. 그런데 이번 PLDI 튜토리얼 리스트에서 Scallop을 보게 되니 반가운 마음에 재호님과 함께 들으러 갔다. 튜토리얼은 별도로 신청이 필요 없어서 그냥 가서 앉아 있었는데, 나와 재호님을 포함해 총 5명만 참석한 단란한 튜토리얼이었다. 이 튜토리얼을 진행한 것이 Jiani와 Ziyang였고, 나머지 3명의 참가자 중 한명이 Mayank였다. Jiani과 Ziyang은 허기홍 교수님이 포닥을 하신 Mayur Naik 그룹의 학생이었고, Mayank는 곧 그 그룹으로 가는 신입생이었다.

뜻밖의 점심 여정

사실 튜토리얼만 진행하고 끝났으면 그냥 안면만 익힌 정도였겠지만 우연한 기회로 외부 식당에서 점심 식사도 같이 하게 되었다. 점심 시간에 맞춰 튜토리얼이 끝났고, 참가자들이 이런저런 질문을 하는 동안 나는 그냥 앉아서 기다리고 있었다. 그 후 용기를 내어 혹시 괜찮으면 점심을 같이 먹어도 되냐 물어보았고 마침 거기 같이 있던 남아 있던 Mayank까지 함께 점심을 먹기로 했다. 점심을 먹으러 학회 식사장으로 이동을 하는데, 아뿔싸 식사가 동났다는 것이었다. 다행히 마침 Ziyang은 차가 있었고, 덕분에 우리는 밖으로 나가 식사를 하게 되었다. 이런 우연이 겹쳐 우리끼리 맘 편히 이야기를 나눌 수 있었고 주로 Scallop의 뒷 이야기를 들으면서 점심을 먹었다.

그 이후

Scallop 튜토리얼은 5일간 진행된 학회의 첫 날에 진행되었다. 그래서 그 이후로도 쉬는 시간마다 새로 사귄 친구들을 만나 이야기를 나눌 수 있었다. 사실 학회장에 가면 쉬는 시간마다 좀 뻘쭘해지는데, 우연히 마주치면 방금 들은 세션 어땠냐고 물어볼 사람이 있다는 것이 참 다행이었다.

느낀 점

Jiani와 Ziyang은 각각 5년차, 3년차의 박사과정이었는데 이미 논문도 많이 썼고, Scallop과 같은 언어 프레임워크를 만들었다는 것이 대단했다. 튜토리얼을 하며 느꼈지만, 튜토리얼도 굉장히 잘 준비되어 있었고 심지어 VS Code에는 Scallop용 코드 하이라이트 플러그인이 있었다. 또한 논문 발표도 있었는데, 발표의 수준이 굉장해서 슬라이드도 멋있고 전달력도 좋았다. 제한 시간이 15분이었는데, 정확히 15분에 끝나는 걸 보고 감탄했던 기억이 난다. Mayank은 뒤에 나오겠지만 2저자로 참여한 논문이 최우수 논문으로 선정되었다. 세계 곳곳에 이런 친구들이 있어야 더 자극을 받고 더 성장할 수 있을 것 같다.

왼쪽부터 Mayank, 나, 재호님, Jiani, Ziyang


발표 세션에서 질문하기

발표 세션에서 질문하는 것은 생각보다 어렵다. 우선 영어로 해야 한다는 점이 첫 난관이다. 그리고 내 질문이 발표에서 이미 나온 내용이 아닌지 확신이 있어야 당당하게 질문을 할 수 있다. 그래서 발표 내용을 잘 이해한 상태 + 질문이 떠오르는 상태가 되어야 질문을 할 수 있다. 왜냐하면 발표를 들어도 질문이 딱히 없을 수 있기 때문이다.

첫째날에 컴파일과 머신러닝 세션은 흥미로웠지만 질문을 할 여지가 없었다. 발표 내용을 따라잡기에 급급했던 기억이 난다. 다행히 마음을 다잡은 둘째날 합성 세션에서는 질문을 많이 할 수 있었다. 5개 발표중 3개의 발표에 대해 질문하러 마이크 앞에 나갔다. 재미있는 경험이었다.


식사 자리에서 옆 사람에게 말 걸기

사실 이 목표는 가장 힘겹게 간신히 이룬 목표이다. 마지막 날 아침에 식탁에 같이 앉은 사람과 5분 정도 얘기를 한 거였는데, 그마저도 그 사람이 어제 잠을 잘 못 잤다고 해 피곤하다며 곧 사그라들었다. 딱히 얘기할 게 없어서 그랬나보다. 막상 하려고 보니 이게 가장 어려운 일이었다. 심지어 어떤 날은 마음을 먹고 누군가 이미 있는 테이블로 가려 했지만 용기가 안나 그냥 빈 테이블로 가서 혼자 식사한 적도 있었다. 그래도 계속 연습을 하다보면 다음엔 더 잘 할 수 있을 것이다.



재밌었던 발표들

컴파일 세션

Don’t Look UB: Exposing Sanitizer-Eliding Compiler Optimizations1
프로그램 안전벨트(Sainitzer)는 안전한 프로그램 실행을 위해 곳곳에 동적으로 프로그램 실행을 점검하는 코드를 삽입하는데, 이러한 코드 삽입은 근본적으로 프로그램의 성능을 저하시킨다. 원래 안하던 일을 더 하게 되었으니 성능 저하는 당연한 일이다. 따라서 성능 저하를 최소화하기 위해 컴파일러는 프로그램 안전벨트도 최적화를 하게 되는데, 이런 최적화가 가끔 프로그램 안전벨트를 없애버리기도 한다고 한다. 논문의 저자들은 이를 잡아내기 위해 최적화를 한 것과 안 한것으로 비교 테스팅(Differential Testing)을 진행하여 프로그램 안전벨트가 없어지는지를 확인하는 방법을 제안하였다. 사실 연구적인 방법보다도 이 문제를 어떻게 발견했는지 비하인드 스토리가 더 궁금해지는 연구였다. 왠지 본인이 노가다를 통해 디버깅을 하다가 발견한 이슈인것 같은데, 그런 스토리를 알면 더 재미있을 것 같다.

머신러닝 세션

Scallop: A Language for Neurosymbolic Programming2
위에서 언급한 Scallop 튜토리얼을 진행한 Jiani와 Ziyang이 발표한 논문이다. 앞서 말한 것처럼 Scallop은 뉴로심볼릭 프로그래밍 언어로, 뉴럴 네트워크와 논리적인 프로그래밍 언어를 결합한 언어이다. Scallop으로 작성된 프로그램은 두 파트로 나뉘는데, 하나는 파이썬으로 작성된 뉴럴 네트워크 파트이고, 다른 하나는 Datalog 기반의 언어로 작성된 논리 파트이다. 이 두 파트는 서로 상호작용을 하며 학습을 진행하게 된다. 즉, Datalog로 작성된 프로그램 부분도 역전파(Back Propagate)되어 신경망의 학습에 영향을 준다. 그래서 학습 전에 인코딩한 논리규칙에 의해 내려진 결론에서 발생하는 오차(Loss)까지도 학습에 반영되는 것이다. 아이디어도 아이디어이지만, 언어를 이렇게까지 잘 만들어서 실제로 사용할 수 있게 만든 것이 대단하다고 생각한다. 참고로 Scallop외에도 이번에 여러 논문에서 Datalog에 기반해 자기 접근을 구현한 것을 보았는데, 확실히 Datalog가 널리 사랑받는 언어인것 같았다.

합성 세션

ImageEye: Batch Image Processing using Program Synthesis3
프로그램 합성이 이렇게도 사용되는구나 싶은 논문이었다. 이 논문은 이미지 처리를 위한 프로그램을 합성하는 것을 목표로 한다. 즉 사용자가 원하는 작업을 한 이미지에 대해서 예제로 주면, 미리 정해진 몇가지 작업들을 조합하여 사용자가 원하는 작업을 수행하는 프로그램을 합성하는 것이다. 예를 들어 인물을 추출하거나, 사람이 자전거를 타고 있는 사진을 찾는 등의 작업을 수행할 수 있다. 이때, 이 작업들은 저자들이 정의한 도메인 특화 언어로 정의되어 합성된다. 이 도메인 특화 언어는 앞단에서 CNN에 의해 분석된 이미지 정보를 활용하기 때문에 마찬가지로 뉴로심볼릭한 언어라고 할 수 있다. 실제로 구글 포토 등의 서비스에 들어간다면 참 편리할 것으로 보인다.

One Pixel Adversarial Attacks via Sketched Programs4
이 논문은 프로그램 합성을 이용해 하나의 픽셀을 조작함으로써 이미지 분류기의 분류 결과를 바꾸는 것을 목표로 한다. 하나의 픽셀이라고 해도 컬러이미지라면 (이미지 크기 * 256 * 256 * 256) 크기의 탐색 공간이 주어지기 때문에 무작위로 생성하는 것은 비효율 적이다. 따라서 이 논문에서는 프로그램 합성을 이용해 효율적으로 탐색 공간을 줄이는 방법을 제안한다. 하지만 가장 충격이었던 점은 애초에 한 픽셀을 통해 이미기 분류가 바뀔 수 있다는 점이었다. 발표 세션이 끝나고 질문을 했는데, ImageNet 처럼 크기가 큰 이미지에 대해서도 (어느정도) 동작하며, 육안으로는 차이가 큰 다른 분류 결과로도 (어느정도) 바꿀 수 있다고 한다. 이 정도면 애초에 학습을 할 때 한 픽셀 정도의 노이즈에 대해서는 저항을 가지게끔 학습을 시켜야 하는게 아닌가 하는 생각이 들었다.

검증과 테스팅 세션

Mostly Automated Proof Repair for Verified Libraries5
이 논문은 Coq와 같은 검증 보조 도구를 이용해 기존에 한번 검증된 라이브러리가 수정된 경우, 이에 맞추어 그 검증도 수정하는 방법을 제안한다. 원래 프로그램 검증이라는 것이 고난도의 작업이지만 프로그램이라는 것은 계속 변화하기 마련이고, 그때마다 사람이 새로 검증해주는 것은 비효율적(고통)이다. 따라서 이 논문은 기존에 작성되었던 검증을 재활용하여 (반)자동으로 재검증하는 방법을 제안하는 것이다. 이때 반자동인 이유는 새로운 프로그램에 대한 명세는 사람이 주어야 한다. 하지만 그 외의 작업, 예를 들어 불변자(Invariant) 등은 자동으로 추론할 수 있다. 기존에 있던 기술들이 지속적 개발(Continuous Integration) 환경으로 오면 새로운 문제가 생기는데(반복성), 이 때 좋은 방법은 지속적 개발 환경에서만 존재하는 자원(이전 정보)을 활용하여 문제를 해결하는 것이다. 이 연구도 그렇고, 허기홍 교수님의 Drake도 그랬다. 참고로 이 논문은 Mayank가 2저자로 참여한 논문이다.



잡다한 이야기

PLMW

PLDI에 참가한 원래 목적이었던 PLMW는 PL 학회에 참석하는 학생들을 위한 멘토링 워크샵이다. PLDI 뿐 아니라 POPL과 ICFP에서도 열리는 듯 했다. 다만 이번 PLMW는 참가자들간의 교류가 딱히 있지는 않았고 발표 위주로 진행되었다. 기억에 남는 것은 두 발표였다.

하나는 Emery D. Berger 교수님의 “How to conduct impactful research?” 발표였다. 모든 슬라이드에 심슨 애니메이션 스크린샷을 넣어서 발표를 진행하셨는데, 재미있는 발표를 준비한 것 같았다. 사실 핵심은 다음과 같았다. 필요한 연구를 하고, 그 연구의 결과가 사람들에게 사용되도록 하라는 것이다. 가장 인상적이었던 것은 성공한 연구의 기준이 논문이 출판되었는지가 아니라 실제 사용되는 도구를 만들었는지였다는 것이다. 한번은 필요한 연구라고 생각해서 논문을 냈고, 도구도 만들어 공개했는데 실제 사용자를 잘 고려하지 못해서 사용자가 없었다고 한다. 그런데 과감히 이 연구를 실패한 연구라고 하는 점을 보면서 굉장히 진취적인 연구자라는 것을 느꼈다.

또 다른 발표는 정확히는 발표가 아니라 커리어에 대한 패널 토론이었다. 여기서는 반복적으로 나온 얘기가 있었는데, 바로 “기업 인턴십을 많이 해라”였다. 그 이유는 진짜 필요한 연구가 뭔지 보고 듣고 몸으로 느낄 수 있기 때문이라도 한다. 하지만 사실 한국의 대학원생은 미국 대학원생과 환경이 좀 다르고, 나 같은 경우는 가정도 있기 때문에 미국 기업의 인턴으로 가는 것은 어려운 일이다. 그래서 내 대안은 무엇일지 생각해보았다. 결론은 그만큼 더 치열하게 귀를 기울여야 한다는 것이었다. 기업체 등에서 발표를 할 때면 꼭 참석해서 그들이 어떤 문제를 겪고 있는지, 어떤 연구가 필요한지를 들어봐야겠다는 생각이 들었다.

굉장히 큰 학회장

학회장에 들어가 처음 느낀 인상은 거대하다는 것이었다. 아무래도 이번 PLDI는 4년마다 열리는 FCRC 학회의 일부로 개최되어서 더 그런 것 같았다. 따라서 사람도 많고, 학회장도 거대했다. 호텔도 워낙 커서 분명 같은 건물 안에 있지만 방에서 학회장까지 급하게 걸어도 15분이나 걸렸다. PLDI에서 사용한 두개의 세션룸 중 하나는 규모가 워낙 커서 2000명이 넘는 인원을 수용할 수 있었다. 그래서 그런지 음향이나 화면도 굉장한 수준의 장비들을 사용했는데, 나중에 꼭 이런 장소에서 발표를 해보고 싶다는 생각이 들었다.

굉장히 큰 학회장 지도. 숙소에서 학회장까지 15분이 걸린다.
굉장히 큰 학회장.

자극적인 연구실

몰랐던 그룹인데, NUS의 Ilya Sergey 교수님의 그룹이 있다. 그런데 여기에서 이번 PLDI 최우수 논문상과 최우수 기록물상을 모두 받아갔다. 자극이 되었다. 우리 연구실도 곧 이런 연구실이 될 수 있을 것이다.

요상한 발표 슬라이드

발표 슬라이드 전체를 아이패드로 대충 끄적여서 준비한 사람이 있었다. 첫 장을 봤을 때는 재밌어서 웃었는데, 끝까지 그런 슬라이드일 줄은 예상하지 못했다. 나름 페이지마다 페이지 번호도 손수 써가며 벤치마크 테이블까지 손수 그린걸 보고 참 대단하다 생각했다.

요상한 슬라이드

Distinguished paper들의 특징

발표를 듣고 나면 대충 이런 생각이 든다. “간단한데, 잘 되더라!” 나만 이렇게 느낀 게 아니었다. Ziyang도, 이준영 박사님도 그렇다더라. 역시 차상길 교수님 말씀처럼 좋은 연구는 델타가 적어야 한다, 즉 간단해야 한다. DAFL도 충분히 간단하지 않나 하며 기대를 살짝 해본다.

한국인의 위상

PLDI 참가국 중 무려 3등, 5.2%를 차지해버렸다. 이제 우리나라도 무시 못할 PL 종주국이 되었다. 그 다음으로는 우리가 무시 못할 연구실이 되어야겠다.

한국인의 위상 1
한국인의 위상 2

모르는게 너무 많다!

이번 학회를 통해 가장 잘 알게 된 것은 내가 모르는게 너무 많다는 것이다. 보안 학회는 모르는게 많아도 그러려니했는데, PLDI에서는 마냥 그럴수가 없었다. 처음 듣는 키워드를 잔뜩 적어왔으니 이제 공부 많이 해야겠다.

시차적응은 힘들어…

이번 학회는 유독 시차 적응이 힘들었다. 한숨도 못 잔 날도 있었고, 많이 자봐야 4시간 정도였다. 소화도 잘 안되어 배로 힘들었던 것 같다. 그래서 그런지 돌아온 날에는 24시간동안 잠만 잤다. 다음 학회는 발표하러 가는 학회인데 체력 관리를 더 잘 해야겠다.

가끔 먹어야 맛있는 미국 음식들

학회에서 먹은 음식들은 가끔 한번씩 먹으면 맛있을 음식들이었다. 양이 많고, 간이 짠 음식들이 많아서 그런 것 같다.

미국 스테이크
미국 햄버거



돌아오며

PL 분야의 학회라 더 뜻 깊은 시간이 되었던 것 같다. 다음에 나의 연구 성과를 가지고 참가할 Usenix Security 학회가 더욱 기대가 된다. 그리고 다음 PL 학회에는 논문을 내고 가야겠다. 이번 출장을 지원해주시고 또 함께 해 주신 허기홍 교수님께, 또 출장 준비를 잘 도와 주신 나은진 선생님께 감사드리며 글을 맺는다.








각주

[1] Isemann, Raphael, et al. “Don’t Look UB: Exposing Sanitizer-Eliding Compiler Optimizations” PLDI (2023)
[2] Ziyang Li, Jiani Huang, and Mayur Naik “Scallop: A Language for Neurosymbolic Programming” PLDI (2023)
[3] Barnaby, Celeste, et al. “ImageEye: Batch Image Processing using Program Synthesis” PLDI (2023)
[4] Yuviler, Tom, and Dana Drachsler-Cohen “One Pixel Adversarial Attacks via Sketched Programs” PLDI (2023)
[5] Gopinathan, Kiran, Mayank Keoliya, and Ilya Sergey “Mostly Automated Proof Repair for Verified Libraries” PLDI (2023)