현재 GTX 1070에서 tensorflow로 신경망을 개발하고 프로파일 링하고 있습니다. 비싼 FFT 연산으로 인해 첫 번째 구현이 다소 비효율적이었습니다. 첨부 된 그림의 상단 타임 라인은 한 번의 교육 단계에서 약 115ms 걸리는 것으로 나타났습니다. 두 번째 (수학적으로 동등한) 구현은 훨씬 적은 시간을 소비하는 것처럼 보입니다. 한 단계는 10ms 미만입니다. Tensorflow 프로파일 링 타임 라인이 벽 시간과 일치하지 않습니다.
는 는 놀랍게도 두 가지 방법이 약 걸릴 (미안 해요, 난 아직 사진을 게시 할 수 있지 않다). 를 통해 파이썬에서 측정 된 동일한 시간 : 100 개 실행 걸릴 두 경우 모두build model, get train_op...
sess = tf.Session()
import timeit
t = timeit.default_timer()
for i in range(100):
sess.run(train_op)
dt = timeit.default_timer() - t
print(dt)
~ 17S> 내가 파이썬 오버 헤드에서 기대할 수있는 것보다 더 많은 100 * 115ms> 100 * 10ms의. 네트워크는 대기열을 사용하여 공급되지만 결과는 숫자가있는 배열을 그래프에 직접 입력하는 것과 동일하므로 empyt 대기열은 병목 현상이 될 수 없다고 결론을 냈습니다.
build model, get train_op...
sess = tf.Session()
def write_timeline(path):
from tensorflow.python.client import timeline
run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE)
run_metadata = tf.RunMetadata()
sess.run(train_op, options=run_options, run_metadata=run_metadata)
# Create the Timeline object, and write it to a json
tl = timeline.Timeline(run_metadata.step_stats)
ctf = tl.generate_chrome_trace_format()
with open(path, 'w') as f:
f.write(ctf)
write_timeline('timeline_1st_run.json')
write_timeline('timeline_2nd_run.json')
첫 번째 실행은 항상 tensorflow 여기에 몇 가지 최적화를 수행하거나 메모리를 할당되어 더 이상 해당 다음 실행 이상 걸릴 :
타임 라인은 내가 2 실점을 측정하는 차이로 기록 된 원칙에 처음으로?
사람이 inconistent 결과를 설명 할 수 있습니까? 프로파일 링 타임 라인에서 훨씬 빨라야한다는 것을 보여주는 두 번째 구현은 파이썬에서 측정 한 동일한 시간이 걸리는 이유는 무엇입니까?
을 다음과 같은 조금 느리게 실행 만들면서 파이썬 전송을 생략 할 수있다. 내 train_op은'tf.train.Optimizer.minimize (loss)'에 의해 생성되는데, 내부적으로'assign '과 같은 것을 확실히합니다. 'sess.run (train_op)'은'None'을 반환합니다.이 규칙이 파이썬을 배제한다는 것이 맞습니까? <-> TensorFlow 메모리가 문제로 전송됩니까? 'sess.run ([loss, train_op]) 호출하는 데 약간 시간이 걸립니다. 두 구현이 동일한 월 시간을 갖는 또 다른 이유가있을 수 있습니까? – sejanDee
'None'을 반환하면 파이썬 메모리 전송이 문제가 될 수 있습니다.효율적인 대 비효율적 인 구현은 타임 라인 (500 ~ 700 밀리 초)에서 비슷한 시간이 걸리는 것처럼 보이며 예열 후 벽 시계 시간에 얼마나 차이가 있습니까? –
위에서 첫 번째 타임 라인은 실제로 예열됩니다 (10ms 대 110ms). 예열 된 벽시계 시간은 160ms와 170ms이며, 측정은 평균 1000 회 실행됩니다. – sejanDee