prompt
我希望你能扮演一个 Linux 终端。我会输入命令,你会回复终端应该显示的内容。我只希望你在回复中只包含一个独特的代码块,不要写解释,除非我要求你这样做。当我需要用英语告诉你一些信息时,我会用花括号 {像这样} 包裹文本。我的第一个命令是 pwd。
操作系统
cat /etc/os-release
NAME="Ubuntu"
VERSION="22.04.1 LTS (Jammy Jellyfish)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 22.04.1 LTS"
VERSION_ID="22.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=jammy
UBUNTU_CODENAME=jammy
xinference和langchatchat python版本
Python 3.8.19
[GCC 11.2.0]
安装依赖
apt-get update && apt-get install -y git net-tools sudo nano telnet
SSH自动断网修复
#!/bin/bash
# fix_ssh_disconnect.sh
# 这个脚本用于配置SSH服务器和客户端的KeepAlive设置,以防止SSH连接自动断开。
# 检查是否以root或具有sudo权限的用户运行
if [[ $EUID -ne 0 ]]; then
echo "这个脚本需要以root用户或具有sudo权限的用户运行。"
exit 1
fi
# 配置SSH服务器
configure_sshd() {
SSHD_CONFIG="/etc/ssh/sshd_config"
echo "备份原始的sshd_config文件..."
cp "$SSHD_CONFIG" "${SSHD_CONFIG}.bak_$(date +%F_%T)}"
echo "配置服务器端的KeepAlive设置..."
# 删除已有的相关配置
sed -i '/^ClientAliveInterval/d' "$SSHD_CONFIG"
sed -i '/^ClientAliveCountMax/d' "$SSHD_CONFIG"
sed -i '/^TCPKeepAlive/d' "$SSHD_CONFIG"
# 添加新的配置
echo "ClientAliveInterval 60" >> "$SSHD_CONFIG"
echo "ClientAliveCountMax 3" >> "$SSHD_CONFIG"
echo "TCPKeepAlive yes" >> "$SSHD_CONFIG"
echo "重启SSH服务以应用更改..."
if command -v systemctl >/dev/null 2>&1; then
if systemctl is-active --quiet sshd; then
systemctl restart sshd
elif systemctl is-active --quiet ssh; then
systemctl restart ssh
else
echo "无法找到 SSH 服务(sshd 或 ssh),尝试使用 service 命令重启。"
service ssh restart || /etc/init.d/ssh restart || { echo "无法重启 SSH 服务,请手动重启。"; exit 1; }
fi
elif command -v service >/dev/null 2>&1; then
service ssh restart || /etc/init.d/ssh restart || { echo "无法重启 SSH 服务,请手动重启。"; exit 1; }
else
/etc/init.d/ssh restart || { echo "无法重启 SSH 服务,请手动重启。"; exit 1; }
fi
echo "SSH服务器配置已更新并重启。"
}
# 配置SSH客户端
configure_ssh_client() {
SSH_CLIENT_CONFIG="$HOME/.ssh/config"
echo "配置客户端的KeepAlive设置..."
# 创建.ssh目录如果不存在
mkdir -p "$HOME/.ssh"
# 如果配置文件不存在,则创建一个新的
if [ ! -f "$SSH_CLIENT_CONFIG" ]; then
touch "$SSH_CLIENT_CONFIG"
chmod 600 "$SSH_CLIENT_CONFIG"
fi
# 备份现有的客户端配置
cp "$SSH_CLIENT_CONFIG" "${SSH_CLIENT_CONFIG}.bak_$(date +%F_%T)}"
# 删除现有的相关配置
sed -i '/^ServerAliveInterval/d' "$SSH_CLIENT_CONFIG"
sed -i '/^ServerAliveCountMax/d' "$SSH_CLIENT_CONFIG"
# 添加新的KeepAlive配置
{
echo ""
echo "Host *"
echo " ServerAliveInterval 60"
echo " ServerAliveCountMax 3"
} >> "$SSH_CLIENT_CONFIG"
echo "SSH客户端配置已更新。"
}
# 主执行部分
echo "开始配置SSH服务器和客户端的KeepAlive设置..."
configure_sshd
configure_ssh_client
echo "所有配置已完成。请重新连接SSH以应用更改。"
安装xinference
#!/bin/bash
# ====================================================
# Xinference 管理脚本
# ====================================================
# 功能:
# 1. 安装 Xinference 及所有支持的依赖
# 2. 启动 Xinference
# 3. 停止 Xinference
# 4. 卸载 Xinference 及所有依赖
# 5. 安装并配置嵌入模型
# 6. 安装并配置重排序模型
# 7. 退出
# ====================================================
# 配置变量
CONDA_ENV_NAME="xinference_env" # Conda 环境名称
CONDA_PYTHON_VERSION="3.10.14" # Python 版本
PIP_MIRROR="https://pypi.tuna.tsinghua.edu.cn/simple" # PyPI 镜像
XINFERENCE_PACKAGE="xinference" # Xinference 包名称,安装基础包
XINFERENCE_PORT=6006 # Xinference 端口号
CONDA_ENVS_DIR="/root/autodl-tmp/conda_envs" # Conda 环境存放路径(数据盘)
CONDA_PKGS_DIR="/root/autodl-tmp/conda_pkgs" # Conda 包缓存路径(数据盘)
FLASHINFER_INSTALL_DIR="/root/autodl-tmp/flashinfer" # 全局设置安装目录
TMP_DIR="/root/autodl-tmp/tmp" # 临时文件目录(数据盘)
# ----------------------------------------------------
# 模型配置
# ----------------------------------------------------
EMBEDDING_MODELS=("jina-embeddings-v3" "bge-large-zh-v1.5")
RERANK_MODELS=("bce-reranker-base_v1" "bge-reranker-base" "bge-reranker-large" "bge-reranker-v2-gemma" "bge-reranker-v2-m3" "bge-reranker-v2-minicpm-layerwise" "jina-reranker-v2" "minicpm-reranker")
# ----------------------------------------------------
# 检查 Conda 是否已安装
# ----------------------------------------------------
check_conda() {
if ! command -v conda &> /dev/null
then
echo "错误: 未检测到 Conda。请先安装 [Anaconda](https://www.anaconda.com/) 或 [Miniconda](https://docs.conda.io/en/latest/miniconda.html)。"
exit 1
fi
}
# ----------------------------------------------------
# 配置 Conda 环境路径和包缓存路径
# ----------------------------------------------------
configure_conda() {
echo "配置 Conda 环境目录为 '$CONDA_ENVS_DIR' 和包缓存目录为 '$CONDA_PKGS_DIR'..."
mkdir -p "$CONDA_ENVS_DIR"
mkdir -p "$CONDA_PKGS_DIR"
mkdir -p "$TMP_DIR"
# 修改 .condarc 文件
if [ ! -f ~/.condarc ]; then
touch ~/.condarc
fi
# 添加 envs_dirs
if ! grep -q "envs_dirs:" ~/.condarc; then
echo "envs_dirs:
- $CONDA_ENVS_DIR" >> ~/.condarc
echo "Conda 环境目录已配置到 '$CONDA_ENVS_DIR'。"
else
if ! grep -q "$CONDA_ENVS_DIR" ~/.condarc; then
sed -i "/envs_dirs:/a\ - $CONDA_ENVS_DIR" ~/.condarc
echo "已添加 '$CONDA_ENVS_DIR' 到 Conda 环境目录。"
else
echo "Conda 环境目录已包含 '$CONDA_ENVS_DIR'。"
fi
fi
# 添加 pkgs_dirs
if ! grep -q "pkgs_dirs:" ~/.condarc; then
echo "pkgs_dirs:
- $CONDA_PKGS_DIR" >> ~/.condarc
echo "Conda 包缓存目录已配置到 '$CONDA_PKGS_DIR'。"
else
if ! grep -q "$CONDA_PKGS_DIR" ~/.condarc; then
sed -i "/pkgs_dirs:/a\ - $CONDA_PKGS_DIR" ~/.condarc
echo "已添加 '$CONDA_PKGS_DIR' 到 Conda 包缓存目录。"
else
echo "Conda 包缓存目录已包含 '$CONDA_PKGS_DIR'。"
fi
fi
# 设置临时文件目录
export TMPDIR="$TMP_DIR"
echo "临时文件目录已设置为 '$TMP_DIR'。"
}
# ----------------------------------------------------
# 清理 Conda 包缓存以释放空间
# ----------------------------------------------------
clean_conda_cache() {
echo "清理 Conda 包缓存..."
conda clean -a -y
}
# ----------------------------------------------------
# 检测硬件类型以设置 CMAKE_ARGS
# ----------------------------------------------------
detect_hardware_and_set_cmake() {
CMAKE_ARGS=""
# if lspci | grep -i nvidia > /dev/null; then
# echo "检测到 NVIDIA GPU。设置 CMAKE_ARGS='-DLLAMA_CUBLAS=on -DLLAMA_OPENMP=on'..."
# CMAKE_ARGS="-DLLAMA_CUBLAS=on -DLLAMA_OPENMP=on"
# elif uname -m | grep -i arm > /dev/null && uname -s | grep -i darwin > /dev/null; then
# echo "检测到 Apple Silicon (M 系列)。设置 CMAKE_ARGS='-DLLAMA_METAL=on -DLLAMA_OPENMP=on'..."
# CMAKE_ARGS="-DLLAMA_METAL=on -DLLAMA_OPENMP=on"
# elif lspci | grep -i amd > /dev/null; then
# echo "检测到 AMD GPU。设置 CMAKE_ARGS='-DLLAMA_HIPBLAS=on -DLLAMA_OPENMP=on'..."
# CMAKE_ARGS="-DLLAMA_HIPBLAS=on -DLLAMA_OPENMP=on"
# else
# echo "未检测到特定 GPU。llama-cpp-python 将使用默认配置。"
# CMAKE_ARGS="-DLLAMA_OPENMP=on"
# fi
}
# ----------------------------------------------------
# 安装 llama-cpp-python
# ----------------------------------------------------
install_llama_cpp_python() {
echo "安装 llama-cpp-python..."
# 安装系统依赖
echo "安装系统依赖..."
sudo apt-get update
sudo apt-get install -y libc6-dev libomp-dev libgomp1
# 更新 CMake
echo "更新 CMake..."
pip install --upgrade cmake -i "$PIP_MIRROR"
# 设置 LDFLAGS 和 CMAKE_ARGS
export LDFLAGS="-ldl"
export CMAKE_ARGS="-DLLAMA_OPENMP=off"
# 安装 llama-cpp-python
# if [ -z "$CMAKE_ARGS" ]; then
# pip install llama-cpp-python -i "$PIP_MIRROR"
# else
# CMAKE_ARGS="$CMAKE_ARGS" pip install llama-cpp-python -i "$PIP_MIRROR"
# fi
CMAKE_ARGS="-DGGML_CUDA=on -DLLAVA_BUILD=off" pip install -U llama-cpp-python -i "$PIP_MIRROR" --force-reinstall --no-cache-dir
if [ $? -ne 0 ]; then
echo "警告: 安装 llama-cpp-python 失败。请根据您的硬件手动安装。"
else
echo "llama-cpp-python 安装成功。"
fi
}
# ----------------------------------------------------
# 安装 flashinfer
# ----------------------------------------------------
# ----------------------------------------------------
# 安装 flashinfer(使用镜像源和额外索引 URL)
# ----------------------------------------------------
install_flashinfer() {
echo "安装 flashinfer(使用镜像源和额外索引 URL)..."
# 创建安装目录
mkdir -p "$FLASHINFER_INSTALL_DIR" || {
echo "错误: 创建目录 $FLASHINFER_INSTALL_DIR 失败。"
return 1
}
# 使用镜像源和额外索引 URL 安装 flashinfer
PIP_TARGET="$FLASHINFER_INSTALL_DIR" pip install flashinfer --extra-index-url https://flashinfer.ai/whl/cu124/torch2.4 || {
echo "错误: 安装 flashinfer 失败。请检查网络连接或手动安装。"
echo "你可以尝试以下方法:"
echo "1. 确保网络连接正常。"
echo "2. 手动下载 flashinfer 包并安装:"
echo " - 从 https://flashinfer.ai/whl/cu124/torch2.4 下载适合的 .whl 文件。"
echo " - 使用以下命令安装:"
echo " PIP_TARGET='$FLASHINFER_INSTALL_DIR' pip install /path/to/flashinfer-xxx.whl"
return 1
}
echo "flashinfer 安装成功。"
}
# ----------------------------------------------------
# 安装 Xinference 及所有依赖
# ----------------------------------------------------
install_xinference() {
echo "=============================="
echo "开始安装 Xinference 及所有依赖..."
echo "=============================="
# 配置 Conda 环境目录和包缓存目录
configure_conda
# 清理 Conda 包缓存以释放空间
clean_conda_cache
# 创建 Conda 环境
echo "创建 Conda 环境 '$CONDA_ENV_NAME',Python $CONDA_PYTHON_VERSION..."
conda create -y -n "$CONDA_ENV_NAME" python="$CONDA_PYTHON_VERSION"
if [ $? -ne 0 ]; then
echo "错误: 创建 Conda 环境失败。"
exit 1
fi
# 激活环境
echo "激活 Conda 环境 '$CONDA_ENV_NAME'..."
source "$(conda info --base)/etc/profile.d/conda.sh"
conda activate "$CONDA_ENV_NAME"
# 安装 PyTorch 及 CUDA 工具包
echo "安装 PyTorch 及 CUDA 工具包..."
if ! conda install -y pytorch torchvision torchaudio pytorch-cuda=12.4 -c pytorch -c nvidia; then
echo "警告: 通过 Conda 安装 PyTorch 及 CUDA 工具包失败。尝试使用 pip 安装..."
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
fi
if [ $? -ne 0 ]; then
echo "错误: 安装 PyTorch 失败。"
exit 1
fi
# 安装 Xinference 依赖项
pip install -U xinference -i "$PIP_MIRROR"
if [ $? -ne 0 ]; then
echo "警告: 安装 Xinference 失败。"
fi
# 安装 llama-cpp-python 及 flashinfer
install_llama_cpp_python
#install_flashinfer
}
# ----------------------------------------------------
# 启动 Xinference
# ----------------------------------------------------
start_xinference() {
echo "启动 Xinference..."
# 启动命令需要根据实际情况调整
nohup xinference --port "$XINFERENCE_PORT" > "$TMP_DIR/xinference.log" 2>&1 &
echo "Xinference 已启动,日志位于 '$TMP_DIR/xinference.log'"
}
# ----------------------------------------------------
# 停止 Xinference
# ----------------------------------------------------
stop_xinference() {
echo "停止 Xinference..."
pkill -f xinference
echo "Xinference 已停止。"
}
# ----------------------------------------------------
# 卸载 Xinference 及所有依赖
# ----------------------------------------------------
uninstall_xinference() {
echo "卸载 Xinference 及所有依赖..."
conda deactivate
conda remove -y -n "$CONDA_ENV_NAME"
pip uninstall -y xinference llama-cpp-python flashinfer
clean_conda_cache
echo "Xinference 已卸载,所有相关依赖已清理。"
}
# ----------------------------------------------------
# 安装并配置嵌入模型
# ----------------------------------------------------
install_embedding_models() {
echo "安装并配置嵌入模型..."
for model in "${EMBEDDING_MODELS[@]}"; do
echo "安装模型 '$model'..."
pip install "$model" -i "$PIP_MIRROR"
done
}
# ----------------------------------------------------
# 安装并配置重排序模型
# ----------------------------------------------------
install_rerank_models() {
echo "安装并配置重排序模型..."
for model in "${RERANK_MODELS[@]}"; do
echo "安装模型 '$model'..."
pip install "$model" -i "$PIP_MIRROR"
done
}
# ----------------------------------------------------
# 显示菜单
# ----------------------------------------------------
show_menu() {
clear
echo "==============================================="
echo " Xinference 管理脚本"
echo "==============================================="
echo "1. 安装 Xinference 及所有依赖"
echo "2. 启动 Xinference"
echo "3. 停止 Xinference"
echo "4. 卸载 Xinference 及所有依赖"
echo "5. 安装并配置嵌入模型"
echo "6. 安装并配置重排序模型"
echo "7. 退出"
echo "==============================================="
echo -n "请选择操作: "
}
# ----------------------------------------------------
# 主菜单
# ----------------------------------------------------
while true; do
show_menu
read -r choice
case $choice in
1)
install_xinference
;;
2)
start_xinference
;;
3)
stop_xinference
;;
4)
uninstall_xinference
;;
5)
install_embedding_models
;;
6)
install_rerank_models
;;
7)
echo "退出脚本..."
break
;;
*)
echo "无效的选项,请重新选择。"
;;
esac
done
cuda安装
#!/bin/bash
# 设置 CUDA 安装目录
CUDA_INSTALL_DIR="/root/autodl-tmp/cuda"
# 设置 CUDA 配置目录
CUDA_RUN_DIR="/root/autodl-tmp/cuda_config"
# 设置 CUDA 安装包目录和路径
CUDA_PACKAGE_DIR="/root/autodl-tmp/cuda_package"
CUDA_RUN_FILE_PATH="$CUDA_PACKAGE_DIR/cuda_12.4_installer.run"
CUDA_DOWNLOAD_URL="https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_linux.run"
# 设置自定义临时目录
CUSTOM_TMP_DIR="/root/autodl-tmp/tmp"
# 如果 CUDA 安装目录已存在,则删除该目录
if [ -d "$CUDA_INSTALL_DIR" ]; then
echo "检测到 CUDA 安装目录 $CUDA_INSTALL_DIR 存在,正在删除该目录..."
rm -rf "$CUDA_INSTALL_DIR"
fi
# 检查并创建配置目录
if [ ! -d "$CUDA_RUN_DIR" ]; then
echo "创建配置目录: $CUDA_RUN_DIR"
mkdir -p "$CUDA_RUN_DIR"
fi
# 检查并创建 CUDA 安装包目录
if [ ! -d "$CUDA_PACKAGE_DIR" ]; then
echo "创建 CUDA 安装包目录: $CUDA_PACKAGE_DIR"
mkdir -p "$CUDA_PACKAGE_DIR"
fi
# 检查并创建自定义临时目录
if [ ! -d "$CUSTOM_TMP_DIR" ]; then
echo "创建自定义临时目录: $CUSTOM_TMP_DIR"
mkdir -p "$CUSTOM_TMP_DIR"
fi
# 设置 TMPDIR 环境变量
export TMPDIR="$CUSTOM_TMP_DIR"
# 检查 .run 文件是否存在
if [ -f "$CUDA_RUN_FILE_PATH" ]; then
echo "$CUDA_RUN_FILE_PATH 已存在,跳过下载步骤。"
else
# 下载 CUDA 12.4 安装包
echo "正在下载 CUDA 12.4 安装包..."
wget "$CUDA_DOWNLOAD_URL" -O "$CUDA_RUN_FILE_PATH"
# 检查下载是否成功
if [ $? -ne 0 ]; then
echo "下载 CUDA 安装包失败。"
exit 1
fi
fi
# 检查 CUDA 是否已经安装
if [ -d "$CUDA_INSTALL_DIR/bin" ]; then
echo "CUDA 已经安装在 $CUDA_INSTALL_DIR,跳过安装步骤。"
else
# 赋予执行权限
chmod +x "$CUDA_RUN_FILE_PATH"
# 安装 CUDA 12.4
echo "正在将 CUDA 12.4 安装到 $CUDA_INSTALL_DIR..."
"$CUDA_RUN_FILE_PATH" --silent --toolkit --toolkitpath="$CUDA_INSTALL_DIR" --defaultroot="$CUDA_INSTALL_DIR"
# 检查安装是否成功
if [ -d "$CUDA_INSTALL_DIR/bin" ]; then
echo "CUDA 12.4 已成功安装在 $CUDA_INSTALL_DIR。"
else
echo "CUDA 12.4 安装失败。"
exit 1
fi
fi
# 配置环境变量(仅追加一次)
if ! grep -q "$CUDA_INSTALL_DIR/bin" ~/.bashrc; then
echo "配置环境变量 PATH..."
echo "export PATH=$CUDA_INSTALL_DIR/bin:\$PATH" >> ~/.bashrc
fi
if ! grep -q "$CUDA_INSTALL_DIR/lib64" ~/.bashrc; then
echo "配置环境变量 LD_LIBRARY_PATH..."
echo "export LD_LIBRARY_PATH=$CUDA_INSTALL_DIR/lib64:\$LD_LIBRARY_PATH" >> ~/.bashrc
fi
# 如果需要使用配置目录中的配置文件,可以在这里添加
# 例如:
# if [ -f "$CUDA_RUN_DIR/some_config_file" ]; then
# source "$CUDA_RUN_DIR/some_config_file"
# fi
# 使环境变量生效
source ~/.bashrc
# 验证安装
echo "验证 CUDA 安装..."
nvcc --version
# 检查 GPU 状态
echo "检查 GPU 状态..."
nvidia-smi
echo "CUDA 12.4 的安装和配置已完成!"
cuda卸载
#!/bin/bash
# 设置要卸载的 CUDA 版本(留空则完全卸载)
CUDA_VERSION="" # 例如 "12.4",如果完全卸载则留空 ""
# 完全卸载 CUDA
if [ -z "$CUDA_VERSION" ]; then
echo "完全卸载 CUDA 及其相关组件..."
apt-get --purge remove "*cublas*" "cuda*" "nsight*" "nvidia*" -y
rm -rf /usr/local/cuda*
echo "CUDA 已完全卸载。"
else
# 卸载特定版本的 CUDA
echo "卸载 CUDA 版本: $CUDA_VERSION..."
apt-get --purge remove "cuda-$CUDA_VERSION*" -y
rm -rf /usr/local/cuda-$CUDA_VERSION
echo "CUDA $CUDA_VERSION 已卸载。"
fi
# 清理残留配置文件
echo "清理残留配置文件..."
apt-get autoremove -y
apt-get autoclean -y
# 删除环境变量中的 CUDA 配置
echo "删除环境变量中的 CUDA 配置..."
sed -i '/cuda-/d' ~/.bashrc
sed -i '/CUDA_HOME/d' ~/.bashrc
sed -i '/PATH=.*cuda/d' ~/.bashrc
sed -i '/LD_LIBRARY_PATH=.*cuda/d' ~/.bashrc
# 使环境变量更改生效
source ~/.bashrc
# 验证卸载
echo "验证 CUDA 是否已卸载..."
if ! command -v nvcc &> /dev/null; then
echo "CUDA 卸载成功。"
else
echo "CUDA 卸载失败,请手动检查。"
fi