Là điểm nổi chính xác duy nhất rất xấu?


8

Tôi đã xem xét một số các gói từ cao Perf nhiệm vụ xem giao dịch với tính toán GPU, và cho rằng hầu hết các GPU dường như là một bậc mạnh tại thực hiện arithmetics đơn chính xác hơn DP người , tôi đã tự hỏi:

  1. Tại sao không có gói nào cung cấp thêm quyền kiểm soát cho người dùng về loại độ chính xác cần thiết? Tôi có thể thấy nhiều ứng dụng trong thống kê trong đó SP arithologists (tức là số được mã hóa với độ chính xác 7 chữ số) đủ tốt để sử dụng thực tế (nếu tôi đánh giá quá cao lợi ích liên quan, hãy cho tôi biết).
  2. Là trăn linh hoạt hơn về điều này? Nếu vậy tại sao? Tôi không hiểu tại sao sự vắng mặt của loại 'đơn' trong R sẽ khiến cho một tùy chọn như vậy (cùng với cảnh báo) nói rằng GPUtools hoặc magma không thể (mặc dù tôi sẽ rất vui khi bị hiển thị sai).

Tái bút: Tôi đặc biệt nghĩ về các ứng dụng là các con số đã được chia tỷ lệ theo chiều và được căn giữa (để sự bất bình đẳng của Ch Quachev bị ràng buộc) theo chiều hướng.


2
Tôi thú nhận đã bị bí ẩn bởi điều này, mặc dù đã đấu tranh nhiều lần để hiểu ý nghĩa của nó: có câu hỏi nào ở đây không? "Thật tệ" là mơ hồ và không có người giới thiệu. Chính xác những gì bạn đang tìm kiếm để hiểu hoặc tìm hiểu?
whuber

@Whuber:> Câu hỏi của tôi được diễn đạt kém. Có lẽ là do nó không được biết đến: tôi đã đọc một số trang trắng về việc sử dụng GPU, (mặc dù, thật không may, nó không phải là tham chiếu lệnh R của GPUtools) và không thể hiểu tại sao tất cả các thử nghiệm đã được thực hiện trong DP. Tôi sẽ diễn đạt lại câu hỏi (và tiêu đề).
dùng603

Câu trả lời:


5

Từ tệp trợ giúp GPUtools , có vẻ như đó useSingle=TRUElà mặc định cho các chức năng.


@kwak: Tôi thấy câu trả lời ở trên hữu ích, nhưng nó thực sự không trả lời câu hỏi được đặt ra - "độ chính xác duy nhất có tệ không?" Có lẽ bạn nên điều chỉnh lại câu hỏi của bạn?
csgillespie

@csgellespie: bạn hoàn toàn chính xác. Tôi sẽ điều chỉnh lại câu hỏi này để nó có thể được sử dụng bởi những độc giả tương lai. Thật vậy, từ ngữ đặc biệt nghèo nàn.
user603

4
  1. Bởi vì trước GPU không có ý nghĩa thực tế về việc sử dụng các thực tế đơn lẻ; bạn không bao giờ có quá nhiều độ chính xác và bộ nhớ thường không phải là vấn đề. Và chỉ hỗ trợ tăng gấp đôi làm cho thiết kế R đơn giản hơn. (Mặc dù R hỗ trợ đọc / viết các số thực đơn.)
  2. Có, bởi vì Python nhằm mục đích tương thích hơn với các ngôn ngữ được biên dịch. Tuy nhiên, bạn đã đúng rằng các trình bao bọc của thư viện R có thể thực hiện chuyển đổi nhanh chóng (điều này tất nhiên cần có thời gian nhưng đây là một vấn đề nhỏ); bạn có thể thử các nhà bảo trì các gói GPU gửi email yêu cầu các thay đổi đó.

3

Tôi đoán rằng bằng cách lập trình GPU, bạn có nghĩa là lập trình thẻ nvidia? Trong trường hợp đó, các mã cơ bản gọi từ R và python đến C / CUDA .


Lý do đơn giản chỉ cung cấp độ chính xác duy nhất là vì đó là điều mà hầu hết các thẻ GPU hỗ trợ.

