我正在尝试为我的 CI/CD 过程利用 BUILDKIT for Docker 的缓存/拉取系统。但它没有按预期工作。
我创建了一个虚拟的本地示例(但同样的情况也发生在我的 CI 系统 - AWS CodePipeline,以及 DockerHub 和 AWS ECR 中)。Dockerfile:
# base image
FROM python:3.7-slim
# set working directory
WORKDIR /usr/src/app
# add and install requirements
RUN pip install --upgrade pip
COPY ./requirements.txt /usr/src/app/requirements.txt
RUN pip $PIP_PROXY install --no-cache-dir --compile -r requirements.txt
RUN echo 123
# add app
COPY ./run_test.py /usr/src/app/run_test.py
# run server
CMD ["python", "run_test.py"]
Run Code Online (Sandbox Code Playgroud)
run_test.py 实际上并不有趣,但这里是代码以防万一:
import requests
import time
while True:
time.sleep(1)
print(requests)
Run Code Online (Sandbox Code Playgroud)
您还需要requirements.txt在同一文件夹中创建一个空文件。
事先,我导出了两个环境变量:
export …Run Code Online (Sandbox Code Playgroud) 我转向 CPLEX,因为我有一个很大的线性问题需要解决。
如果我们使用scipy.optimize.linprog表示法:
最小化:c^T * x
服从:A_ub * x <= b_ub 且 A_eq * x == b_eq,
那么我的A_ub矩阵的形状大致为 (20000, 10000):20000 个约束,10000 个变量。
使用 numpy 构造矩阵A_ub、A_eq和向量c、b_ub、b_eq非常快。
但从中创建 CPLEX 问题大约需要 30 秒(这在我的情况下是不可接受的)。发生这种情况是因为他们的 Python API 无法将矩阵作为输入(至少在测试不同场景几天后我找不到这样的功能)。
创建问题的唯一方法是逐列或逐行构造它,如下所示:
problem = cplex.Cplex()
problem.set_problem_type(problem.problem_type.LP)
problem.objective.set_sense(problem.objective.sense.minimize)
problem.variables.add(obj=c)
n_constraints, n_vars = A_ub.shape
index = list(range(n_vars))
list_rhs = list(b_ub)
# for each row (constraint) create a SparsePair instance
sparse_pairs = [cplex.SparsePair(ind=index, val=A_ub[i]) for i in range(n_constraints)]
# this piece takes 30 seconds …Run Code Online (Sandbox Code Playgroud)