1.5-35:求出e的值

总时间限制: 

1000ms

内存限制: 

65536kB

描述

利用公式e = 1 + 1/1! + 1/2! + 1/3! + ... + 1/n! 求e 。

输入

输入只有一行,该行包含一个整数n(2<=n<=15),表示计算e时累加到1/n!。

输出

输出只有一行,该行包含计算出来的e的值,要求打印小数点后10位。

样例输入

10

样例输出

2.7182818011

提示

1、e以及n!用double表示

2、要输出浮点数、双精度数小数点后10位数字,可以用下面这种形式:

printf("%.10f", num);

来源

2005~2006

小飞棍来咯:

#include<stdio.h>
int main()
{
	int n,i;
	double sum=1,a=1;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		a=a*i;
		sum+=1.0/a;
	}
	printf("%.10lf",sum);
	return 0;
}

总时间限制: 

1000ms

内存限制: 

65536kB

描述

利用公式e = 1 + 1/1! + 1/2! + 1/3! + ... + 1/n! 求e 。

输入

输入只有一行,该行包含一个整数n(2<=n<=15),表示计算e时累加到1/n!。

输出

输出只有一行,该行包含计算出来的e的值,要求打印小数点后10位。

样例输入

10

样例输出

2.7182818011

提示

1、e以及n!用double表示

2、要输出浮点数、双精度数小数点后10位数字,可以用下面这种形式:

printf("%.10f", num);

来源

2005~2006

