2016-06-09 50 views

Trả lời

23

Nó phụ thuộc một chút vào quan điểm mà bạn nhìn vào nó. Trong bất kỳ thiết lập đa điểm nào, đa GPU hoặc đa máy, bạn cần quyết định cách chia nhỏ tính toán của mình trên các tài nguyên song song. Trong một thiết lập nhiều nút, đa GPU, có hai lựa chọn rất hợp lý:

(1) Mô hình song song trong mô hình. Nếu một mô hình có đường dẫn tính toán dài, độc lập, thì bạn có thể chia mô hình trên nhiều GPU và có tính toán từng phần của nó. Điều này đòi hỏi sự hiểu biết cẩn thận về mô hình và các phụ thuộc tính toán.

(2) Đào tạo được nhân rộng. Khởi động nhiều bản sao của mô hình, đào tạo chúng, và sau đó đồng bộ hóa việc học của chúng (gradient được áp dụng cho trọng số của chúng & thành kiến).

released Inception model của chúng tôi có một số biểu đồ tốt trong readme cho biết cách hoạt động của cả hai GPU và phân phối.

Nhưng để tl; dr nguồn đó: Trong thiết lập đa GPU, tốt nhất là nên cập nhật đồng bộ mô hình bằng cách lưu trữ trọng số trên CPU (tốt, trong DRAM đính kèm). Nhưng trong một thiết lập đa máy, chúng tôi thường sử dụng một "máy chủ tham số" riêng biệt lưu trữ và truyền bá các bản cập nhật trọng lượng. Để mở rộng quy mô đó đến nhiều bản sao, bạn có thể phân tích các thông số trên nhiều máy chủ tham số.

Với GPU và máy chủ thông số nhiều, bạn sẽ thấy mình cẩn thận hơn về vị trí thiết bị sử dụng các cấu trúc như with tf.device('/gpu:1'), hoặc đặt trọng trên các máy chủ sử dụng tham số tf.train.replica_device_setter để gán nó vào /job:ps hoặc /job:worker. Nói chung, việc đào tạo trên một bó GPU trong một máy đơn giản hơn nhiều - phải mất hơn 16 GPU phân tán tương đương với hiệu suất của 8 GPU trong một máy - nhưng việc đào tạo được phân phối cho phép bạn mở rộng thậm chí con số lớn hơn và khai thác nhiều CPU hơn.

+0

Cảm ơn bạn rất nhiều vì đã giải thích! – xyd

+0

Liên kết khởi động bị hỏng. [Ở đây] (https://github.com/tensorflow/models/blob/16e4679834e1bf3e805703b197d377e35504fa09/tutorials/image/cifar10/cifar10_multi_gpu_train.py) là một ví dụ khác. – Albert

0

Vâng cho đến gần đây không có phiên bản cụm nguồn mở của lưu lượng tensor - chỉ có một máy với 0 hoặc nhiều GPU hơn. Bản phát hành mới v0.9 có thể có hoặc không thay đổi mọi thứ. Bài viết trong tài liệu phát hành ban đầu (tháng 10 năm 2015) cho thấy rằng Google có các giải pháp dựa trên cụm - nhưng chúng không có nguồn mở chúng.

Dưới đây là những gì các whitepaper nói:

3,2 Multi-Device Execution Khi một hệ thống có nhiều thiết bị, có hai biến chứng chính: quyết định thiết bị nào để đặt các tính toán cho mỗi nút trong đồ thị, và sau đó quản lý yêu cầu truyền thông dữ liệu trên các ranh giới thiết bị được ngụ ý bởi các quyết định này vị trí. Phần phụ này thảo luận về hai vấn đề này

+0

Cảm ơn bạn đã trả lời!Tuy nhiên, họ thông báo rằng họ đã phát hành phân phối tensorflow với v0.8 của họ, và họ có một trang hướng dẫn cho rằng: https://www.tensorflow.org/versions/r0.8/how_tos/distributed/index.html. Có phải đó không phải là phân phối thực sự được phân phối? – xyd

+0

đây là tin tuyệt vời! - chúng ta hãy hy vọng một ai đó bước vào những người "lên đến hơi nước" về điều này. – GavinBrelstaff

Các vấn đề liên quan