yijin928's picture
Upload 140 files
1b80e0f verified
import asyncio
import os
import json
import shutil
import inspect
import requests
import subprocess
import platform
import importlib.util
import sys
config = None
def check_nvidia_gpu():
try:
# Utilizza torch per verificare la presenza di una GPU NVIDIA
return torch.cuda.is_available() and 'NVIDIA' in torch.cuda.get_device_name(0)
except Exception as e:
print(f"Error while checking for NVIDIA GPU: {e}")
return False
def get_cuda_version():
try:
if torch.cuda.is_available():
cuda_version = torch.version.cuda.replace(".","").strip()
return "cu"+cuda_version
else:
return "No NVIDIA GPU available"
except Exception as e:
print(f"Error while checking CUDA version: {e}")
return "Unable to determine CUDA version"
def check_avx2_support():
import cpuinfo
try:
info = cpuinfo.get_cpu_info()
return 'avx2' in info['flags']
except Exception as e:
print(f"Error while checking AVX2 support: {e}")
return False
def get_python_version():
if "3.9" in platform.python_version():
return "39"
elif "3.10" in platform.python_version():
return "310"
elif "3.11" in platform.python_version():
return "311"
else:
return None
def get_os():
return platform.system()
def get_os_bit():
return platform.architecture()[0].replace("bit","")
import requests
def get_platform_tag(_os):
#return the first tag in the list of tags
try:
import packaging.tags
response = requests.get("https://api.github.com/repos/abetlen/llama-cpp-python/releases/latest")
jresponse= response.json()
return extract_platform_tag(jresponse,list(packaging.tags.sys_tags())[0],_os)
except:
return None
def install_package(package):
subprocess.check_call([sys.executable, "-m", "pip", "install", "--no-cache-dir", package])
def install_llama():
try:
gpu = check_nvidia_gpu()
avx2 = check_avx2_support()
lcpVersion = get_last_llcpppy_version()
python_version = get_python_version()
_os = get_os()
os_bit = get_os_bit()
platform_tag = get_platform_tag(_os)
print(f"Python version: {python_version}")
print(f"OS: {_os}")
print(f"OS bit: {os_bit}")
print(f"Platform tag: {platform_tag}")
if python_version == None:
print("Unsupported Python version. Please use Python 3.9, 3.10 or 3.11.")
return
#python -m pip install llama-cpp-python --force-reinstall --no-deps --index-url=https://jllllll.github.io/llama-cpp-python-cuBLAS-wheels/AVX2/cu117
if avx2:
avx="AVX2"
else:
avx="AVX"
if gpu:
cuda = get_cuda_version()
print(f"--index-url=https://jllllll.github.io/llama-cpp-python-cuBLAS-wheels/{avx}/{cuda}")
else:
print(f"https://github.com/abetlen/llama-cpp-python/releases/download/v{lcpVersion}/llama_cpp_python-{lcpVersion}-{platform_tag}.whl")
except Exception as e:
print(f"Error while installing LLAMA: {e}")
# llama wheels https://github.com/jllllll/llama-cpp-python-cuBLAS-wheels
def check_module(package):
import importlib
try:
print("Detected: ", package)
importlib.import_module(package)
return True
except ImportError:
return False
import zipfile
import re
def extract_platform_tag(jresponse,tag,_os):
if _os.lower()== "linux" or _os.lower()=="macosx":
print(jresponse)
for res in jresponse["assets"]:
url = res["browser_download_url"]
print(url)
pattern = r'.*-((cp\d+-cp\d+)-(manylinux|macosx)_(\d+_\d+)_(x86_64|i686)\.whl)$'
match = re.match(pattern, url)
pattern_tag = r'((cp\d+-cp\d+)-(manylinux|macosx)_\d+_\d+_(x86_64|i686))$'
match_tag = re.match(pattern_tag, tag)
if match_tag:
rl_platform_tag = f"{match_tag.group(2)}-{match_tag.group(3)}_**_{match_tag.group(4)}"
#print(rl_platform_tag)
if match:
# Estrai il platform tag dal match
url_platform_tag = f"{match.group(2)}-{match.group(3)}_**_{match.group(5)}"
final_platform_tag =f"{match.group(2)}-{match.group(3)}_{match.group(4)}_{match.group(5)}"
if rl_platform_tag == url_platform_tag:
return final_platform_tag
return None
else:
return tag
def get_last_llcpppy_version():
try:
import requests
response = requests.get("https://api.github.com/repos/abetlen/llama-cpp-python/releases/latest")
return response.json()["tag_name"].replace("v","")
except:
return "0.2.20"
install_llama()