PCEtLXtzdWJ0ZW1wbGF0ZSBjb21tb24vaGVhZGVyX2NvbW1vbn0tLT4JPCEtLXtpZiAkX0dFVFsnbW9kJ10gPT0gJ3ZpZXd0aHJlYWQnICYmICFlbXB0eSgkX0dbJ3RpZCddKX0tLT4KCTxsaW5rIHJlbD0iY2Fub25pY2FsIiBocmVmPSJodHRwczovL3d3dy5xaWRhbzEyMy5jb20vYmJzL3RocmVhZC17JF9HWyd0aWQnXX0tMS0xLmh0bWwiIC8+Cgk8IS0te2Vsc2VpZiAkX0dFVFsnbW9kJ10gPT0gJ2ZvcnVtZGlzcGxheScgJiYgIWVtcHR5KCRfR1snZmlkJ10pfS0tPgoJPGxpbmsgcmVsPSJjYW5vbmljYWwiIGhyZWY9Imh0dHBzOi8vd3d3LnFpZGFvMTIzLmNvbS9iYnMvZm9ydW0teyRfR1snZmlkJ119LTEuaHRtbCIgLz4KCTwhLS17ZWxzZWlmICRfR0VUWydtb2QnXSA9PSAnZ3VpZGUnfS0tPgoJPGxpbmsgcmVsPSJjYW5vbmljYWwiIGhyZWY9Imh0dHBzOi8vd3d3LnFpZGFvMTIzLmNvbS9iYnMvZ3VpZGUvIiAvPgoJPCEtLXtlbHNlaWYgJF9HWydiYXNlc2NyaXB0J10gPT0gJ2ZvcnVtJyAmJiAoZW1wdHkoJF9HRVRbJ21vZCddKSB8fCAkX0dFVFsnbW9kJ10gPT0gJ2luZGV4Jyl9LS0+Cgk8bGluayByZWw9ImNhbm9uaWNhbCIgaHJlZj0iaHR0cHM6Ly93d3cucWlkYW8xMjMuY29tL2Jicy8iIC8+Cgk8IS0tey9pZn0tLT4KCXJgbmB0PG1ldGEgbmFtZT0iYXBwbGljYXRpb24tbmFtZSIgY29udGVudD0iJF9HWydzZXR0aW5nJ11bJ2JibmFtZSddIiAvPgoJPG1ldGEgbmFtZT0ibXNhcHBsaWNhdGlvbi10b29sdGlwIiBjb250ZW50PSIkX0dbJ3NldHRpbmcnXVsnYmJuYW1lJ10iIC8+Cgk8IS0te2lmICRfR1snc2V0dGluZyddWydwb3J0YWxzdGF0dXMnXX0tLT48bWV0YSBuYW1lPSJtc2FwcGxpY2F0aW9uLXRhc2siIGNvbnRlbnQ9Im5hbWU9JF9HWydzZXR0aW5nJ11bJ25hdnMnXVsxXVsnbmF2bmFtZSddO2FjdGlvbi11cmk9e2VjaG8gIWVtcHR5KCRfR1snc2V0dGluZyddWydkb21haW4nXVsnYXBwJ11bJ3BvcnRhbCddKSA/ICRfR1snc2NoZW1lJ10uJzovLycuJF9HWydzZXR0aW5nJ11bJ2RvbWFpbiddWydhcHAnXVsncG9ydGFsJ10gOiAkX0dbc2l0ZXVybF0uJ3BvcnRhbC5waHAnfTtpY29uLXVyaT17JF9HW3NpdGV1cmxdfXtJTUdESVJ9L3BvcnRhbC5pY28iIC8+PCEtLXsvaWZ9LS0+Cgk8bWV0YSBuYW1lPSJtc2FwcGxpY2F0aW9uLXRhc2siIGNvbnRlbnQ9Im5hbWU9JF9HWydzZXR0aW5nJ11bJ25hdnMnXVsyXVsnbmF2bmFtZSddO2FjdGlvbi11cmk9e2VjaG8gIWVtcHR5KCRfR1snc2V0dGluZyddWydkb21haW4nXVsnYXBwJ11bJ2ZvcnVtJ10pID8gJF9HWydzY2hlbWUnXS4nOi8vJy4kX0dbJ3NldHRpbmcnXVsnZG9tYWluJ11bJ2FwcCddWydmb3J1bSddIDogJF9HW3NpdGV1cmxdLidmb3J1bS5waHAnfTtpY29uLXVyaT17JF9HW3NpdGV1cmxdfXtJTUdESVJ9L2Jicy5pY28iIC8+Cgk8IS0te2lmICRfR1snc2V0dGluZyddWydncm91cHN0YXR1cyddfS0tPjxtZXRhIG5hbWU9Im1zYXBwbGljYXRpb24tdGFzayIgY29udGVudD0ibmFtZT0kX0dbJ3NldHRpbmcnXVsnbmF2cyddWzNdWyduYXZuYW1lJ107YWN0aW9uLXVyaT17ZWNobyAhZW1wdHkoJF9HWydzZXR0aW5nJ11bJ2RvbWFpbiddWydhcHAnXVsnZ3JvdXAnXSkgPyAkX0dbJ3NjaGVtZSddLic6Ly8nLiRfR1snc2V0dGluZyddWydkb21haW4nXVsnYXBwJ11bJ2dyb3VwJ10gOiAkX0dbc2l0ZXVybF0uJ2dyb3VwLnBocCd9O2ljb24tdXJpPXskX0dbc2l0ZXVybF19e0lNR0RJUn0vZ3JvdXAuaWNvIiAvPjwhLS17L2lmfS0tPgoJPCEtLXtpZiBoZWxwZXJfYWNjZXNzOjpjaGVja19tb2R1bGUoJ2ZlZWQnKX0tLT48bWV0YSBuYW1lPSJtc2FwcGxpY2F0aW9uLXRhc2siIGNvbnRlbnQ9Im5hbWU9JF9HWydzZXR0aW5nJ11bJ25hdnMnXVs0XVsnbmF2bmFtZSddO2FjdGlvbi11cmk9e2VjaG8gIWVtcHR5KCRfR1snc2V0dGluZyddWydkb21haW4nXVsnYXBwJ11bJ2hvbWUnXSkgPyAkX0dbJ3NjaGVtZSddLic6Ly8nLiRfR1snc2V0dGluZyddWydkb21haW4nXVsnYXBwJ11bJ2hvbWUnXSA6ICRfR1tzaXRldXJsXS4naG9tZS5waHAnfTtpY29uLXVyaT17JF9HW3NpdGV1cmxdfXtJTUdESVJ9L2hvbWUuaWNvIiAvPjwhLS17L2lmfS0tPgoJPCEtLXtpZiAkX0dbJ2Jhc2VzY3JpcHQnXSA9PSAnZm9ydW0nICYmICRfR1snc2V0dGluZyddWydhcmNoaXZlciddfS0tPgoJCTxsaW5rIHJlbD0iYXJjaGl2ZXMiIHRpdGxlPSIkX0dbJ3NldHRpbmcnXVsnYmJuYW1lJ10iIGhyZWY9InskX0dbc2l0ZXVybF19YXJjaGl2ZXIvIiAvPgoJPCEtLXsvaWZ9LS0+Cgk8IS0te2lmICFlbXB0eSgkcnNzaGVhZCl9LS0+JHJzc2hlYWQ8IS0tey9pZn0tLT4KCTwhLS17aWYgd2lkdGhhdXRvKCl9LS0+CgkJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBpZD0iY3NzX3dpZHRoYXV0byIgdHlwZT0idGV4dC9jc3MiIGhyZWY9J3skX0dbJ3NldHRpbmcnXVsnY3NzcGF0aCddfXtTVFlMRUlEfV93aWR0aGF1dG8uY3NzP3tWRVJIQVNIfScgLz4KCQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+SFRNTE5PREUuY2xhc3NOYW1lICs9ICcgd2lkdGhhdXRvJzwvc2NyaXB0PgoJPCEtLXsvaWZ9LS0+Cgk8IS0te2lmICRfR1snYmFzZXNjcmlwdCddID09ICdmb3J1bScgfHwgJF9HWydiYXNlc2NyaXB0J10gPT0gJ2dyb3VwJ30tLT4KCQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ7JF9HW3NldHRpbmddW2pzcGF0aF19Zm9ydW0uanM/e1ZFUkhBU0h9Ij48L3NjcmlwdD4KCTwhLS17ZWxzZWlmICRfR1snYmFzZXNjcmlwdCddID09ICdob21lJ30tLT4KCQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ7JF9HW3NldHRpbmddW2pzcGF0aF19aG9tZS5qcz97VkVSSEFTSH0iPjwvc2NyaXB0PgoJPCEtLXtlbHNlaWYgJF9HWydiYXNlc2NyaXB0J10gPT0gJ3BvcnRhbCd9LS0+CgkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ieyRfR1tzZXR0aW5nXVtqc3BhdGhdfXBvcnRhbC5qcz97VkVSSEFTSH0iPjwvc2NyaXB0PgoJPCEtLXsvaWZ9LS0+Cgk8IS0te2lmICRfR1snYmFzZXNjcmlwdCddICE9ICdwb3J0YWwnICYmICRfR0VUWydkaXknXSA9PSAneWVzJyAmJiBjaGVja19kaXlfcGVybSgkdG9waWMpfS0tPgoJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InskX0dbc2V0dGluZ11banNwYXRoXX1wb3J0YWwuanM/e1ZFUkhBU0h9Ij48L3NjcmlwdD4KCTwhLS17L2lmfS0tPgoJPCEtLXtpZiAkX0dFVFsnZGl5J10gPT0gJ3llcycgJiYgY2hlY2tfZGl5X3Blcm0oJHRvcGljKX0tLT4KCQk8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBpZD0iZGl5X2NvbW1vbiIgaHJlZj0ieyRfR1snc2V0dGluZyddWydjc3NwYXRoJ119e1NUWUxFSUR9X2Nzc19kaXkuY3NzP3tWRVJIQVNIfSIgLz4KCTwhLS17L2lmfS0tPgo8L2hlYWQ+Cgo8Ym9keSBpZD0ibnZfeyRfR1tiYXNlc2NyaXB0XX0iIGNsYXNzPSJwZ197Q1VSTU9EVUxFfXtpZiAkX0dbJ2Jhc2VzY3JpcHQnXSA9PT0gJ3BvcnRhbCcgJiYgQ1VSTU9EVUxFID09PSAnbGlzdCcgJiYgIWVtcHR5KCRjYXQpfSB7JGNhdFsnYm9keWNzcyddfXsvaWZ9IiBvbmtleWRvd249ImlmKGV2ZW50LmtleUNvZGU9PTI3KSByZXR1cm4gZmFsc2U7Ij4KCTxkaXYgaWQ9ImFwcGVuZF9wYXJlbnQiPjwvZGl2PjxkaXYgaWQ9ImFqYXh3YWl0aWQiPjwvZGl2PgoJPCEtLXtpZiAkX0dFVFsnZGl5J10gPT0gJ3llcycgJiYgY2hlY2tfZGl5X3Blcm0oJHRvcGljKX0tLT4KCQk8IS0te3RlbXBsYXRlIGNvbW1vbi9oZWFkZXJfZGl5fS0tPgoJPCEtLXsvaWZ9LS0+Cgk8IS0te2lmIGNoZWNrX2RpeV9wZXJtKCR0b3BpYyl9LS0+CgkJPCEtLXt0ZW1wbGF0ZSBjb21tb24vaGVhZGVyX2RpeW5hdn0tLT4KCTwhLS17L2lmfS0tPgoJPCEtLXtpZiBDVVJNT0RVTEUgPT0gJ3RvcGljJyAmJiAkdG9waWMgJiYgZW1wdHkoJHRvcGljWyd1c2VoZWFkZXInXSkgJiYgY2hlY2tfZGl5X3Blcm0oJHRvcGljKX0tLT4KCQkkZGl5bmF2Cgk8IS0tey9pZn0tLT4KCTwhLS17aWYgZW1wdHkoJHRvcGljKSB8fCAkdG9waWNbJ3VzZWhlYWRlciddfS0tPgoJCTwhLS17aWYgJF9HWydzZXR0aW5nJ11bJ21vYmlsZSddWydhbGxvd21vYmlsZSddICYmICghJF9HWydzZXR0aW5nJ11bJ2NhY2hlaW5kZXhsaWZlJ10gJiYgISRfR1snc2V0dGluZyddWydjYWNoZXRocmVhZG9uJ10gfHwgJF9HWyd1aWQnXSkgJiYgKCRfR0VUWydkaXknXSAhPSAneWVzJyB8fCAhJF9HRVRbJ2luYWpheCddKSAmJiAoJF9HWydtb2JpbGUnXSAhPSAnJyAmJiAkX0dbJ2Nvb2tpZSddWydtb2JpbGUnXSA9PSAnJyAmJiAkX0dFVFsnbW9iaWxlJ10gIT0gJ25vJyl9LS0+CgkJCTxkaXYgY2xhc3M9InhpMSBibSBibV9jIj4KCQkJICAgIHtsYW5nIHlvdXJfbW9iaWxlX2Jyb3dzZXJ9PGEgaHJlZj0ieyRfR1snc2l0ZXVybCddfWZvcnVtLnBocD9tb2JpbGU9eWVzIj57bGFuZyBnb190b19tb2JpbGV9PC9hPiA8c3BhbiBjbGFzcz0ieGcxIj58PC9zcGFuPiA8YSBocmVmPSIkX0dbJ3NldHRpbmcnXVsnbW9iaWxlJ11bJ25vbW9iaWxldXJsJ10iPntsYW5nIHRvX2JlX2NvbnRpbnVlfTwvYT4KCQkJPC9kaXY+CgkJPCEtLXsvaWZ9LS0+CgkJPCEtLXtpZiAhZW1wdHkoJF9HWydzZXR0aW5nJ11bJ3Nob3J0Y3V0J10pICYmICRfR1snbWVtYmVyJ11bY3JlZGl0c10gPj0gJF9HWydzZXR0aW5nJ11bJ3Nob3J0Y3V0J119LS0+CgkJCTxkaXYgaWQ9InNob3J0Y3V0Ij4KCQkJCTxzcGFuPjxhIGhyZWY9ImphdmFzY3JpcHQ6OyIgaWQ9InNob3J0Y3V0Y2xvc2VpZCIgdGl0bGU9IntsYW5nIGNsb3NlfSI+e2xhbmcgY2xvc2V9PC9hPjwvc3Bhbj4KCQkJCXtsYW5nIHNob3J0Y3V0X25vdGljZX0KCQkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6OyIgaWQ9InNob3J0Y3V0dGlwIj57bGFuZyBzaG9ydGN1dF9hZGR9PC9hPgoKCQkJPC9kaXY+CgkJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5zZXRUaW1lb3V0KHNldFNob3J0Y3V0LCAyMDAwKTs8L3NjcmlwdD4KCQk8IS0tey9pZn0tLT4KCQk8ZGl2IGlkPSJ0b3B0YiIgY2xhc3M9ImNsIj4KCQkJPCEtLXtob29rL2dsb2JhbF9jcG5hdl90b3B9LS0+CgkJCTxkaXYgY2xhc3M9IndwIj4KCQkJCTxkaXYgY2xhc3M9InoiPgoJCQkJCTwhLS17bG9vcCAkX0dbJ3NldHRpbmcnXVsndG9wbmF2cyddWzBdICRuYXZ9LS0+CgkJCQkJCTwhLS17aWYgaXNfYXJyYXkoJG5hdikgJiYgJG5hdlsnYXZhaWxhYmxlJ10gJiYgKCEkbmF2WydsZXZlbCddIHx8ICgkbmF2WydsZXZlbCddID09IDEgJiYgJF9HWyd1aWQnXSkgfHwgKCRuYXZbJ2xldmVsJ10gPT0gMiAmJiAkX0dbJ2FkbWluaWQnXSA+IDApIHx8ICgkbmF2WydsZXZlbCddID09IDMgJiYgJF9HWydhZG1pbmlkJ10gPT0gMSkpfS0tPiRuYXZbY29kZV08IS0tey9pZn0tLT4KCQkJCQk8IS0tey9sb29wfS0tPgoJCQkJCTwhLS17aG9vay9nbG9iYWxfY3BuYXZfZXh0cmExfS0tPgoJCQkJPC9kaXY+CgkJCQk8ZGl2IGNsYXNzPSJ5Ij4KCQkJCQk8YSBpZD0ic3dpdGNoYmxpbmQiIGhyZWY9ImphdmFzY3JpcHQ6OyIgb25jbGljaz0idG9nZ2xlQmxpbmQodGhpcykiIHRpdGxlPSJ7bGFuZyBzd2l0Y2hfYmxpbmR9IiBjbGFzcz0ic3dpdGNoYmxpbmQiPjwvYT4KCQkJCQk8IS0te2hvb2svZ2xvYmFsX2NwbmF2X2V4dHJhMn0tLT4KCQkJCQk8IS0te2xvb3AgJF9HWydzZXR0aW5nJ11bJ3RvcG5hdnMnXVsxXSAkbmF2fS0tPgoJCQkJCQk8IS0te2lmIGlzX2FycmF5KCRuYXYpICYmICRuYXZbJ2F2YWlsYWJsZSddICYmICghJG5hdlsnbGV2ZWwnXSB8fCAoJG5hdlsnbGV2ZWwnXSA9PSAxICYmICRfR1sndWlkJ10pIHx8ICgkbmF2WydsZXZlbCddID09IDIgJiYgJF9HWydhZG1pbmlkJ10gPiAwKSB8fCAoJG5hdlsnbGV2ZWwnXSA9PSAzICYmICRfR1snYWRtaW5pZCddID09IDEpKX0tLT4kbmF2W2NvZGVdPCEtLXsvaWZ9LS0+CgkJCQkJPCEtLXsvbG9vcH0tLT4KCQkJCQk8IS0te2lmIGVtcHR5KCRfR1snZGlzYWJsZWR3aWR0aGF1dG8nXSkgJiYgJF9HWydzZXR0aW5nJ11bJ3N3aXRjaHdpZHRoYXV0byddfS0tPgoJCQkJCQk8YSBocmVmPSJqYXZhc2NyaXB0OjsiIGlkPSJzd2l0Y2h3aWR0aCIgb25jbGljaz0id2lkdGhhdXRvKHRoaXMpIiB0aXRsZT0ie2lmIHdpZHRoYXV0bygpfXtsYW5nIHN3aXRjaF9uYXJyb3d9e2Vsc2V9e2xhbmcgc3dpdGNoX3dpZGV9ey9pZn0iIGNsYXNzPSJzd2l0Y2h3aWR0aCI+PCEtLXtpZiB3aWR0aGF1dG8oKX0tLT57bGFuZyBzd2l0Y2hfbmFycm93fTwhLS17ZWxzZX0tLT57bGFuZyBzd2l0Y2hfd2lkZX08IS0tey9pZn0tLT48L2E+CgkJCQkJPCEtLXsvaWZ9LS0+CgkJCQkJPCEtLXtpZiAkX0dbJ3VpZCddICYmICFlbXB0eSgkX0dbJ3N0eWxlJ11bJ2V4dHN0eWxlJ10pfS0tPjxhIGlkPSJzc2xjdCIgaHJlZj0iamF2YXNjcmlwdDo7IiBvbm1vdXNlb3Zlcj0iZGVsYXlTaG93KHRoaXMsIGZ1bmN0aW9uKCkge3Nob3dNZW51KHsnY3RybGlkJzonc3NsY3QnLCdwb3MnOiczNCEnfSl9KTsiPntsYW5nIGNoYW5nZXN0eWxlfTwvYT48IS0tey9pZn0tLT4KCQkJCQk8IS0te2lmIGNoZWNrX2RpeV9wZXJtKCR0b3BpYyl9LS0+CgkJCQkJCSRkaXluYXYKCQkJCQk8IS0tey9pZn0tLT4KCQkJCTwvZGl2PgoJCQk8L2Rpdj4KCQk8L2Rpdj4KCgkJPCEtLXtpZiAhSVNfUk9CT1R9LS0+CgkJCTwhLS17aWYgJF9HWyd1aWQnXSAmJiAhJF9HWydzZXR0aW5nJ11bJ2JiY2xvc2VkJ10gJiYgZW1wdHkoJF9HWydtZW1iZXInXVsnZnJlZXplJ10pICYmICRfR1snbWVtYmVyJ11bJ2dyb3VwaWQnXSAhPSA1fS0tPgoJCQk8dWwgaWQ9Im15cHJvbXB0X21lbnUiIGNsYXNzPSJwX3BvcCIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4KCQkJCTxsaT48YSBocmVmPSJob21lLnBocD9tb2Q9c3BhY2UmZG89cG0iIGlkPSJwbV9udGMiIHN0eWxlPSJiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDUwJTsiPjxlbSBjbGFzcz0icHJvbXB0X25ld3N7aWYgZW1wdHkoJF9HW21lbWJlcl1bbmV3cG1dKX1fMHsvaWZ9Ij48L2VtPntsYW5nIHBtX2NlbnRlcn08L2E+PC9saT4KCQkJCTwhLS17aWYgJF9HWydzZXR0aW5nJ11bJ2ZvbGxvd3N0YXR1cyddfS0tPgoJCQkJCTxsaT48YSBocmVmPSJob21lLnBocD9tb2Q9Zm9sbG93JmRvPWZvbGxvd2VyIj48ZW0gY2xhc3M9InByb21wdF9mb2xsb3dlcntpZiBlbXB0eSgkX0dbbWVtYmVyXVtuZXdwcm9tcHRfbnVtXVtmb2xsb3dlcl0pfV8wey9pZn0iPjwvZW0+PCEtLXtsYW5nIG5vdGljZV9pbnRlcmFjdGl2ZV9mb2xsb3dlcn0tLT57aWYgJF9HW21lbWJlcl1bbmV3cHJvbXB0X251bV1bZm9sbG93ZXJdfSgkX0dbbWVtYmVyXVtuZXdwcm9tcHRfbnVtXVtmb2xsb3dlcl0pey9pZn08L2E+PC9saT4KCQkJCQk8IS0te2lmICRfR1ttZW1iZXJdW25ld3Byb21wdF0gJiYgJF9HW21lbWJlcl1bbmV3cHJvbXB0X251bV1bZm9sbG93XX0tLT4KCQkJCQkJPGxpPjxhIGhyZWY9ImhvbWUucGhwP21vZD1mb2xsb3ciPjxlbSBjbGFzcz0icHJvbXB0X2NvbmNlcm4iPjwvZW0+PCEtLXtsYW5nIG5vdGljZV9pbnRlcmFjdGl2ZV9mb2xsb3d9LS0+KCRfR1ttZW1iZXJdW25ld3Byb21wdF9udW1dW2ZvbGxvd10pPC9hPjwvbGk+CgkJCQkJPCEtLXsvaWZ9LS0+CgkJCQk8IS0tey9pZn0tLT4KCQkJCTwhLS17aWYgJF9HW21lbWJlcl1bbmV3cHJvbXB0XX0tLT4KCQkJCQk8IS0te2xvb3AgJF9HWydtZW1iZXInXVsnY2F0ZWdvcnlfbnVtJ10gJGtleSAkdmFsfS0tPgoJCQkJCQk8bGk+PGEgaHJlZj0iaG9tZS5waHA/bW9kPXNwYWNlJmRvPW5vdGljZSZ2aWV3PSRrZXkiPjxlbSBjbGFzcz0ibm90aWNlXyRrZXkiPjwvZW0+PCEtLXtlY2hvIGxhbmcoJ3RlbXBsYXRlJywgJ25vdGljZV8nLiRrZXkpfS0tPig8c3BhbiBjbGFzcz0icnEiPiR2YWw8L3NwYW4+KTwvYT48L2xpPgoJCQkJCTwhLS17L2xvb3B9LS0+CgkJCQk8IS0tey9pZn0tLT4KCQkJCTwhLS17aWYgZW1wdHkoJF9HWydjb29raWUnXVsnaWdub3JlX25vdGljZSddKX0tLT4KCQkJCQk8bGkgY2xhc3M9Imlnbm9yZV9ub3RpY2VsaSI+PGEgaHJlZj0iamF2YXNjcmlwdDo7IiBvbmNsaWNrPSJzZXRjb29raWUoJ2lnbm9yZV9ub3RpY2UnLCAxKTtoaWRlTWVudSgnbXlwcm9tcHRfbWVudScpIiB0aXRsZT0ie2xhbmcgdGVtcG9yYXJpbHlfdG9fcmVtaW5kfSI+PGVtIGNsYXNzPSJpZ25vcmVfbm90aWNlIj48L2VtPjwvYT48L2xpPgoJCQkJPCEtLXsvaWZ9LS0+CgkJCTwvdWw+CgkJCTwhLS17L2lmfS0tPgoJCQk8IS0te2lmICRfR1sndWlkJ10gJiYgIWVtcHR5KCRfR1snc3R5bGUnXVsnZXh0c3R5bGUnXSl9LS0+CgkJCQk8ZGl2IGlkPSJzc2xjdF9tZW51IiBjbGFzcz0iY2wgcF9wb3AiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+CgkJCQkJPCEtLXtpZiAhJF9HW3N0eWxlXVtkZWZhdWx0ZXh0c3R5bGVdfS0tPjxzcGFuIGNsYXNzPSJzc2xjdF9idG4iIG9uY2xpY2s9ImV4dHN0eWxlKCcnKSIgdGl0bGU9IntsYW5nIGRlZmF1bHR9Ij48aT48L2k+PC9zcGFuPjwhLS17L2lmfS0tPgoJCQkJCTwhLS17bG9vcCAkX0dbJ3N0eWxlJ11bJ2V4dHN0eWxlJ10gJGV4dHN0eWxlfS0tPgoJCQkJCQk8c3BhbiBjbGFzcz0ic3NsY3RfYnRuIiBvbmNsaWNrPSJleHRzdHlsZSgnJGV4dHN0eWxlWzBdJykiIHRpdGxlPSIkZXh0c3R5bGVbMV0iPjxpIHN0eWxlPSdiYWNrZ3JvdW5kOiRleHRzdHlsZVsyXSc+PC9pPjwvc3Bhbj4KCQkJCQk8IS0tey9sb29wfS0tPgoJCQkJPC9kaXY+CgkJCTwhLS17L2lmfS0tPgoJCQk8IS0te2lmICRfR1sndWlkJ119LS0+CgkJCQk8dWwgaWQ9Im15aXRlbV9tZW51IiBjbGFzcz0icF9wb3AiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+CgkJCQkJPCEtLXtpZiAkX0dbJ3NldHRpbmcnXVsnZm9ydW1zdGF0dXMnXX0tLT48bGk+PGEgaHJlZj0iaG9tZS5waHA/bW9kPXNwYWNlJmRvPXRocmVhZCZ2aWV3PW1lIj57bGFuZyBteXBvc3R9PC9hPjwvbGk+PCEtLXsvaWZ9LS0+CgkJCQkJPCEtLXtpZiAkX0dbJ3NldHRpbmcnXVsnZmF2b3JpdGVzdGF0dXMnXX0tLT48bGk+PGEgaHJlZj0iaG9tZS5waHA/bW9kPXNwYWNlJmRvPWZhdm9yaXRlJnZpZXc9bWUiPntsYW5nIGZhdm9yaXRlfTwvYT48L2xpPjwhLS17L2lmfS0tPgoJCQkJCTwhLS17aWYgJF9HWydzZXR0aW5nJ11bJ2ZyaWVuZHN0YXR1cyddfS0tPjxsaT48YSBocmVmPSJob21lLnBocD9tb2Q9c3BhY2UmZG89ZnJpZW5kIj57bGFuZyBmcmllbmRzfTwvYT48L2xpPjwhLS17L2lmfS0tPgoJCQkJCTwhLS17aG9vay9nbG9iYWxfbXlpdGVtX2V4dHJhfS0tPgoJCQkJPC91bD4KCQkJPCEtLXsvaWZ9LS0+CgkJCTwhLS17c3VidGVtcGxhdGUgY29tbW9uL2hlYWRlcl9xbWVudX0tLT4KCQk8IS0tey9pZn0tLT4KCgkJPCEtLXthZC9oZWFkZXJiYW5uZXIvd3AgYV9ofS0tPgoJCTxkaXYgaWQ9ImhkIj4KCQkJPGRpdiBjbGFzcz0id3AiPgoJCQkJPGRpdiBjbGFzcz0iaGRjIGNsIj4KCQkJCQk8IS0te2V2YWwgJG1uaWQgPSBnZXRjdXJyZW50bmF2KCk7fS0tPgoJCQkJCTxoMj48IS0te2lmICFpc3NldCgkX0dbJ3NldHRpbmcnXVsnbmF2bG9nb3MnXVskbW5pZF0pfS0tPjxhIGhyZWY9IntpZiAkX0dbJ3NldHRpbmcnXVsnZG9tYWluJ11bJ2FwcCddWydkZWZhdWx0J119eyRfR1snc2NoZW1lJ119Oi8veyRfR1snc2V0dGluZyddWydkb21haW4nXVsnYXBwJ11bJ2RlZmF1bHQnXX0ve2Vsc2V9Li97L2lmfSIgdGl0bGU9IiRfR1snc2V0dGluZyddWydiYm5hbWUnXSI+eyRfR1snc3R5bGUnXVsnYm9hcmRsb2dvJ119PC9hPjwhLS17ZWxzZX0tLT4kX0dbJ3NldHRpbmcnXVsnbmF2bG9nb3MnXVskbW5pZF08IS0tey9pZn0tLT48L2gyPgoJCQkJCTwhLS17dGVtcGxhdGUgY29tbW9uL2hlYWRlcl91c2Vyc3RhdHVzfS0tPgoJCQkJPC9kaXY+CgoJCQkJPGRpdiBpZD0ibnYiPgoJCQkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6OyIgaWQ9InFtZW51IiBvbm1vdXNlb3Zlcj0iZGVsYXlTaG93KHRoaXMsIGZ1bmN0aW9uICgpIHtzaG93TWVudSh7J2N0cmxpZCc6J3FtZW51JywncG9zJzonMzQhJywnY3RybGNsYXNzJzonYScsJ2R1cmF0aW9uJzoyfSk7c2hvd0ZvcnVtbWVudSgkX0dbZmlkXSk7fSkiPntsYW5nIG15X25hdn08L2E+CgkJCQkJPHVsPgoJCQkJCQk8IS0te2xvb3AgJF9HWydzZXR0aW5nJ11bJ25hdnMnXSAkbmF2fS0tPgoJCQkJCQkJPCEtLXtpZiBpc19hcnJheSgkbmF2KSAmJiAkbmF2WydhdmFpbGFibGUnXSAmJiAoISRuYXZbJ2xldmVsJ10gfHwgKCRuYXZbJ2xldmVsJ10gPT0gMSAmJiAkX0dbJ3VpZCddKSB8fCAoJG5hdlsnbGV2ZWwnXSA9PSAyICYmICRfR1snYWRtaW5pZCddID4gMCkgfHwgKCRuYXZbJ2xldmVsJ10gPT0gMyAmJiAkX0dbJ2FkbWluaWQnXSA9PSAxKSl9LS0+PGxpIHtpZiAkbW5pZCA9PSAkbmF2W25hdmlkXSB8fCBzdWJzdHIoJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10sIDEpID09IHN0cl9yZXBsYWNlKCcuLycsICcnLCAkbmF2W2ZpbGVuYW1lXSl9Y2xhc3M9ImEiIHsvaWZ9JG5hdltuYXZdPjwvbGk+PCEtLXsvaWZ9LS0+CgkJCQkJCTwhLS17L2xvb3B9LS0+CgkJCQkJPC91bD4KCQkJCQk8IS0te2hvb2svZ2xvYmFsX25hdl9leHRyYX0tLT4KCQkJCTwvZGl2PgoJCQkJPCEtLXtpZiAhZW1wdHkoJF9HWydzZXR0aW5nJ11bJ3BsdWdpbnMnXVsnanNtZW51J10pfS0tPgoJCQkJCTx1bCBjbGFzcz0icF9wb3AgaF9wb3AiIGlkPSJwbHVnaW5fbWVudSIgc3R5bGU9ImRpc3BsYXk6IG5vbmUiPgoJCQkJCTwhLS17bG9vcCAkX0dbJ3NldHRpbmcnXVsncGx1Z2lucyddWydqc21lbnUnXSAkbW9kdWxlfS0tPgoJCQkJCQkgPCEtLXtpZiBpbl9hcnJheSgkbW9kdWxlWydhZG1pbmlkJ10sIGFycmF5KDAsIC0xKSkgfHwgKCRtb2R1bGVbJ2FkbWluaWQnXSAmJiAkX0dbJ2FkbWluaWQnXSA+IDAgJiYgJG1vZHVsZVsnYWRtaW5pZCddID49ICRfR1snYWRtaW5pZCddKX0tLT4KCQkJCQkJIDxsaT4kbW9kdWxlW3VybF08L2xpPgoJCQkJCQkgPCEtLXsvaWZ9LS0+CgkJCQkJPCEtLXsvbG9vcH0tLT4KCQkJCQk8L3VsPgoJCQkJPCEtLXsvaWZ9LS0+CgkJCQkkX0dbc2V0dGluZ11bbWVudW5hdnNdCgkJCQk8ZGl2IGlkPSJtdSIgY2xhc3M9ImNsIj4KCQkJCTwhLS17aWYgJF9HWydzZXR0aW5nJ11bJ3N1Ym5hdnMnXX0tLT4KCQkJCQk8IS0te2xvb3AgJF9HW3NldHRpbmddW3N1Ym5hdnNdICRuYXZpZCAkc3VibmF2fS0tPgoJCQkJCQk8IS0te2lmICRfR1snc2V0dGluZyddWyduYXZzdWJob3ZlciddIHx8ICRtbmlkID09ICRuYXZpZH0tLT4KCQkJCQkJPHVsIGNsYXNzPSJjbCB7aWYgJG1uaWQgPT0gJG5hdmlkfWN1cnJlbnR7L2lmfSIgaWQ9InNuYXZfJG5hdmlkIntpZiAkbW5pZCAhPSAkbmF2aWR9IHN0eWxlPSJkaXNwbGF5Om5vbmUiey9pZn0+CgkJCQkJCSRzdWJuYXYKCQkJCQkJPC91bD4KCQkJCQkJPCEtLXsvaWZ9LS0+CgkJCQkJPCEtLXsvbG9vcH0tLT4KCQkJCTwhLS17L2lmfS0tPgoJCQkJPC9kaXY+CgkJCQk8IS0te2FkL3N1Ym5hdmJhbm5lci9hX211fS0tPgoJCQkJPCEtLXtzdWJ0ZW1wbGF0ZSBjb21tb24vcHVic2VhcmNoZm9ybX0tLT4KCQkJPC9kaXY+CgkJPC9kaXY+CgoJCTwhLS17aG9vay9nbG9iYWxfaGVhZGVyfS0tPgoJPCEtLXsvaWZ9LS0+CgoJPGRpdiBpZD0id3AiIGNsYXNzPSJ3cCI+Cg==
qidao123.com ToB IT社区-企服评测·应用市场»论坛 › 中间件 › 中间件 › 在WSL2-Ubuntu中安装CUDA12.8、cuDNN、Anaconda、Pytorc ...
返回列表 发新帖

