CUDA.jl 4.0 |  juliablogger.com

 – Beragampengetahuan
6 mins read

CUDA.jl 4.0 | juliablogger.com – Beragampengetahuan

Oleh: Tim Besard

Repost dari:

CUDA.jl 4.0 adalah rilis inovatif yang memperkenalkan penggunaan JLL untuk menyediakan perangkat CUDA. Ini memungkinkan kompilasi pustaka biner lain berdasarkan runtime CUDA dan menggunakannya bersama dengan CUDA.jl. Rilis ini juga menghadirkan peningkatan CUSPARSE, kemampuan untuk membatasi penggunaan memori, dan banyak perbaikan bug serta peningkatan kinerja.

Contents

JLL untuk artefak CUDA

Meskipun CUDA.jl telah menggunakan artefak biner untuk sementara waktu, CUDA.jl mengelola penginstalan dan pemilihannya secara manual, bukan dengan menggunakan paket JLL standar. Artefak kompleks ini digunakan oleh paket lain dan mempersulit pembuatan binari lain berdasarkan runtime CUDA.

Dengan CUDA.jl 4.0 kami sekarang menggunakan JLL untuk memuat driver dan runtime CUDA. Secara khusus, ada dua JLL yang sedang beraksi: CUDA_Driver_jll dan CUDA_Runtime_jll. Yang pertama bertanggung jawab untuk memuat pustaka driver CUDA (dapat ditingkatkan dengan versi yang kompatibel ke depan) dan menentukan versi CUDA yang didukung pengaturan Anda:

❯ JULIA_DEBUG=CUDA_Driver_jll julia
julia> using CUDA_Driver_jll
┌ System CUDA driver found at libcuda.so.1, detected as version 12.0.0
└ @ CUDA_Driver_jll
┌ System CUDA driver is recent enough; not using forward-compatible driver
└ @ CUDA_Driver_jll

Dengan driver yang diidentifikasi dan dimuat, CUDA_Runtime_jll dapat memilih toolkit yang kompatibel. Secara default, ini menggunakan perangkat terbaru yang didukung yang kompatibel dengan driver:

julia> using CUDA_Runtime_jlljulia> CUDA_Runtime_jll.cuda_toolkits
10-element Vector{VersionNumber}:
 v"10.2.0"
 v"11.0.0"
 v"11.1.0"
 v"11.2.0"
 v"11.3.0"
 v"11.4.0"
 v"11.5.0"
 v"11.6.0"
 v"11.7.0"
 v"11.8.0"julia> CUDA_Runtime_jll.host_platform
Linux x86_64 {cuda=11.8}

Seperti yang Anda lihat, runtime CUDA yang dipilih dikodekan di platform host. Ini memungkinkan Julia untuk secara otomatis memilih versi yang kompatibel dari paket biner lainnya. Misal kita install dan download SuiteSparse_GPU_jllsaat ini menyediakan build untuk CUDA 10.2, 11.0, dan 12.0, kode penyelesai komponen perangkat lunak mengetahui cara memuat build untuk CUDA 11.0 yang kompatibel dengan runtime CUDA 11.8 yang dipilih:

julia> using SuiteSparse_GPU_jlljulia> SuiteSparse_GPU_jll.best_wrapper
"~/.julia/packages/SuiteSparse_GPU_jll/.../x86_64-linux-gnu-cuda+11.0.jl"

Perubahan pada JLL memerlukan perubahan besar: JULIA_CUDA_VERSION dan JULIA_CUDA_USE_BINARYBUILDER variabel lingkungan telah dihapus dan diganti dengan opsi yang ditetapkan di lingkungan saat ini. Untuk kenyamanan, Anda dapat mengatur opsi ini dengan menelepon CUDA.set_runtime_version!:

❯ julia --project
julia> using CUDA
julia> CUDA.runtime_version()
v"11.8.0"julia> CUDA.set_runtime_version!(v"11.7")
┌ Set CUDA Runtime version preference to 11.7,
└ please re-start Julia for this to take effect.❯ julia --project
julia> using CUDA
julia> CUDA.runtime_version()
v"11.7.0"julia> using CUDA_Runtime_jll
julia> CUDA_Runtime_jll.host_platform
Linux x86_64 {cuda=11.7}

Preferensi yang diubah tercermin dalam platform host, yang berarti Anda dapat menggunakan mekanisme ini untuk memuat versi lain dari paket biner lainnya. Misalnya, jika Anda mengandalkan paket atau JLL yang tidak memiliki build untuk CUDA 12, Anda dapat menyetel opsi ke v"11.x" untuk memuat bangunan yang ada.

Untuk menemukan runtime lokal, Anda dapat mengatur versinya "local"akan menggantikan penggunaan CUDA_Runtime_jll melalui CUDA_Runtime_discovery.jlpaket yang kompatibel dengan API yang menggantikan JLL dengan mekanisme penemuan runtime lokal:

❯ julia --project
julia> CUDA.set_runtime_version!("local")
┌ Set CUDA Runtime version preference to local,
└ please re-start Julia for this to take effect.❯ JULIA_DEBUG=CUDA_Runtime_Discovery julia --project
julia> using CUDA
┌ Looking for CUDA toolkit via environment variables CUDA_PATH
└ @ CUDA_Runtime_Discovery
┌ Looking for binary ptxas in /opt/cuda
│   all_locations =
│    2-element Vector{String}:
│     "/opt/cuda"
│     "/opt/cuda/bin"
└ @ CUDA_Runtime_Discovery
┌ Debug: Found ptxas at /opt/cuda/bin/ptxas
└ @ CUDA_Runtime_Discovery
...

batas memori

Atas permintaan populer, dukungan memori terbatas telah dipulihkan. Fungsionalitas ini telah dihapus setelah beralih ke kumpulan memori CUDA, karena pengalokasi kumpulan memori belum mendukung batas memori. Menunggu peningkatan NVIDIA, kami telah menambahkan fungsionalitas untuk memberlakukan batas memori di pihak Julia, dalam bentuk dua variabel lingkungan:

  • JULIA_CUDA_SOFT_MEMORY_LIMIT: Ini adalah batas penasihat, digunakan untuk mengonfigurasi kumpulan memori, yang akan mengakibatkan kumpulan menyusut ke batas yang diperlukan di setiap titik sinkronisasi. Itu berarti tim untuk sementara dapat tumbuh di luar batas. Batas ini tidak tersedia saat menonaktifkan kumpulan memori (dengan JULIA_CUDA_MEMORY_POOL=none).

  • JULIA_CUDA_HARD_MEMORY_LIMIT: Ini adalah batas tetap, diperiksa sebelum setiap alokasi. Melakukannya relatif mahal, jadi batas lunak harus digunakan sebagai gantinya.

Nilai variabel ini dapat diformat sebagai jumlah byte, secara opsional diikuti oleh unit, atau sebagai persentase dari total memori perangkat. Misalnya: 100M, 50%, 1.5GiB, 10000.

peningkatan CUSPARSE

Berkat karya @amontoison, antarmuka CUSPARSE telah mengalami banyak perbaikan:

  • Dukungan yang lebih baik dari CuSparseMatrixCOO format dengan, khususnya, penambahan CuSparseMatrixCOO * CuVector dan CuSparseMatrixCOO * CuMatrix Kosmetik;

  • Kebiasaan khusus untuk -, +, * bekerja di antara matriks jarang (CuSparseMatrixCOO, CuSparseMatrixCSC dan CuSparseMatrixCSR) telah dikomunikasikan;

  • Rutinitas generik baru untuk pemindaian maju dan mundur dengan matriks segitiga jarang sekarang digunakan oleh \;

  • CuMatrix * CuSparseVector dan CuMatrix * CuSparseMatrix produk telah ditambahkan;

  • Konversi antara matriks jarang dan padat telah diperbarui untuk menggunakan proses yang lebih baru dan optimal;

  • Fungsi Julia tingkat tinggi untuk rangkaian proses BLAS 1 baru yang jarang, seperti produk mid-dot CuSparseVector;

  • Tambahan pengiriman yang hilang untuk mul! dan ldiv! fungsi;

  • Antarmuka hampir semua proses CUSPARSE baru ditambahkan oleh CUDA toolkit v"11.x".

Perubahan lainnya

  • Menghapus submodul CUDNN, CUTENSOR, CUTENSORNET dan CUSTATEVEC: Ini telah dipindahkan ke paket mereka masing-masing, cuDNN.jl, cuTENSOR.jl, cuTensorNet.jl dan cuStateVec.jl (perhatikan perubahan dalam hal kapitalisasi, sekarang mengikuti skema penamaan NVIDIA );

  • Hapus submodul NVTX: NVTX.jl harus digunakan sebagai gantinya, yang merupakan implementasi NVTX API yang lebih lengkap;

  • Dukungan untuk CUDA 11.8 (dukungan untuk CUDA 12.0 sedang dikerjakan);

  • Dukungan untuk Julia 1.9.

rilis backport

Karena CUDA.jl 4.0 adalah rilis buggy, dua rilis tambahan telah dibuat untuk memperbarui perbaikan bug dan beberapa fitur:

Software Terbaru Saat Ini



Aplikasi yang sedang trend saat ini

object oriented programming, programming language, programming adalah, web programming, belajar programming, tournament software, software, software adalah, contoh software, apa itu software, pengertian software, aplikasi, aplikasi penghasil uang, aplikasi bokep, aplikasi video, programming

#CUDA.jl #juliablogger.com

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *