Tôi làm việc trong môi trường mà tài nguyên tính toán được chia sẻ, nghĩa là, chúng tôi có một vài máy chủ được trang bị một vài GPU Nvidia Titan X.Làm thế nào để ngăn chặn lưu lượng tensorflow phân bổ toàn bộ bộ nhớ GPU?
Đối với các mô hình kích thước nhỏ đến vừa, 12GB của Titan X thường đủ cho 2-3 người để chạy đồng thời trên cùng một GPU. Nếu các mô hình đủ nhỏ để một mô hình duy nhất không tận dụng được toàn bộ các đơn vị tính toán của Titan X, điều này thực sự có thể dẫn đến tăng tốc so với chạy một quy trình đào tạo sau khi tiến hành. Ngay cả trong trường hợp truy cập đồng thời vào GPU không làm chậm thời gian đào tạo cá nhân, vẫn còn tốt khi có sự linh hoạt của việc có nhiều người dùng chạy những thứ trên GPU cùng một lúc.
Vấn đề với TensorFlow là theo mặc định, nó phân bổ toàn bộ lượng bộ nhớ khả dụng trên GPU khi nó được khởi chạy. Ngay cả đối với một mạng Neural 2 lớp nhỏ, tôi thấy rằng 12 GB của Titan X được sử dụng hết.
Có cách nào để làm cho TensorFlow chỉ phân bổ, nói, 4GB bộ nhớ GPU, nếu ai biết rằng số tiền đó là đủ cho một mô hình nhất định?
Cảm ơn bạn rất nhiều. Thông tin này khá ẩn trong tài liệu hiện tại. Tôi sẽ không bao giờ tìm thấy nó một mình :-) Nếu bạn có thể trả lời, tôi muốn yêu cầu thêm hai infos: 1- Điều này có giới hạn số lượng bộ nhớ đã từng sử dụng hay chỉ bộ nhớ ban đầu được phân bổ? (ví dụ, nó sẽ vẫn phân bổ bộ nhớ nhiều hơn nếu có nhu cầu cho nó bằng đồ thị tính toán) 2- Có cách nào để thiết lập điều này trên cơ sở cho mỗi GPU không? –
Lưu ý liên quan: đặt CUDA_VISIBLE_DEVICES để giới hạn TensorFlow thành một GPU duy nhất hoạt động cho tôi. Xem http://www.acceleware.com/blog/cudavisibledevices-masking-gpus – rd11
có vẻ như việc cấp phát bộ nhớ đi một chút so với yêu cầu, e..g tôi đã yêu cầu per_process_gpu_memory_fraction = 0.0909 trên một CPU 24443MiB và nhận các quá trình lấy 2627MiB –