在WSL2-Ubuntu中安装CUDA12.8、cuDNN、Anaconda、Pytorch并验证安装

[复制链接]
发表于 2025-3-31 14:34:30 | 显示全部楼层 |阅读模式
#记录工作
提示:整个过程最好先开启体系代理,也可以用镜像源,确保有官方发布的最新特性和官方库的完整和兼容性支持。
 期间下载会特殊慢,必要在体系上先开启代理,然后WSL设置里打开网络模式“Mirrored”,以设置WSL自动使用主机上的代理网络。
   【WLS2怎么设置网络自动代理 - CSDN App】https://blog.csdn.net/u014451778/article/details/146073726?sharetype=blog&shareId=146073726&sharerefer=APP&sharesource=u014451778&sharefrom=link
   
一、起首要先确保——windows体系中要精确安装了以下组件:

(一)显卡驱动;

   下载 NVIDIA 官方驱动 | NVIDIA
  (二)Microsoft Visual Studio;

   下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux
  (三)CUDA;

   CUDA Toolkit 12.8 Downloads | NVIDIA Developer
  (四)cuDNN;

   CUDA Toolkit 12.8 Downloads | NVIDIA Developer
  (五)精确安装WSL2-Ubuntu版本

要正常安装WSL2-Ubuntu版本,安装成功后打开ubuntu界面输出如下界面:
   安装 WSL | Microsoft Learn
  