Tuy nhiên, kiến trúc nvidia Fermi mới không hỗ trợ độ chính xác gấp đôi. Nếu bạn đã mua một card đồ họa nvidia trong năm nay, thì đó có lẽ là một Fermi. Ngay cả ở đây mọi thứ không đơn giản:

  • Bạn nhận được một cú đánh hiệu suất nhẹ nếu bạn biên dịch với độ chính xác gấp đôi (hệ số hai nếu tôi nhớ chính xác).
  • Trên các thẻ rẻ hơn Thẻ Fermi, nvidia cố tình vô hiệu hóa độ chính xác gấp đôi. Tuy nhiên, có thể đạt được điều này và chạy các chương trình chính xác gấp đôi. Tôi đã quản lý để làm điều này trên GeForce GTX 465 trong linux.

Để trả lời câu hỏi trong tiêu đề của bạn, "Độ chính xác duy nhất có ổn không?", Nó phụ thuộc vào ứng dụng của bạn (xin lỗi câu trả lời tào lao!). Tôi cho rằng tất cả mọi người bây giờ sử dụng độ chính xác gấp đôi bởi vì nó không còn mang lại hiệu quả.

Khi tôi học hỏi về GPU, việc lập trình đột nhiên trở nên phức tạp hơn rất nhiều. Bạn phải lo lắng về những điều như:

  • warpsize và sắp xếp bộ nhớ của bạn đúng cách.
  • #threads trên mỗi hạt nhân.
  • gỡ lỗi là khủng khiếp - không có câu lệnh in trong câu lệnh nhân GPU
  • thiếu bộ tạo số ngẫu nhiên
  • Độ chính xác đơn.

@ccgillespie:> tôi nghĩ rằng câu hỏi của tôi có thể được diễn đạt kém. Trong gói tôi thấy (GPUtools, magma) độ chính xác kép dường như được sử dụng làm tiêu chuẩn (với việc mất hiệu suất mà bạn mô tả). Tôi đã tự hỏi tại sao độ chính xác duy nhất không được cung cấp như là một tùy chọn.
user603

@kwak: Các giá trị độ chính xác kép phải được chuyển đổi thành độ chính xác đơn bằng trình bao bọc. Các bọc chỉ cố gắng để có ích.
csgillespie

@ccgillespie:> có, nhưng có vẻ như trình bao bọc đi kèm với chi phí hiệu suất vượt quá yếu tố 2 bạn trích dẫn (một lần nữa, hãy sửa tôi nếu tôi sai về điều này) và trong một số trường hợp không có lợi ích hữu hình (tôi có thể nghĩ ra nhiều ứng dụng trong stat SP SP mỹ phẩm sẽ ổn thôi). Tôi đã tự hỏi liệu nó có ý nghĩa để yêu cầu một tùy chọn để tắt trình bao bọc nói.
user603

2
@kwak: Liếc vào tệp trợ giúp GPUtools, dường như đó useSingle=TRUElà mặc định trong các chức năng. Am i thiếu cái gì ở đây?
ars

@csgillespie: Hãy nhớ rằng, cho đến gần đây, hầu hết các thẻ nvidia gần đây không thể thực hiện tính toán chính xác gấp đôi. Yếu tố của 2 lần truy cập là những gì tôi quan sát được bằng cách sử dụng mã C / CUDA thô. Có một bọc python / R có thể làm điều này tồi tệ nhất.
csgillespie

1

Phần lớn các GPU trong lưu thông chỉ hỗ trợ điểm nổi chính xác duy nhất.

Theo như câu hỏi tiêu đề, bạn cần xem xét dữ liệu bạn sẽ xử lý để xác định xem độ chính xác duy nhất có đủ cho bạn không. Thông thường, bạn sẽ thấy rằng người độc thân hoàn toàn chấp nhận được> 90% dữ liệu bạn xử lý, nhưng sẽ thất bại một cách ngoạn mục trong 10% cuối cùng đó; trừ khi bạn có một cách dễ dàng để xác định liệu bộ dữ liệu cụ thể của bạn sẽ thất bại hay không, bạn vẫn bị mắc kẹt khi sử dụng độ chính xác kép cho mọi thứ.


Bạn có thể xây dựng một chút? Có vẻ như một số thuật toán lặp (đảo ngược ma trận, phân tách QR) dường như hoạt động tốt. Tôi cũng tò mò liệu tính không chính xác của SP có trở thành vấn đề đối với các hoạt động liên quan đến mảng lớn hơn không.
user603

