making amdgpu work on arm achitecutre with vulkan

This commit is contained in:
yeongbba 2025-01-19 01:30:34 +09:00
parent e61c329435
commit 4b74cee096
6 changed files with 15 additions and 11 deletions

View File

@ -175,6 +175,7 @@ var (
CudaVisibleDevices = String("CUDA_VISIBLE_DEVICES")
HipVisibleDevices = String("HIP_VISIBLE_DEVICES")
RocrVisibleDevices = String("ROCR_VISIBLE_DEVICES")
VkVisibleDevices = String("GGML_VK_VISIBLE_DEVICES")
GpuDeviceOrdinal = String("GPU_DEVICE_ORDINAL")
HsaOverrideGfxVersion = String("HSA_OVERRIDE_GFX_VERSION")
)
@ -263,6 +264,7 @@ func AsMap() map[string]EnvVar {
ret["CUDA_VISIBLE_DEVICES"] = EnvVar{"CUDA_VISIBLE_DEVICES", CudaVisibleDevices(), "Set which NVIDIA devices are visible"}
ret["HIP_VISIBLE_DEVICES"] = EnvVar{"HIP_VISIBLE_DEVICES", HipVisibleDevices(), "Set which AMD devices are visible"}
ret["ROCR_VISIBLE_DEVICES"] = EnvVar{"ROCR_VISIBLE_DEVICES", RocrVisibleDevices(), "Set which AMD devices are visible"}
ret["GGML_VK_VISIBLE_DEVICES"] = EnvVar{"GGML_VK_VISIBLE_DEVICES", VkVisibleDevices(), "Set which VK AMD devices are visible"}
ret["GPU_DEVICE_ORDINAL"] = EnvVar{"GPU_DEVICE_ORDINAL", GpuDeviceOrdinal(), "Set which AMD devices are visible"}
ret["HSA_OVERRIDE_GFX_VERSION"] = EnvVar{"HSA_OVERRIDE_GFX_VERSION", HsaOverrideGfxVersion(), "Override the gfx used for all detected AMD GPUs"}
ret["OLLAMA_INTEL_GPU"] = EnvVar{"OLLAMA_INTEL_GPU", IntelGPU(), "Enable experimental Intel GPU detection"}

View File

@ -410,7 +410,7 @@ func GetGPUInfo() GpuInfoList {
rocmGPUs = AMDGetGPUInfo()
bootstrapped = true
if len(cudaGPUs) == 0 && len(rocmGPUs) == 0 && len(oneapiGPUs) == 0 {
if len(cudaGPUs) == 0 && len(rocmGPUs) == 0 && len(oneapiGPUs) == 0 && len(vulkanGPUs) == 0 {
slog.Info("no compatible GPUs were discovered")
}
}

View File

@ -53,12 +53,12 @@ var (
)
var VulkanGlobs = []string{
"/usr/lib/x86_64-linux-gnu/libvulkan.so*",
"/usr/lib/aarch64-linux-gnu/libvulkan.so*",
"/usr/lib*/libvulkan.so*",
}
var capLinuxGlobs = []string{
"/usr/lib/x86_64-linux-gnu/libcap.so*",
"/usr/lib/aarch64-linux-gnu/libcap.so*",
"/usr/lib*/libcap.so*",
}

View File

@ -30,7 +30,7 @@ init_vars() {
WHOLE_ARCHIVE="-Wl,-force_load"
NO_WHOLE_ARCHIVE=""
GCC_ARCH="-arch ${ARCH}"
DIST_BASE=../../dist/darwin-${GOARCH}/
DIST_BASE=../../dist/darwin-${GOARCH}
PAYLOAD_BASE=../../build/darwin/${GOARCH}
;;
"Linux")
@ -40,7 +40,7 @@ init_vars() {
# Cross compiling not supported on linux - Use docker
GCC_ARCH=""
DIST_BASE=../../dist/linux-${GOARCH}/
DIST_BASE=../../dist/linux-${GOARCH}
PAYLOAD_BASE=../../build/linux/${GOARCH}
;;
*)

View File

@ -224,9 +224,9 @@ fi
if [ -z "${OLLAMA_SKIP_VULKAN_GENERATE}" -a -d "${VULKAN_ROOT}" ] && [ -z "${OLLAMA_SKIP_VULKAN_GENERATE}" -a -d "${CAP_ROOT}" ]; then
echo "Vulkan and capabilities libraries detected - building dynamic Vulkan library"
init_vars
CMAKE_DEFS="${COMMON_CMAKE_DEFS} ${CMAKE_DEFS} -DLLAMA_VULKAN=1"
BUILD_DIR="../build/linux/${ARCH}/vulkan"
RUNNER=vulkan
CMAKE_DEFS="-DCMAKE_SKIP_RPATH=on -DBUILD_SHARED_LIBS=on -DCMAKE_POSITION_INDEPENDENT_CODE=on -DGGML_NATIVE=off -DGGML_AVX=off -DGGML_AVX2=off -DGGML_AVX512=off -DGGML_FMA=off -DGGML_F16C=off -DGGML_OPENMP=off"
BUILD_DIR="../build/linux/${ARCH}/${RUNNER}"
EXTRA_LIBS="-L${VULKAN_ROOT} -L${CAP_ROOT} -lvulkan -lcap"
build
@ -234,8 +234,10 @@ if [ -z "${OLLAMA_SKIP_VULKAN_GENERATE}" -a -d "${VULKAN_ROOT}" ] && [ -z "${OLL
for dep in $(ldd "${BUILD_DIR}/bin/ollama_llama_server" | grep "=>" | cut -f2 -d= | cut -f2 -d' ' | grep -e vulkan -e cap); do
cp "${dep}" "${BUILD_DIR}/bin/"
done
cp "${VULKAN_ROOT}/libvulkan.so*" "${BUILD_DIR}/bin/"
cp "${CAP_ROOT}/libcap.so*" "${BUILD_DIR}/bin/"
cp ${VULKAN_ROOT}/libvulkan.so* "${BUILD_DIR}/bin/"
cp ${CAP_ROOT}/libcap.so* "${BUILD_DIR}/bin/"
install
dist
compress
fi

View File

@ -417,7 +417,7 @@ function build_vulkan() {
init_vars
$script:buildDir="../build/windows/${script:ARCH}/vulkan"
$script:distDir="$script:DIST_BASE\vulkan"
$script:cmakeDefs += @("-A", "x64", "-DLLAMA_VULKAN=1")
$script:cmakeDefs += @("-A", "x64", "-DDGGML_VULKAN=1")
write-host "Building Vulkan"
build
sign