该版本默认是安装的WSL2-Ubuntu 24.04版本 ,也可以选择其他的ubuntu版本举行安装。
 
 
二、在WSL2-Ubuntu体系中安装CUDA、cuDNN、Anaconda

在windows体系中精确安装完必要组件后,然后才是在WSL2-Ubuntu中按照顺序安装 CUDA、cuDNN、Anaconda。
打开WSL2-Ubuntu,先安装CUDA、再安装cuDNN、末了是Anaconda(管理假造环境)
只要windows体系配置好了显卡驱动,在WSL2中一样平常不必再另外安装linux驱动了。
在安装前可以在WSL2-Ubuntu中使用以下下令举行验证与显卡的通讯和驱动调用的情况:
  1. nvidia-smi
复制代码

 
(一)安装CUDA

打开CUDA官方网址<发起“deb(network)”方式较为省事>,完整复制全部下令粘贴进WSL2-Ubuntu终端中按回车键运行。
   CUDA Toolkit 12.8 Downloads | NVIDIA Developer
  选项如图所示:
固然,也可以选WSL-Ubuntu这个选项更把稳。

  1. wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
  2. sudo dpkg -i cuda-keyring_1.1-1_all.deb
  3. sudo apt-get update
  4. sudo apt-get -y install cuda-toolkit-12-8