Có hai phần của nó: 1) Dữ liệu thể hiện điều gì? 2) Làm thế nào để bạn xử lý dữ liệu? Nếu bạn đang xem hàng ngàn điểm dữ liệu từ một nghiên cứu y khoa, độ chính xác duy nhất có thể sẽ rất nhiều để định lượng sức khỏe của bệnh nhân và tôi nghi ngờ bạn sẽ cần gấp đôi. Mặt khác, hình học có thể yêu cầu độ chính xác đơn hoặc kép tùy thuộc vào tỷ lệ và thu phóng của bạn. Việc tính toán quỹ đạo của tàu thăm dò Sao Thổ sẽ luôn đòi hỏi gấp đôi, vì ngay cả những lỗi nhỏ cũng có thể ảnh hưởng mạnh đến kết quả. Bạn cần xem xét dữ liệu và quyết định dung sai của bạn là gì.
Benjamin Chambers

1
Nó sẽ phụ thuộc vào sự ổn định về số của thuật toán bạn đang sử dụng và vấn đề được điều hòa tốt như thế nào. Hãy nhớ rằng độ chính xác kép cho phép bạn truy cập vào các số nhỏ hơn cũng như số lớn hơn.
James

1
Không nhất thiết là số nhỏ hơn hoặc lớn hơn; hãy nhớ rằng, chúng ta đang đối phó với điểm nổi. Thay vào đó, nó cho phép bạn sử dụng các số lớn hơn và nhỏ hơn trong mối quan hệ với nhau, trong khi vẫn giữ các chữ số có nghĩa.
Benjamin Chambers

1

OK, một câu trả lời mới cho một câu hỏi cũ nhưng thậm chí còn phù hợp hơn bây giờ. Câu hỏi bạn đặt ra phải làm với độ chính xác hữu hạn, thông thường là lĩnh vực phân tích tín hiệu và toán học thực nghiệm.

Phao chính xác kép (DP) cho phép chúng ta giả vờ rằng các vấn đề chính xác hữu hạn không tồn tại, giống như chúng ta làm với hầu hết các vấn đề toán học trong thế giới thực. Trong toán học thực nghiệm không có giả vờ.

Phao chính xác đơn (SP) buộc chúng ta phải xem xét nhiễu lượng tử hóa. Nếu các mô hình học máy của chúng ta vốn đã loại bỏ nhiễu, chẳng hạn như lưới thần kinh (NN), lưới chập (CNN), lưới dư (ResN), v.v., thì SP thường cho kết quả tương tự với DP.

Phao một nửa độ chính xác (HP) (hiện được hỗ trợ trong bộ công cụ cuda 7.5) yêu cầu các hiệu ứng lượng tử hóa (nhiễu và làm tròn) được xem xét. Rất có thể chúng ta sẽ sớm thấy HP nổi trong các bộ công cụ học máy phổ biến.

Có công việc gần đây để tạo ra các tính toán độ chính xác thấp hơn trong phao cũng như các số chính xác cố định. Làm tròn ngẫu nhiên đã cho phép hội tụ để xử lý các CNN trong khi giải pháp phân kỳ mà không có nó. Những bài viết này sẽ giúp bạn cải thiện sự hiểu biết của bạn về các vấn đề với việc sử dụng các số chính xác hữu hạn trong học máy.

Để giải quyết câu hỏi của bạn:

SP không quá tệ. Khi bạn chỉ ra nó nhanh gấp đôi, nhưng nó cũng cho phép bạn đặt nhiều lớp hơn vào bộ nhớ. Một phần thưởng là trong việc tiết kiệm chi phí nhận dữ liệu trên và ngoài gpu. Các tính toán nhanh hơn và kết quả trên không thấp hơn trong thời gian hội tụ thấp hơn. Điều đó nói rằng, HP, đối với một số vấn đề, sẽ tốt hơn ở một số phần của mạng chứ không phải ở các phần khác.

  1. Dường như với tôi, nhiều bộ công cụ học máy xử lý SP và DP. Có lẽ ai đó có phạm vi kinh nghiệm rộng hơn với bộ công cụ sẽ thêm biệt hiệu của họ.
  2. Python sẽ hỗ trợ những gì bộ công cụ gpu hỗ trợ. Bạn không muốn sử dụng các loại dữ liệu python vì sau đó bạn sẽ chạy tập lệnh được diễn giải trên cpu.

Lưu ý rằng xu hướng trong các mạng thần kinh bây giờ là đi với các lớp rất sâu, với các hoạt động kéo dài hơn một vài ngày trên các cụm gpu nhanh nhất.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.