初始化codna

直接激活或者创建conda环境会报错,例如root@autodl-container-6d25459816-f6e97638:~/autodl-tmp# conda activate base

CondaError: Run 'conda init' before 'conda activate'

需要先运行下面的命令来初始化conda

1
conda init

然后使用下面命令重新加载配置

1
source ~/.bashrc

然后最好把当前使用的终端窗口关掉,另起一个新的终端窗口来使用,接下来就可以正常使用conda命令了

安装nvitop

nvitop 是一个用于监控 NVIDIA GPU 的命令行工具。提供了一个交互式的界面,可以实时显示NVIDIA 显卡的状态和使用情况,训练时可以用来查看显存的占用情况(一般在新终端窗口中查看),使用下面命令安装

1
pip install nvitop

使用下面命令查看

1
nvitop

安装LLaMA-Factory

  1. 首先按步骤执行下面命令,有可能执行git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git会出现连接超时,这时候可以使用科学上网的Windows使用git下载到Windows环境下(下载后是一个文件夹),然后再上传到服务器上,接下来执行剩下的两条命令即可
1
2
3
4
5
6
7
8
9
#   可选,这个目录是服务器的数据盘,一般下载的和上传的东西都放在这里面
cd autodl-tmp/

# 创建LLaMA-Factory虚拟环境,最好选择python=3.10环境
conda create -n LLaMA-Factory python=3.10

git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"
  1. 使用LLaMA Board 可视化进行微调(由 [Gradio] 驱动),先进入LLaMA-Factory的安装目录(因为里面很多依赖使用的是相对路径),然后启动可视化LLaMA-Factory面板
1
llamafactory-cli webui
  1. 后面使用LLaMA-Factory量化导出时要用到auto_gptq,这个包对pytorchcuda版本有要求,有时候不同的版本会出现冲突,导致这个包安装失败,所以最好在创建虚拟环境时先把这个包装了
1
pip install auto_gptq

下载Qwen大模型

使用SDK方式进行下载,首先安装依赖包

1
pip install modelscope

然后,在autodl-tmp新建文件夹llm,然后新建download.py文件,在/root/autodl-tmp/llm/download.py中写入如下代码

1
2
3
#模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('Qwen/Qwen2.5-7B-Instruct',cache_dir='/root/autodl-tmp/llm')

最后执行代码

1
python download.py

AutoDL开启关闭学术加速

学术加速提供了一条绕过网络限制、通往国外学术资源(包括代码仓库)的链路。开启学术加速后,服务器连接目标 Git 仓库服务器的网络流量不再是直接传输,而是通过加速服务商提供的优化路径或服务器进行转发。

未开启学术加速之前,使用git clone克隆仓库大概率会失败,开启学术加速之后大部分仓库都能被成功克隆到服务器上

开启学术加速

1
source /etc/network_turbo

network_turbo文件内容

1
2
3
4
5
6
export no_proxy=localhost,127.0.0.1,modelscope.com,aliyuncs.com,tencentyun.com,wisemodel.cn
export http_proxy=http://172.20.0.113:12798 && export https_proxy=http://172.20.0.113:12798
export REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt
export SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt
echo 设置成功
echo 注意:仅限于学术用途,不承诺稳定性保证

关闭学术加速

1
unset http_proxy && unset https_proxy

ollama相关

安装ollama

开启学术加速之后,输入如下命令

1
curl -fsSL https://ollama.com/install.sh | sh

运行ollama

1
ollama serve

将hf(huggingface)模型转换为gguf

需要用llama.cppconvert_hf_to_gguf.py脚本来转换

1
2
git clone https://github.com/ggerganov/llama.cpp.git
pip install -r llama.cpp/requirements.txt

执行转换

1
2
3
4
5
# 如果不量化,保留模型的效果
python llama.cpp/convert_hf_to_gguf.py ./Meta-Llama-3-8B-Instruct --outtype f16 --verbose --outfile Meta-Llama-3-8B-Instruct-gguf.gguf
# 如果需要量化(加速并有损效果),直接执行下面脚本就可以
python llama.cpp/convert_hf_to_gguf.py ./Meta-Llama-3-8B-Instruct --outtype
q8_0 --verbose --outfile Meta-Llama-3-8B-Instruct-gguf_q8_0.gguf

含义

启动本地的gguf模型,非互联网下载

  1. 创建ModelFile文件,内容如下
1
2
# GGUF文件路径
FROM /root/autodl-tmp/llm/Qwen/Qwen2.5-3B-Instruct-QLoRA-gguf.gguf
  1. 使用ollama create命令创建自定义模型
1
ollama create Qwen2.5-3B-Instruct-QLoRA --file ModeFile
  1. 使用下面命令运行模型
1
ollama run Qwen2.5-3B-Instruct-QLoRA:latest

dify安装

AudoDL不支持在实时计费的实例中使用docker,而dify是基于docker构建的,所以无法在AudoDL的示例中部署dify,只能在Windows环境下使用docker desktop安装dify

AutoDL的docker使用规定

dify安装文档

Docker Compose 部署

  1. 克隆仓库代码
1
2
# 假设当前最新版本为 0.15.3
git clone https://github.com/langgenius/dify.git --branch 0.15.3
  1. 进入 Dify 源代码的 Docker 目录,Windows环境下命令和Linux不太一样,但是都能进入文件夹
1
cd dify/docker
  1. 复制环境配置文件,Windows直接进入文件夹复制改名即可
1
cp .env.example .env
  1. 启动 Docker 容器,下面的命令在cmd中执行也是一样的
1
docker compose up -d
  1. 最后检查是否所有容器都正常运行
1
docker compose ps
  1. 在浏览器打开difyhttp://localhost/install,默认用的是80端口

dify

  1. 镜像和容器磁盘空间占用情况如下

dify容器

安装chromadb

  1. 通过包管理器安装ChromaDB
1
pip install chromada

通过Python代码调用ollama/vLLM的推理模型

需要先安装openai的包,根据不同的推理框架,把URL改一下就可以了。调用逻辑都是一样的,只有地址和端口还有api_key的不一致。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from openai import OpenAI

#定义多轮对话方法
def run_chat_session():
#初始化客户端
client = OpenAI(base_url="http://localhost:11434/v1/",api_key="ollama")
#初始化对话历史
chat_history = []
#启动多轮对话
while True:
#获取用户输入
user_input = input("用户:")
if user_input.lower()=="exit":
print("退出对话")
break
#更新对话历史(添加用户输入)
chat_history.append({"role":"user","content":user_input})
#调用模型回答
try:
chat_complition = client.chat.completions.create(messages=chat_history,model="llama3.2:1b")
#获取最新回答
moedl_responce = chat_complition.choices[0]
print("AI:",moedl_responce.message.content)
#更新对话历史(添加AI模型的回复)
chat_history.append({"role":"assistant","content":moedl_responce.message.content})
except Exception as e:
print("发生错误:",e)
break
if __name__ == '__main__':
run_chat_session()