复制代码
 
1、复制图片/官网下边的全部下令,粘贴到WSL2-Ubuntu终端窗口中,按ENTER键(回车键)运行 


2、过程中会要求输入密码,输入ubuntu密码即可。


3、执行下令后会自动举行下载和安装: 



 
4、安装竣事后举行环境变量的编辑:

 a)我们可以按照下面的步调来永久添加环境变量:

检查安装是否成功在配置环境变量之前,先确认 CUDA 是否精确安装。运行以下下令:ls /usr/local/cuda-12.8/bin/
在 WSL2-Ubuntu 体系中,CUDA 12.8 通常安装在/usr/local/cuda-12.8目录下,这个目录包含了 CUDA 相关的各种组件,如 bin(包含可执行文件,比如 nvcc 编译器就在这里面)、lib64(包含库文件)、include(包含头文件) 等。如果在安装过程中没有指定其他特殊路径,这就是默认的安装位置。我们可以通过以下下令来验证:
  1. ls /usr/local/cuda-12.8
复制代码
  如果安装成功,我们会看到nvcc等工具的列表。如果没有看到这些文件,大概必要重新检查安装步调。

从我执行 ls /usr/local/cuda-12.8 后的输出结果来看,CUDA 12.8 似乎已经成功安装到了 /usr/local/cuda-12.8 目录下。
接下来,我们必要将 /usr/local/cuda-12.8/bin 目录添加到体系的 PATH 环境变量中,以便体系能够找到 nvcc 等下令。