apiVersion: apps/v1 kind: Deployment metadata: name: gpu-demo namespace: kube-system spec: progressDeadlineSeconds: 600 replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: app.kubernetes.io/instance: gpu-demo app.kubernetes.io/name: gpu-demo strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 1 type: RollingUpdate template: metadata: creationTimestamp: null labels: app.kubernetes.io/instance: gpu-demo app.kubernetes.io/name: gpu-demo spec: containers: - name: msv90883-dep image: www.harbor-test1002.com/test/mck/maip-llm-server:24.11.1.1-llm-mo-py3.10 volumeMounts: - name: datavolume mountPath: /models command: - bash - &#39;-c&#39; args: - >- python -m vllm.entrypoints.openai.api_server --port 8000 --disable-custom-all-reduce --gpu-memory-utilization 0.9 --dtype auto --model /models --tensor-parallel-size 1 --served-model-name qwen1.5-1.8b --max-num-seqs=8 --max-model-len 2158 --disable_custom_all_reduce --enable-prefix-caching env: - name: POD_NAME valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.name - name: POD_NAMESPACE valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.namespace imagePullPolicy: IfNotPresent name: model ports: - containerPort: 8081 name: http protocol: TCP resources: limits: cpu: 1 memory: 10Gi nvidia.com/gpu: 1 terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirstWithHostNet nodeSelector: nvidia.com/gpu.present: "true" restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 300 tolerations: - effect: NoSchedule key: gpu operator: Equal value: "on" volumes: - name: datavolume hostPath: path: /home/qwen1.5-1.8b/qwen1.5-1.8n type: Directory 改成物理机器跑
最新发布
09-24
<think> 我们有一个Kubernetes Deployment配置文件,现在需要将其修改为适用于物理机器运行的配置(即不使用Kubernetes,直接在物理机上运行)。 原Kubernetes配置包含应用信息、容器设置、资源限制等,我们要运行的是qwen1.5-1.8b模型。 步骤分析: 1. 原Kubernetes配置中,我们通常会有容器镜像、资源限制(CPU、内存)、环境变量、卷挂载等。 2. 转换为物理机运行,我们需要: a. 安装必要的软件环境(如Python、CUDA等) b. 准备模型文件(下载或从原有位置获取) c. 将原容器内的启动命令转换为物理机上的启动命令 d. 根据资源限制,调整物理机上的进程资源限制(如使用`ulimit`或`systemd`的资源控制) e. 处理环境变量和文件挂载(将挂载点转换为物理机上的目录) 注意:原Kubernetes配置未给出,我们假设一个典型的部署Qwen1.5模型的Kubernetes Deployment配置如下(用户未提供,但根据问题描述,我们需要转换这样的配置): 假设原配置如下: ``` apiVersion: apps/v1 kind: Deployment metadata: name: qwen-deployment spec: replicas: 1 selector: matchLabels: app: qwen template: metadata: labels: app: qwen spec: containers: - name: qwen-container image: qwen1.5-1.8b-inference-image:latest # 假设的自定义镜像 ports: - containerPort: 8000 resources: limits: nvidia.com/gpu: 1 cpu: "4" memory: 8Gi requests: nvidia.com/gpu: 1 cpu: "2" memory: 4Gi env: - name: MODEL_PATH value: "/app/model" volumeMounts: - name: model-storage mountPath: /app/model volumes: - name: model-storage hostPath: path: /data/qwen1.5-1.8b ``` 转换步骤: 1. **软件环境准备**: 物理机上需要安装与容器内相同的环境。根据之前提供的部署步骤,我们需要: - 安装Python 3.10+ - 安装CUDA(>=11.8)和cuDNN - 创建虚拟环境并安装依赖(torch, transformers, accelerate, vllm等) 2. **模型文件准备**: 将原配置中挂载到容器内的模型路径(即物理机上的`/data/qwen1.5-1.8b`)作为模型存储位置。 如果模型尚未下载,需要按照之前的方法下载模型到该目录。 3. **启动命令转换**: 原容器启动命令(在Dockerfile中可能是`CMD`或`ENTRYPOINT`)需要转换为物理机上的启动命令。 假设原容器启动命令为: `python -m vllm.entrypoints.openai.api_server --model $MODEL_PATH --port 8000` 那么物理机上对应的启动命令为(在虚拟环境中): `python -m vllm.entrypoints.openai.api_server --model /data/qwen1.5-1.8b --port 8000` 4. **资源限制调整**: Kubernetes中的资源限制(CPU:4, 内存:8Gi)在物理机上可以通过以下方式实现: - CPU:使用`taskset`绑定CPU核心(可选)或通过进程的nice调整优先级。 - 内存:虽然没有严格的限制,但我们可以监控内存使用避免超出。如果必须限制,可以使用`systemd`的`MemoryMax`等配置,或者使用`ulimit`(但ulimit主要限制进程的内存分配,不是硬性限制)。 - GPU:原配置申请了1个GPU,在物理机运行时,可以设置环境变量`CUDA_VISIBLE_DEVICES`来指定使用的GPU。 5. **环境变量设置**: 原Kubernetes配置中的环境变量,我们在物理机启动时可以直接设置,例如: `export MODEL_PATH=/data/qwen1.5-1.8b` 6. **持续运行与监控**: 在物理机上,我们可以使用`systemd`服务来管理进程,确保服务在后台持续运行,并在失败时重启。 具体操作步骤: **步骤1:安装基础软件** ```bash # 安装Python 3.10 sudo apt update sudo apt install python3.10 python3.10-venv # 安装CUDA(如果未安装) # 参考:https://developer.nvidia.com/cuda-downloads # 安装cuDNN(如果未安装) # 参考:https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html ``` **步骤2:准备模型目录** ```bash # 创建模型存放目录(如果不存在) sudo mkdir -p /data/qwen1.5-1.8b sudo chown -R $USER:$USER /data/qwen1.5-1.8b # 下载模型(如果尚未下载) cd /data/qwen1.5-1.8b git clone https://huggingface.co/Qwen/Qwen1.5-1.8B . # 或者使用snapshot_download(需要安装huggingface_hub) ``` **步骤3:创建虚拟环境并安装依赖** ```bash python3.10 -m venv /opt/qwen-env source /opt/qwen-env/bin/activate pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 pip install vllm transformers accelerate ``` **步骤4:编写启动脚本** 创建一个启动脚本`/usr/local/bin/start_qwen.sh`,内容如下: ```bash #!/bin/bash # 设置环境变量 export MODEL_PATH=/data/qwen1.5-1.8b # 激活虚拟环境 source /opt/qwen-env/bin/activate # 启动vLLM服务 exec python -m vllm.entrypoints.openai.api_server \ --model $MODEL_PATH \ --tensor-parallel-size 1 \ --gpu-memory-utilization 0.85 \ --max-num-seqs 16 \ --served-model-name qwen1.5-1.8b \ --port 8000 ``` 赋予执行权限: `sudo chmod +x /usr/local/bin/start_qwen.sh` **步骤5:创建systemd服务** 创建文件`/etc/systemd/system/qwen.service`: ``` [Unit] Description=Qwen1.5-1.8b Inference Service After=network.target [Service] User=your_username # 替换为运行服务的用户 Group=your_groupname ExecStart=/usr/local/bin/start_qwen.sh Restart=always RestartSec=30 Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/qwen-env/bin" # 资源限制(根据Kubernetes配置的内存限制8Gi) MemoryMax=8G CPUQuota=400% # 相当于4核(100%代表1个核的100%,所以4核为400%) [Install] WantedBy=multi-user.target ``` 注意: - `MemoryMax`:设置最大内存为8GB,超出则会被OOM killer杀死(类似于Kubernetes的内存限制)。 - `CPUQuota`:设置CPU使用上限为400%,即最多使用4个核心的100%。 然后启动服务: `sudo systemctl daemon-reload` `sudo systemctl start qwen` **步骤6:指定GPU(可选)** 如果物理机有多个GPU,可以通过设置环境变量指定: `Environment="CUDA_VISIBLE_DEVICES=0"` # 在[Service]部分添加 这样,我们就将Kubernetes Deployment配置转换为了物理机上的systemd服务,并保持了类似的资源限制。 注意事项: - 物理机上的GPU驱动必须安装正确。 - 如果物理机资源不足(如显存不够),需要调整模型加载参数(如使用量化)。 相关问题: 1. 如何将Kubernetes的资源请求和限制转换为物理机的资源控制? 2. 在物理机上如何实现类似Kubernetes的滚动更新? 3. 物理机部署时如何实现高可用? 4. 如何监控物理机上的模型服务? 5. 如何将物理机部署迁移回Kubernetes? </think> ### 将 Kubernetes Deployment 配置转换为物理机运行方案 #### 一、核心配置转换思路 1. **容器镜像 → 本地环境** Kubernetes 容器镜像中的依赖需转换为物理机本地安装: ```bash # 基础环境 sudo apt install python3.10 python3.10-venv docker.io nvidia-driver-535 # Python依赖 python3.10 -m venv qwen-env source qwen-env/bin/activate pip install torch==2.1.2 transformers==4.37.0 accelerate vllm huggingface_hub ``` 2. **资源限制 → 系统级约束** Kubernetes 的 `resources.limits` 需转换为物理机控制: ```bash # 内存限制 (例如 8GiB) ulimit -v 8589934592 # 8GB in bytes # GPU隔离(单卡场景) export CUDA_VISIBLE_DEVICES=0 ``` 3. **存储卷 → 本地目录** Kubernetes 的 `volumeMounts` 映射为本地路径: ```bash # 创建模型存储目录 mkdir -p /opt/qwen-models/1.8b cd /opt/qwen-models/1.8b # 下载模型 git lfs install git clone https://huggingface.co/Qwen/Qwen1.5-1.8B ``` #### 二、启动命令转换示例 **原始 Kubernetes 配置片段:** ```yaml command: ["python", "-m", "vllm.entrypoints.openai.api_server"] args: - "--model=/app/qwen1.5-1.8b" - "--port=8000" - "--max-num-seqs=16" ``` **物理机启动脚本 (`start_qwen.sh`):** ```bash #!/bin/bash # 资源隔离 export CUDA_VISIBLE_DEVICES=0 ulimit -v 8589934592 # 8GB内存限制 # 激活环境 source /path/to/qwen-env/bin/activate # 启动服务 python -m vllm.entrypoints.openai.api_server \ --model /opt/qwen-models/1.8b/Qwen1.5-1.8B \ --port 8000 \ --max-num-seqs 16 \ --gpu-memory-utilization 0.85 \ --served-model-name qwen1.5-1.8b ``` #### 三、系统服务化部署 1. **创建 systemd 服务 (`/etc/systemd/system/qwen.service`):** ```ini [Unit] Description=Qwen1.5-1.8B Inference Service After=network.target [Service] User=ai-user Group=ai-group WorkingDirectory=/opt/qwen-service ExecStart=/bin/bash /opt/qwen-service/start_qwen.sh Restart=always RestartSec=30 Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin" Environment="CUDA_VISIBLE_DEVICES=0" # 资源限制 (等效K8s limits) MemoryMax=8G CPUQuota=400% # 限制4核心 [Install] WantedBy=multi-user.target ``` 2. **管理命令:** ```bash sudo systemctl daemon-reload sudo systemctl start qwen sudo systemctl enable qwen # 开机自启 ``` #### 四、关键配置对照表 | Kubernetes 配置项 | 物理机实现方案 | |--------------------------|----------------------------------| | `spec.containers.image` | 本地Python虚拟环境 + 依赖安装 | | `resources.limits.memory`| `systemd`的`MemoryMax`参数 | | `resources.limits.cpu` | `systemd`的`CPUQuota`参数 | | `volumeMounts` | 本地目录挂载 | | `livenessProbe` | systemd的`Restart=`故障恢复机制 | | `replicas` | 单个进程 + 性能调优 | #### 五、性能优化建议 1. **GPU 利用率提升:** ```bash # 量化部署 (AWQ) pip install autoawq python -m vllm.entrypoints.openai.api_server \ --quantization awq \ ... # 其他参数 ``` 2. **大上下文支持:** $$ \text{显存需求} \approx (\text{模型参数} \times 2) + (\text{序列长度} \times \text{隐藏层} \times 10) \text{ bytes} $$ 通过 `--max-model-len` 调整上下文长度[^1] 3. **多GPU并行(可选):** ```bash --tensor-parallel-size 2 # 双GPU ``` #### 六、验证服务状态 ```bash # 检查服务日志 journalctl -u qwen.service -f # 发送测试请求 curl http://localhost:8000/v1/completions \ -H "Content-Type: application/json" \ -d &#39;{"model": "qwen1.5-1.8b", "prompt": "深圳的市花是", "max_tokens": 50}&#39; ``` > **重要提示**:物理机部署需特别注意 GPU 驱动兼容性,推荐使用 Docker 作为中间层以保持环境隔离性: > ```bash > docker run --gpus all -p 8000:8000 \ > -v /opt/qwen-models:/models qwen-image \ > python -m vllm.entrypoints.openai.api_server --model /models/1.8b > ``` --- ### 相关问题 1. 如何在物理机实现 Kubernetes 风格的滚动更新? 2. 物理机部署模型如何实现负载均衡? 3. 如何监控物理机上的模型服务资源消耗? 4. 物理机部署时如何管理模型版本更新? 5. 哪种场景更适合物理机而非 Kubernetes 部署 AI 模型? [^1]: 显存计算公式参考 vLLM 官方文档中的内存管理章节
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值