0.导入相关依赖
- # 升级pip
- python -m pip install --upgrade pip
-
- # 下载速度慢可以考虑一下更换镜像源。
- # -i https://pypi.tuna.tsinghua.edu.cn/simple
-
- pip install modelscope==1.9.5
- pip install transformers==4.35.2
- pip install streamlit==1.24.0
- pip install sentencepiece==0.1.99
- pip install accelerate==0.24.1
1.通过snapshot_download函数。这是魔塔提供的函数
- import torch
- from modelscope import snapshot_download, AutoTokenizer, AutoModelForCausalLM
- import os
- model_dir = snapshot_download('Shanghai_AI_Laboratory/internlm-20b', cache_dir='/root/zyc/internlm', revision='v1.0.2')
- tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)
- torch_dtype=torch.bfloat16
- model = AutoModelForCausalLM.from_pretrained(model_dir, torch_dtype=torch.bfloat16, trust_remote_code=True).cuda()
- model = model.eval()
- inputs = tokenizer(["来到美丽的大自然,我们发现"], return_tensors="pt")
- for k,v in inputs.items():
- inputs[k] = v.cuda()
- gen_kwargs = {"max_length": 128, "top_p": 0.8, "temperature": 0.8, "do_sample": True, "repetition_penalty": 1.05}
- output = model.generate(**inputs, **gen_kwargs)
- output = tokenizer.decode(output[0].tolist(), skip_special_tokens=True)
- print(output)
2.通过huggingface下载,这是外网
①配置环境(每次使用前都需要)
export HF_ENDPOINT="https://hf-mirror.com"
②huggingface-cli使用之前需要登陆
- huggingface-cli login
- #输入token
③下载huggingface插件
pip install -U huggingface_hub
④下载加速插件
pip install -U hf-transfer
⑤下载模型
huggingface-cli download --resume-download id-or-name> --cache-dir /path/to/cache
3.通过大模型做一个flask问答接口
- from flask import Flask, request, jsonify
- import torch
- from modelscope import snapshot_download, AutoTokenizer, AutoModelForCausalLM
-
- app = Flask(__name__)
-
-
- model_dir = 'model_path'
- tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)
- torch_dtype = torch.bfloat16
- model = AutoModelForCausalLM.from_pretrained(model_dir, torch_dtype=torch.bfloat16, trust_remote_code=True).cuda()
- model = model.eval()
- app.model_loaded = True
-
- @app.route('/generate_text', methods=['POST'])
- def generate_text():
- data = request.get_json() # 假设客户端发送的是JSON格式的数据
- if not data or 'prompt' not in data:
- return jsonify({"error": "缺少prompt参数"}), 400
-
- prompt = data['prompt']
- inputs = tokenizer([prompt], return_tensors="pt")
- for k, v in inputs.items():
- inputs[k] = v.cuda()
-
- gen_kwargs = {
- "max_length": 128,
- "top_p": 0.8,
- "temperature": 0.8,
- "do_sample": True,
- "repetition_penalty": 1.05
- }
- output = model.generate(**inputs, **gen_kwargs)
- generated_text = tokenizer.decode(output[0].tolist(), skip_special_tokens=True)
-
- return jsonify({"generated_text": generated_text})
-
- if __name__ == '__main__':
- app.run(host='0.0.0.0', port=8848 ,debug=True)
4.conda镜像配置
- #展示所有镜像源
- conda config --show channels
- #删除镜像源
- conda config --remove channels xxx
- #配置清华源
- conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/
- conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
- conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
- conda config --set show_channel_urls yes
- #单次下载时指定镜像源
- conda install -c url 包名
5.加载cuda
这里要介绍一下环境模块管理工具。环境模块是一种工具,允许用户管理和控制其软件环境。例如使用Lmod,管理工具使用module命令。
- # 列出所有可用的模块
- module avail
-
- # 加载特定版本的 CUDA
- module load cuda/11.4
-
- # 卸载当前加载的 CUDA 模块
- module unload cuda/11.4
-
- # 列出当前加载的所有模块
- module list
-
- # 显示有关特定模块的帮助信息
- module help cuda/11.4
-
- # 显示加载指定模块时设置的环境变量和其他信息
- module show cuda/11.4
6.对cuda的理解
cuda分驱动程序和工具包,通常驱动程序版本可以大于工具包版本。torch与cuda版本匹配指的是与cuda工具包版本匹配。
- #查看cuda驱动和gpu使用信息
- nvidia-smi
- #查看cuda工具版本
- nvcc --version
7.报错解决:driver initialization failed, you might not have a CUDA gpu.
最近学校机房搬迁,重装了cuda,再次运行gpu任务时一直报错,了解到cuda驱动有一个重要的环境变量CUDA_VISIBLE_DEVICES,这个变量用来控制gpu对cuda的可见性。
- # 示例设置,索引0167块gpu对cuda可见,可以写入到个人配置文件中,这样每次连接服务器自动执行命令
- export CUDA_VISIBLE_DEVICES=0,1,6,7
- # 当然,也别忘了刷新配置文件
- source ./xxx