b) 配置环境变量环境变量的配置必要根据你的体系类型(Bash 或 Zsh)来操作。
 确认当前使用的 Shell
起首,确认你当前使用的 Shell 是 Bash 照旧 Zsh。
我们可以通过以下下令检察:
  1. echo $SHELL
复制代码
• 如果输出是   /bin/bash  ,则使用 Bash。
• 如果输出是   /bin/zsh  ,则使用 Zsh。

c)编辑环境变量配置文件
 
以下是常见的配置方法:
对于 Bash 用户
编辑   ~/.bashrc   文件,
  1. nano ~/.bashrc
复制代码
添加以下内容: 
  1. export PATH=/usr/local/cuda-12.8/bin:$PATH
  2. export LD_LIBRARY_PATH=/usr/local/cuda-12.8/lib64:$LD_LIBRARY_PATH
复制代码
• 按下   Ctrl + X  ,然后按   Y   确认保存,末了按   Enter   完成退出。 
保存文件后,运行以下下令使变量生效:
  1. source ~/.bashrc
复制代码
对于 Zsh 用户
编辑   ~/.zshrc   文件,
  1. nano ~/.bashrc
复制代码
添加雷同的内容 : 
  1. export PATH=/usr/local/cuda-12.8/bin:$PATH
  2. export LD_LIBRARY_PATH=/usr/local/cuda-12.8/lib64:$LD_LIBRARY_PATH
