태그 보관물: Intel

Intel Nervana Neural Network Processors(NNP)

intel-nervana-chip-2-showcase

인텔에서 인수한 너바나Nervana와 함께 새로운 딥러닝 칩을 연말에 공개한다고 발표하였습니다. 일명 너바나 뉴럴 네트워크 프로세서(NNP)입니다. 이 칩은 온전히 딥러닝을 위하여 고안되었으며 아직 어떤식으로 공개될지는 미지수입니다. 하지만 글의 마지막 코멘트로 미루어 보아 페이스북과 함께 협업을 하고 있는 것으로 보입니다. 그렇다면 파이토치PyTorch나 카페2Caffe2에서 이 칩을 지원하지 않을까 생각이 듭니다. 적절한 가격으로 좋은 성능을 낸다면 텐서플로에서 지원할지가 큰 화두가 될 것 같습니다.

Intel’s DL Chip & Framework

intel-dlia-fpga-sc16

출처: datacenterfrontier.com

인텔에서 새로운 딥러닝 칩인 DLIA(Deep Learning Inference Accelerator)와 딥러닝 프레임워크 너바나 그래프(Nervana Graph) 를 발표(datacenterfrontier, nervanasys)했습니다. DLIA는 일전에 마이크로소프트가 발표했던 Catapult 처럼 FPGA 방식입니다. 이름에서 알 수 있듯이 모델 학습이 아니고 추론(Inference)에 맞춰져 개발되었습니다.

ngraph_preview_3-1

출처: nervanasys.com

너바나 그래프(ngraph)는 프론트엔드, ngraph API, 트랜스포머 세 부분으로 구성되어 있다고 합니다. 너바나 그래프의 큰 특징은 여러 딥러닝 프레임워크의 API 를 그대로 사용해서 그래프를 만들면 이를 트랜스포머를 사용하여 변환한 후 여러 하드웨어에 맞추어 실행시킬 수 있는 점입니다. 현재 프리 릴리즈에서 제공하는 프론트엔드는 너바나시스템즈의 네온(neon) 프레임워크와 구글의 텐서플로우 입니다. 아직 텐서플로우의 모든 API 를 지원하지는 않습니다만 아마도 빠르게 개발이 진행될 것으로 보입니다. 아래는 텐서플로우로 만든 그래프를 트랜스포머로 변경하여 실행시키는 간단한 예제 중 일부 코드입니다.

# write tensorflow models
x = tf.placeholder(tf.float32, [args.batch_size, 784])
t = tf.placeholder(tf.float32, [args.batch_size, 10])
w = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.matmul(x, w) + b
cost = tf.reduce_mean(-tf.reduce_sum(t * tf.log(tf.nn.softmax(y)), reduction_indices=[1]))
init = tf.initialize_all_variables()

# import graph_def
with tf.Session() as sess:
    graph_def = sess.graph_def
importer = TFImporter()
importer.parse_graph_def(graph_def)

# get handle of ngraph ops
x_ng, t_ng, cost_ng, init_op_ng = importer.get_op_handle([x, t, cost, init])

# transformer and computations
transformer = ngt.make_transformer()
updates = SGDOptimizer(args.lrate).minimize(cost_ng)
train_comp = transformer.computation([cost_ng, updates], x_ng, t_ng)
init_comp = transformer.computation(init_op_ng)
transformer.initialize()

# train
mnist = input_data.read_data_sets(args.data_dir, one_hot=True)
init_comp()
for idx in range(args.max_iter):
    batch_xs, batch_ys = mnist.train.next_batch(args.batch_size)
    cost_val, _ = train_comp(batch_xs, batch_ys)
    print("[Iter %s] Cost = %s" % (idx, cost_val))

위 코드에서 importer.parse_graph_def 대신 importer.parse_protobuf 를 사용하면 텐서플로우의 SummaryWriter 로 저장한 모델을 불러서 임포트 시킬 수 있다고 합니다. 즉 다른 사람이 만든 그래프를 코드 레벨이 아니고 데이터 레벨로 공유 받아서 ngraph 를 실행시킬 수 있습니다. ngraph 의 또 하나의 재미있는 특징은 텐서의 차원에 네이밍을 하여 재사용 가능한 Axis 를 도입한 점입니다. 딥러닝 모델들이 텐서의 차원을 맞추는 귀찮니즘을 동반하고 있다는 걸 잘 캐치한 것 같습니다.

인텔은 작년에 FPGA 분야의 선두 업체인 알테라(Altera)를 인수했고 지난 8월에는 너바나(Nervana) 시스템즈를 인수하였습니다. DLIA 와 ngraph 는 그 이후에 내놓는 첫 결과물인 것 같습니다. 앞으로는 인텔이 칩 분야 뿐만 아니라 프레임워크에서도 어떤 성과를 내놓을지 기대를 해봐도 좋을 것 같습니다.

Intel 64byte instruction to Linux kernel for deep learning

img_0997
인텔의 최신 아키텍처에 포함될 뉴럴 네트워크를 위한 512bit(64byte) 명령어 세트가 리눅스 커널에 포함되었다고 합니다. 딥러닝을 위한 하드웨어로는 Nvidia GPU가 기본이 되는 현재 상황을 바꾸어 보려는 인텔의 노력이 기대됩니다. 조금 더 자세한 내용은 퀘벡 대학의 다니얼 르미르(Daniel Lemire) 교수의 블로그와 리눅스 커널 패치를 참고하세요.

DL Chip Race

card-hero2-800x550

출처: 마이크로소프트 리서치

어제 마이크로소프트가 개발하고 있는 딥러닝을 위한 칩 개발 프로젝트 ‘Catapult’에 대해 크게 보도가 되었습니다. 캐타펄트(Catapult)는 마이크로소프트에서 수년간 개발해 왔고 최근 클라우드에 실전 배치된 것으로 알려졌습니다. 이 칩은 FPGA(field programmable gate array) 타입이어서 재프로그래밍(reprogrammable)이 가능합니다. 와이어드(Wired)에 따르면 마이크로소프트가 이런 타입을 채택한 것은 딥러닝 알고리즘이 발전하면서 새로운 연산방식에 효과적으로 대응할 수 있기 때문이라고 합니다. TPU 방식이라면 아마도 구글은 계속 새로운 칩을 설계해야만 할 것이라고 보았습니다. 하지만 캐타펄트(Catapult)가 TPU 보다는 성능이 떨어진다고 합니다.

이 소식에 이어 바이두가 오늘 딥러닝을 위한 칩 벤치마킹 자료를 공개하였습니다. 딥벤치(DeepBench)는 딥러닝을 위해 사용할 수 있는 칩을 제조하는 메이커들의 경쟁을 이끌고 연구자들이 원하는 하드웨어를 선택할 수 있도록 도움을 주기 위해서라고 합니다. 이 벤치마크에 사용된 코드는 깃허브에 커밋되어 있습니다. 이 벤치마크는 딥러닝 프레임워크를 대상으로 한 것은 아니고 행렬연산이나 콘볼루션 연산 같은 저수준의 작업에 대한 성능을 평가한 것입니다.

딥러닝에 대한 경쟁은 학계에서 프레임워크로 또 하드웨어로까지 빠르게 확산되는 것 같습니다. 현재는 엔비디아(Nvidia)와 인텔(Intel)만이 딥벤치 결과에 참여했고 점차 확대될 것으로 보입니다. 하지만 구글이 TPU를 테스트해 줄지는 의문이네요. 딥벤치가 활성화되고 나서 바이두가 폭발적인 성능을 내는 칩을 내놓으려는 건 아닐런지…

Intel + Nervana

screen-shot-2016-08-08-at-12-16-04-pm딥 러닝을 위한 소프트웨어와 하드웨어 칩을 모두 만드는 너바나(Nervana) 시스템즈가 어제 인텔에 인수되었다는 소식을 블로그를 통해 공지했습니다. 예상컨대 이 인수는 딥 러닝 칩 분야의 선두인 엔비디아(Nvidia)와 경쟁하기 위해서 일것입니다. 대체적으로 너바나의 인수소식을 환영하는 분위기입니다. 아마도 경쟁자들이 많을 수록 더 싸고 좋은 시스템들이 만들어지리라 기대하기 때문이겠죠.

우연의 일치일까요. 거의 동시에 OpenAI의 설립자 중 하나인 엘론 머스크(Elon Musk)는 엔비디아가 OpenAI에게 DGX-1 컴퓨터를 기부한다고 밝혔습니다. 구체적으로 언제 얼만큼이 제공될지는 알려지지 않았습니다.

이와는 별개로 얼마전 머신러닝 소프트웨어 회사인 투리(Turi)가 애플에 인수되었습니다. 투리는 카를로스 구스트린(Carlos Guestrin)이 설립한 회사로 이전 이름은 Dato 였습니다. 카를로스는 워싱톤 대학의 아마존 교수(Amazon professor)로 아내 에밀리 폭스(Emily Fox)와 함께 코세라의 머신러닝 코스를 운영하고 있습니다. 투리의 소프트웨어 중 판다스(Pandas)의 클론격인 SFrame은 오픈소스로 공개되어 있고 머신러닝 라이브러리인 GraphLab Create는 연구용으로 라이센스를 제공하고 있습니다.(카를로스와 에밀리의 코세라 강좌는 SFrame와 GraphLab Create에 맞춰져 있습니다)

투리의 소프트웨어는 누구나 쉽게 머신러닝을 사용하는 것에 촛점을 맞추고 있습니다. 애플이 굳이 이런 종류의 패키지를 필요로 하는지 고개를 갸우뚱하게 만듭니다. 오히려 좋은 오픈소스 하나가 사라지게 될까 걱정이네요.

(업데이트) 지난 주에 엔비디아가 OpenAI에 DGX-1 첫 시제품을 제공했다고 블로그를 통해 알렸습니다. 젠슨 황 엔비디아 대표가 직접 들고갔다고 하네요.

15openai_inside_crowd_web

출처: 엔비디아 블로그