Tôi đang thử nghiệm với các mô hình Theano khác nhau và sử dụng một chương trình giảng dạy có độ dài chuỗi ngày càng tăng. Làm thế nào tôi có thể dự đoán trước thời gian làm thế nào lớn để làm cho kích thước lô cho bất kỳ chiều dài chuỗi và mô hình nhất định để lấp đầy bộ nhớ của GPU? Để làm cho vấn đề tồi tệ hơn, nếu tôi vô tình sử dụng quá nhiều bộ nhớ, tôi nhận được một MemoryError và bộ nhớ trên GPU không được giải phóng, yêu cầu tôi phải khởi động lại quá trình để giải phóng bộ nhớ, và mất mạng của tôi, trước khi thử kích thước lô mới. Vì lỗi này không thể khôi phục được, rất khó để chỉ tăng kích thước lô cho đến khi ngoại lệ và sau đó quay trở lại.Cách tính toán mức sử dụng bộ nhớ GPU trong Theano?
Trả lời
Giả sử bạn biết số lượng phần tử được lưu trữ trên GPU, bạn có thể dễ dàng tính toán lượng bộ nhớ cần thiết để lưu trữ các phần tử đó.
Một ví dụ đơn giản:
import numpy as np
import theano.tensor as T
T.config.floatX = 'float32'
dataPoints = np.random.random((5000, 256 * 256)).astype(T.config.floatX)
#float32 data type requires 4 bytes
sizeinGBs = 5000 * 256 * 256 * 4/1024./1024/1024 + (some small over-head constant)
print "Data will need %2f GBs of free memory" % sizeInGB
Giả sử hằng số trên đầu là 0 sẽ in:
>>> Data will need 1.22 GBs of free memory
Nếu bạn đang sử dụng một card đồ họa NVIDIA và đã cài đặt CUDA trên máy tính của bạn sau đó bạn có thể dễ dàng nhận được tổng dung lượng bộ nhớ miễn phí trên GPU của bạn bằng cách sử dụng dòng mã sau:
import theano.sandbox.cuda.basic_ops as sbcuda
import numpy as np
import theano.tensor as T
T.config.floatX = 'float32'
GPUFreeMemoryInBytes = sbcuda.cuda_ndarray.cuda_ndarray.mem_info()[0]
freeGPUMemInGBs = GPUFreeMemoryInBytes/1024./1024/1024
print "Your GPU has %s GBs of free memory" % str(freeGPUMemInGBs)
#An operation is to be executed below
testData = shared(np.random.random((5000, 256 * 256)).astype(T.config.floatX), borrow = True)
print "The tasks above used %s GBs of your GPU memory. The available memory is %s GBs" % (str(freeGPUMemInGBs - GPUFreeMemoryInBytes/1024./1024/1024), str(GPUFreeMemoryInBytes/1024./1024/1024))
Sau đó, đầu ra là trong các định dạng sau (đối với máy tính của tôi ở đây):
>>> Your GPU has 11.2557678223 GBs of free memory
>>> The tasks above used 1.22077941895 GBs of your GPU memory. The available memory is 10.0349884033 GBs
Bằng cách theo dõi dung lượng bộ nhớ miễn phí và tính toán kích thước của mô hình của bạn/dữ liệu bạn có thể sử dụng tốt hơn bộ nhớ GPU. Tuy nhiên, hãy lưu ý vấn đề memory fragmentation vì nó có thể gây ra bất ngờ MemoryError
.
Dường như Theano không có bất kỳ cách tích hợp nào để ước tính kích thước bộ nhớ của một mô hình. Đặt cược tốt nhất của bạn là tạo một tập hợp con nhỏ của mô hình với kích thước đã biết và sử dụng các kỹ thuật ước lượng bộ nhớ được mô tả here trong sách hướng dẫn của Theano. Chúng tôi cũng sẽ cần phải tính đến cách các đối tượng của chúng tôi được thể hiện bên trong GPU (ví dụ chúng tôi đang sử dụng float32
hoặc float64
và mỗi byte mất bao nhiêu byte bên trong GPU).
Khi bạn có thể ước tính kích thước của một mô hình nhỏ, sau đó bạn có thể chiếu các ước tính này lên kích thước của một mô hình lớn hơn nhiều với độ chính xác hợp lý. Bạn sẽ có thể viết chức năng ước lượng bộ nhớ của riêng mình có thể lấy một số tính năng và quan sát, hoặc tensors hoặc các nút đồ thị dưới dạng tham số và trả về số lượng sử dụng bộ nhớ.
- 1. Cách bật Keras với Theano để sử dụng nhiều GPU
- 2. Bắt Theano để sử dụng GPU
- 3. Sử dụng bộ nhớ GPU progamatically
- 4. Cách hệ điều hành Android tính toán mức sử dụng bộ nhớ của một ứng dụng?
- 5. Cách tính toán mức sử dụng bộ nhớ như Trình quản lý Tác vụ?
- 6. Tính toán mức sử dụng bộ nhớ của cây B trong Java
- 7. Sử dụng GPU để tăng tốc độ tính toán BigInteger
- 8. TensorFlow: cách đăng nhập sử dụng bộ nhớ GPU (VRAM)?
- 9. openssl: giảm mức sử dụng bộ nhớ
- 10. Giới hạn CPU Tensorflow và mức sử dụng bộ nhớ
- 11. Cách biết mức sử dụng bộ nhớ trong C++
- 12. Split RNN Mức tiêu thụ bộ nhớ Đồng đều giữa các GPU trong TensorFlow
- 13. Giảm mức sử dụng bộ nhớ RabbitMQ
- 14. Tính toán Multi-GPU Cuda
- 15. Cách đo mức sử dụng bộ nhớ add-on firefox
- 16. Bộ nhớ phân bổ động trên GPU
- 17. Cách tính toán bộ làm việc riêng tư (bộ nhớ)?
- 18. Làm cách nào để tính toán bộ nhớ GPU cần thiết để chạy mô hình trong TensorFlow?
- 19. Sử dụng bộ nhớ máy tính trong Windows bằng Python
- 20. Đo mức sử dụng bộ nhớ của một trang web
- 21. GPU và CPU? Số lõi/luồng trong GPU để tăng tốc tính toán chương trình?
- 22. Giảm mức sử dụng bộ nhớ tối đa với @autoreleasepool
- 23. Java 6 Sử dụng bộ nhớ quá mức
- 24. Nhận tổng dung lượng bộ nhớ GPU?
- 25. Mức sử dụng bộ nhớ thường trú của Mongod thấp
- 26. Ước tính mức sử dụng bộ nhớ của trò chơi Cocos2d
- 27. Cách xác định mức sử dụng bộ nhớ trong ứng dụng .NET của tôi
- 28. GPU - Ánh xạ bộ nhớ hệ thống
- 29. Mức độ sử dụng bộ nhớ nào sẽ kích hoạt cảnh báo bộ nhớ của iOS?
- 30. iPad nhận cảnh báo bộ nhớ với mức sử dụng bộ nhớ thấp
Câu trả lời hay, cảm ơn! – Will
Vì vậy, có vẻ như phương pháp đáng tin cậy nhất sẽ hợp nhất cả của bạn và các đề xuất của bạn. Trước khi chạy một mô hình mới, tôi sẽ đo mức sử dụng bộ nhớ cho các chuỗi độ dài khác nhau và sử dụng để dự đoán lượng bộ nhớ sẽ được sử dụng cho các độ dài chuỗi khác và xác định kích thước lô tối ưu. Cảm ơn –