复制代码
保存文件后,运行以下下令使变量生效(选其一):
  1. source ~/.bashrc   # 如果是 Bash 用户
  2. source ~/.zshrc    # 如果是 Zsh 用户
复制代码
 5. 验证环境变量

配置完成后,运行以下下令验证:
  1. echo $PATH
复制代码
 6. 测试   nvcc  

运行   nvcc -V  或nvcc --version
,检查输出是否精确。
  1. nvcc -V
复制代码
或者: 
  1. nvcc --version
复制代码
 
如果配置精确,你会看到类似以下的输出:
 
  1. love@AI:~$ ls /usr/local/cuda-12.8DOCS      README  compute-sanitizer  extras  include  libnvvp           nvml  share  targets  version.jsonEULA.txt  bin     doc                gds     lib64    nsightee_plugins  nvvm  src    toolslove@AI:~$ echo $SHELL/bin/bashlove@AI:~$ nano ~/.bashrc
  2. love@AI:~$ source ~/.bashrclove@AI:~$ nvcc -Vnvcc: NVIDIA (R) Cuda compiler driverCopyright (c) 2005-2025 NVIDIA CorporationBuilt on Wed_Jan_15_19:20:09_PST_2025Cuda compilation tools, release 12.8, V12.8.61Build cuda_12.8.r12.8/compiler.35404655_0love@AI:~$
复制代码
 

至此,CUDA算是安装成功并得到验证。
 
7.驱动步伐安装步伐(发起)


在官方CUDA安装下令下方,有以下下令选项,强烈发起在验证完CUDA安装精确后,再次运行以下下令(任选其一)以确保安装步伐的未来兼容性。
NVIDIA 驱动步伐说明(选择一个选项)
 要安装 open kernel module 风格:
  1. sudo apt-get install -y nvidia-open
复制代码
要安装旧版内核模块风格:
  1. sudo apt-get install -y cuda-drivers
复制代码

 NVIDIA 驱动步伐提供了两种内核模块风格:open kernel module(开源内核模块)和旧版内核模块(proprietary kernel module,专有内核模块)。这两种风格的告急区别在于它们的允许证类型、支持的功能和兼容性。

open kernel module 风格
• 允许证:开源,通常采用 MIT/GPLv2 允许证。
• 支持的 GPU 架构:支持 Turing 及以后的 GPU 架构。
• 支持的功能:支持大多数 Linux GPU 驱动步伐的功能,包罗 CUDA、Vulkan、OpenGL、OptiX 和 X11。此外,尚有一些功能是仅 open kernel modules 支持的,比方 NVIDIA Confidential Computing、Magnum IO GPUDirect Storage(GDS)、Heterogeneous Memory Management(HMM)、CPU affinity for GPU fault handlers 和 DMABUF support for CUDA allocations。
• 兼容性:大概不支持所有旧版专有内核模块支持的特性,比方 NVIDIA virtual GPU(vGPU)、G-Sync on notebooks 和 Preserving video memory across power management events。

 
旧版内核模块风格
• 允许证:专有,由 NVIDIA 提供。
• 支持的 GPU 架构:支持 Maxwell、Pascal、Volta、Turing 和之后的 GPU 架构。
• 支持的功能:支持所有 NVIDIA GPU 驱动步伐的功能,包罗那些大概在 open kernel modules 中尚未支持的特性。
• 兼容性:通常更稳固,特殊是在支持较旧的硬件和特定的企业级应用场景中。

新手用户保举
对于新手用户,保举安装open kernel module 风格的驱动步伐,原因如下:
• 开源:更透明,社区支持更广泛。
• 更新:通常包含最新的功能和改进。
• 兼容性:对于大多数现代应用和游戏来说,open kernel modules 提供的兼容性已经足够。
然而,如果你有特定的需求,比如必要使用专有驱动步伐中特有的功能,或者你的硬件较旧,大概必要旧版内核模块风格。
在安装驱动步伐之前,发起先阅读 NVIDIA 的官方文档,相识不同风格的具体区别和保举使用场景。此外,确保我们的体系满足安装要求,并按照官方指南举行操作,以制止潜伏的兼容性问题。
 
 
 
(二)安装cuDNN

打开CUDA官方网址<发起“deb(network)”方式较为省事>,完整复制全部下令粘贴进WSL2-Ubuntu终端中按回车键运行。
   cuDNN 9.8.0 Downloads | NVIDIA Developer
   选项如图所示:

  1. wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
  2. sudo dpkg -i cuda-keyring_1.1-1_all.deb
  3. sudo apt-get update
  4. sudo apt-get -y install cudnn
复制代码
 
1、复制图片/官网下边的全部下令,粘贴到WSL2-Ubuntu终端窗口中,按ENTER键运行


2、执行下令后会自动举行下载和安装:


 

3、暂时性地验证 cuDNN 安装

此时,暂时性地验证 cuDNN 安装是否成功可以通过以下方法:
检查文件路径的方法
cuDNN 的库文件通常会被安装到`/usr/lib/x86_64-linux-gnu`或`/usr/local/cuda/lib64`目录下。你可以通过以下下令检查这些文件是否存在:
  1. ls /usr/lib/x86_64-linux-gnu/libcudnn*
复制代码
 输出应该如下所示:
  1. love@AI:~$ ls /usr/lib/x86_64-linux-gnu/libcudnn*
  2. /usr/lib/x86_64-linux-gnu/libcudnn.so
  3. /usr/lib/x86_64-linux-gnu/libcudnn.so.9
  4. /usr/lib/x86_64-linux-gnu/libcudnn.so.9.8.0
  5. /usr/lib/x86_64-linux-gnu/libcudnn_adv.so
  6. /usr/lib/x86_64-linux-gnu/libcudnn_adv.so.9
  7. /usr/lib/x86_64-linux-gnu/libcudnn_adv.so.9.8.0
  8. /usr/lib/x86_64-linux-gnu/libcudnn_adv_static.a
  9. /usr/lib/x86_64-linux-gnu/libcudnn_adv_static_v9.a
  10. /usr/lib/x86_64-linux-gnu/libcudnn_cnn.so
  11. /usr/lib/x86_64-linux-gnu/libcudnn_cnn.so.9
  12. /usr/lib/x86_64-linux-gnu/libcudnn_cnn.so.9.8.0
  13. /usr/lib/x86_64-linux-gnu/libcudnn_cnn_static.a
  14. /usr/lib/x86_64-linux-gnu/libcudnn_cnn_static_v9.a
  15. /usr/lib/x86_64-linux-gnu/libcudnn_engines_precompiled.so
  16. /usr/lib/x86_64-linux-gnu/libcudnn_engines_precompiled.so.9
  17. /usr/lib/x86_64-linux-gnu/libcudnn_engines_precompiled.so.9.8.0
  18. /usr/lib/x86_64-linux-gnu/libcudnn_engines_precompiled_static.a
  19. /usr/lib/x86_64-linux-gnu/libcudnn_engines_precompiled_static_v9.a
  20. /usr/lib/x86_64-linux-gnu/libcudnn_engines_runtime_compiled.so
  21. /usr/lib/x86_64-linux-gnu/libcudnn_engines_runtime_compiled.so.9
  22. /usr/lib/x86_64-linux-gnu/libcudnn_engines_runtime_compiled.so.9.8.0
  23. /usr/lib/x86_64-linux-gnu/libcudnn_engines_runtime_compiled_static.a
  24. /usr/lib/x86_64-linux-gnu/libcudnn_engines_runtime_compiled_static_v9.a
  25. /usr/lib/x86_64-linux-gnu/libcudnn_graph.so
  26. /usr/lib/x86_64-linux-gnu/libcudnn_graph.so.9
  27. /usr/lib/x86_64-linux-gnu/libcudnn_graph.so.9.8.0
  28. /usr/lib/x86_64-linux-gnu/libcudnn_graph_static.a
  29. /usr/lib/x86_64-linux-gnu/libcudnn_graph_static_v9.a
  30. /usr/lib/x86_64-linux-gnu/libcudnn_heuristic.so
  31. /usr/lib/x86_64-linux-gnu/libcudnn_heuristic.so.9
  32. /usr/lib/x86_64-linux-gnu/libcudnn_heuristic.so.9.8.0
  33. /usr/lib/x86_64-linux-gnu/libcudnn_heuristic_static.a
  34. /usr/lib/x86_64-linux-gnu/libcudnn_heuristic_static_v9.a
  35. /usr/lib/x86_64-linux-gnu/libcudnn_ops.so
  36. /usr/lib/x86_64-linux-gnu/libcudnn_ops.so.9
  37. /usr/lib/x86_64-linux-gnu/libcudnn_ops.so.9.8.0
  38. /usr/lib/x86_64-linux-gnu/libcudnn_ops_static.a
  39. /usr/lib/x86_64-linux-gnu/libcudnn_ops_static_v9.a
复制代码
从我的提供的输出结果来看,cuDNN 库文件已经成功安装在`/usr/lib/x86_64-linux-gnu`目录下,而不是`/usr/local/cuda/lib64`。这说明 cuDNN 的安装路径是精确的,并且体系已经精确配置了相关的库文件。

以下是验证结果解释:
• cuDNN 库文件存在:
• 我已经找到了多个 cuDNN 的动态链接库(如`libcudnn.so`、`libcudnn.so.9`、`libcudnn.so.9.8.0`)和静态库(如`libcudnn_adv_static.a`、`libcudnn_cnn_static_v9.a`等)。
• 这些文件的存在表明 cuDNN 已精确安装。

• CUDA 目录下没有 cuDNN 文件:
• `/usr/local/cuda/lib64`目录下没有找到 cuDNN 文件,这是由于 cuDNN 的安装路径是`/usr/lib/x86_64-linux-gnu`,而不是`/usr/local/cuda`。
• 这是正常的,由于 cuDNN 的安装路径通常由体系包管理器(如`apt`)决定,而不是手动安装到 CUDA 的目录下。
小结:从我的输出结果来看,cuDNN 已精确安装在   /usr/lib/x86_64-linux-gnu   目录下。
 
接下来我们将通过安装Anaconda之后,在与体系隔离的假造环境中安装Pytorch来完全地验证CUDA和cuDNN的安装是否精确。

 
(三)安装Anaconda

通过查询,截止2025年03月06日,最新版本Anaconda完整文件名为:Anaconda3-2024.10-1-Linux-x86_64.sh
1、通过以下下令下载和安装:

复制下令粘贴到WSL2-Ubuntu终端窗口中,按ENTER键运行
  1. wget -P /tmp https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh # 下载anaconda安装包至 /tmp 目录下
  2. bash /tmp/Anaconda3-2024.10-1-Linux-x86_64.sh # 安装anaconda
复制代码

2、执行下令后会自动举行下载完成后会进入安装步调: 

此时要点击ENTER键后不停按着不松开,来翻页阅读安装前协议

 继续按着ENTER键不松手,直到出现输入框才停止

不停按到出现输入框,按多了也没关系,不输入就不能继续
 用键盘手动输入“yes”,之后按ENTER回车键确认输入。然后进入到下边这个界面:
这会会询问安装位置,默认不修改则继续按一次ENTER键确认使用默认安装路径:

之后安装会询问:是否要集成到shell当中,自动进入默认假造环境? 

发起输入“yes”
 

此时安装完成。
发起关闭终端,然后重新打开,看看是否自动进入默认的conda的base假造环境了: 
 可以看到重新打开WSL2-Ubuntu终端后已自动激活base默认的Anaconda假造环境了。
 

3、验证Anaconda的安装

验证 Conda 安装是否成功可以通过以下几种方法。这些方法可以帮助你确认 Conda 是否精确安装,并且能够正常运行。

方法 1:检查 Conda 版本
运行以下下令来检查 Conda 的版本号。如果 Conda 安装成功,它会表现当前的版本信息:
  1. conda --version
复制代码

如果输出类似以下内容,则说明 Conda 安装成功:

 

如果没有输出,或者提示`conda: command not found`,则说明 Conda 没有精确安装,或者其路径没有被添加到体系的环境变量中。

方法 2:检查 Conda 环境
运行以下下令来检察当前的 Conda 环境列表:
  1. conda env list
复制代码

如果 Conda 安装成功,你会看到类似以下的输出,列出所有已创建的 Conda 环境:


 
方法 3:创建并激活新的 Conda 环境
你可以创建一个新的 Conda 环境并激活它,以验证 Conda 的功能是否正常:

• 创建新的环境:
  1. conda create -n testenv python=3.9
复制代码
 
• 激活环境:
  1. conda activate testenv
复制代码
 
• 检查当前环境:
  1. conda info --envs
复制代码

如果输出表现当前激活的环境是`testenv`,则说明 Conda 正常工作:

# conda environments:
#
base                     /home/love/miniconda3
testenv               *  /home/love/miniconda3/envs/testenv
```
方法 4:安装并验证 Python 包
在激活的 Conda 环境中,安装一个常用的 Python 包(如`numpy`),并验证其是否正常工作:

• 安装包:
  1.  conda install numpy
复制代码
 
• 验证安装:
  1.  python -c "import numpy; print(numpy.__version__)"
复制代码

如果输出表现了`numpy`的版本号(比方`1.23.4`),则说明 Conda 和 Python 环境正常工作。

方法 5:检查 Conda 配置
运行以下下令来检查 Conda 的配置信息:
  1. conda config --show
复制代码
 

这将表现 Conda 的配置文件路径、默认环境路径、通道(channels)等信息。如果输出正常,说明 Conda 的配置文件没有问题。

方法 6:检查 Conda 的初始化
如果你在安装 Conda 后没有运行初始化下令,大概会导致`conda`下令无法正常使用。运行以下下令来初始化 Conda:
  1. conda init
复制代码

然后重新打开终端窗口,再次运行`conda --version`来验证。
  1. conda --version
复制代码

小结
通过以上方法,你可以全面验证 Conda 是否精确安装并正常工作。如果在验证过程中遇到问题,请检查以下内容:
• 确保 Conda 的安装路径已添加到体系的环境变量中。
• 确保 Conda 初始化完成。
• 如果仍然有问题,可以尝试重新安装 Conda。
 
 
三、安装Pytorch并验证CUDA12.8、cuDNN、Anaconda、Pytorch的安装

(一)安装Pytorch


我们就用默认的base环境来安装torch举行验证WSL2-Ubuntu的整个深度学习环境的搭建是否成功

如今CUDA12.8版本还不支持conda下令安装,以后torch官方会更新出conda包,我们就先用官方给的pip下令安装Preview (Nightly)版:
 
  1. pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu128
复制代码

 过一会后安装完成:

 接下来我们将用这个告急的深度学习库来验证之前的所有安装。
 
(二)用Pytorch并验证CUDA12.8、cuDNN、Anaconda、Pytorch的安装
先关闭WSL2-Ubuntu终端后,重新打开WSL2-Ubuntu终端;
在WSL2-Ubuntu终端内输入“python”并回车调起python:
  1. python
复制代码
 

复制以下整段代理粘贴后按ENTER回车键支持验证:
  1. import torch  # 导入 PyTorch 库
  2. print("PyTorch 版本:", torch.__version__)  # 打印 PyTorch 的版本号
  3. # 检查 CUDA 是否可用,并设置设备("cuda:0" 或 "cpu")
  4. device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
  5. print("设备:", device)  # 打印当前使用的设备
  6. print("CUDA 可用:", torch.cuda.is_available())  # 打印 CUDA 是否可用
  7. print("cuDNN 已启用:", torch.backends.cudnn.enabled)  # 打印 cuDNN 是否已启用
  8. # 打印 PyTorch 支持的 CUDA 和 cuDNN 版本
  9. print("支持的 CUDA 版本:", torch.version.cuda)
  10. print("cuDNN 版本:", torch.backends.cudnn.version())
  11. # 创建两个随机张量(默认在 CPU 上)
  12. x = torch.rand(5, 3)
  13. y = torch.rand(5, 3)
  14. # 将张量移动到指定设备(CPU 或 GPU)
  15. x = x.to(device)
  16. y = y.to(device)
  17. # 对张量进行逐元素相加
  18. z = x + y
  19. # 打印结果
  20. print("张量 z 的值:")
  21. print(z)  # 输出张量 z 的内容
复制代码
 如果输出如下,则表明CUDA12.8、cuDNN、Anaconda、Pytorch全部安装成功!

从上边的输出来看,你已经成功地在 Python 中导入了 PyTorch,并且确认了 CUDA 和 cuDNN 的可用性。你的代码运行正常,并且 PyTorch 正在使用 GPU(`cuda:0`)举行计算。以下是对代码和输出的总结:
  1. (base) love@AI:~$ python
  2. Python 3.12.7 | packaged by Anaconda, Inc. | (main, Oct  4 2024, 13:27:36) [GCC 11.2.0] on linux
  3. Type "help", "copyright", "credits" or "license" for more information.
  4. >>> import torch  # 导入 PyTorch 库
  5. "PyTorch 版本:", torch.__version__)  # 打印 PyTorch 的版本号
  6. # 检查 CUDA 是否可用,并设置设备("cuda:0" 或 "cpu")
  7. device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
  8. print("设备:", device)  # 打印当前使用的设备
  9. print("CUDA 可用:", torch.cuda.is_available())  # 打印 CUDA 是否可用
  10. print("cuDNN 已启用:", torch.backends.cudnn.enabled)  # 打印 cuDNN 是否已启用
  11. # 打印 PyTorch 支持的 CUDA 和 cuDNN 版本
  12. print("支持的 CUDA 版本:", torch.version.cuda)
  13. print("cuDNN 版本:", torch.backends.cudnn.version())
  14. # 创建两个随机张量(默认在 CPU 上)
  15. x = torch.rand(5, 3)
  16. y = torch.rand(5, 3)
  17. # 将张量移动到指定设备(CPU 或 GPU)
  18. x = x.to(device)
  19. y = y.to(device)
  20. # 对张量进行逐元素相加
  21. z = x + y
  22. # 打印结果
  23. print("张量 z 的值:")
  24. print(z)  # 输出张量 z 的内容>>>
  25. >>> print("PyTorch 版本:", torch.__version__)  # 打印 PyTorch 的版本号
  26. PyTorch 版本: 2.7.0.dev20250306+cu128
  27. >>>
  28. >>> # 检查 CUDA 是否可用,并设置设备("cuda:0" 或 "cpu")
  29. >>> device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
  30. >>> print("设备:", device)  # 打印当前使用的设备
  31. 设备: cuda:0
  32. >>> print("CUDA 可用:", torch.cuda.is_available())  # 打印 CUDA 是否可用
  33. CUDA 可用: True
  34. >>> print("cuDNN 已启用:", torch.backends.cudnn.enabled)  # 打印 cuDNN 是否已启用
  35. cuDNN 已启用: True
  36. >>>
  37. >>> # 打印 PyTorch 支持的 CUDA 和 cuDNN 版本
  38. >>> print("支持的 CUDA 版本:", torch.version.cuda)
  39. 支持的 CUDA 版本: 12.8
  40. >>> print("cuDNN 版本:", torch.backends.cudnn.version())
  41. cuDNN 版本: 90701
  42. >>>
  43. >>> # 创建两个随机张量(默认在 CPU 上)
  44. >>> x = torch.rand(5, 3)
  45. >>> y = torch.rand(5, 3)
  46. >>>
  47. >>> # 将张量移动到指定设备(CPU 或 GPU)
  48. >>> x = x.to(device)
  49. >>> y = y.to(device)
  50. >>>
  51. >>> # 对张量进行逐元素相加
  52. >>> z = x + y
  53. >>>
  54. >>> # 打印结果
  55. >>> print("张量 z 的值:")
  56. 张量 z 的值:
  57. >>> print(z)  # 输出张量 z 的内容
  58. tensor([[0.8231, 0.9657, 1.3131],
  59.         [0.8789, 1.4404, 0.8304],
  60.         [0.8528, 1.3328, 1.9110],
  61.         [1.0722, 0.6289, 1.4093],
  62.         [1.1559, 0.8878, 0.5438]], device='cuda:0')
  63. >>>
复制代码

---
代码运行结果:
PyTorch 版本: 2.7.0.dev20250306+cu128
装备: cuda:0
CUDA 可用: True
cuDNN 已启用: True
支持的 CUDA 版本: 12.8
cuDNN 版本: 90701
---
关键信息:
• PyTorch 版本:`2.7.0.dev20250306+cu128`
• 这是一个开发版本(`dev`),并且是针对 CUDA 12.8 的版本。

• 装备:`cuda:0`
• 表示 PyTorch 已成功检测到 GPU,并将使用第一个 GPU 装备。

• CUDA 和 cuDNN:
• CUDA 可用:`True`,表示体系支持 CUDA,PyTorch 可以利用 GPU 加速。
• cuDNN 已启用:`True`,表示 cuDNN 已启用,这有助于进一步加速深度学习任务。
• 支持的 CUDA 版本:`12.8`,表示 PyTorch 支持 CUDA 12.8。
• cuDNN 版本:`90701`(即 cuDNN 9.7.1)。

---
如果我们遇到任何问题(比方 CUDA 不可用),请确保:
• 检查 GPU 驱动和 CUDA 安装:
• GPU 驱动是最新的。
• 安装了精确版本的 CUDA 和 cuDNN。
• PyTorch 版本与 CUDA 版本兼容。

---
   【Windows 11 中摆设 Linux 项目 - CSDN App】https://blog.csdn.net/u014451778/article/details/144777265?sharetype=blog&shareId=144777265&sharerefer=APP&sharesource=u014451778&sharefrom=link
  
至此,在Windosw体系上的WSL2-Ubuntu深度学习环境配置完成,可以在Windosw体系上优雅地借助Windosw的易用性和Linux体系的高效性举行项目摆设和开发调试了。
 
 
 
 
 
 

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

返回列表 发新帖
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录

QQ|手机版|qidao123.com IT社区;IT企服评测▪应用市场 ( 浙ICP备20004199|浙ICP备20004199号 )|网站地图

GMT+8, 2026-10-2 02:43 , Processed in 0.074274 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表