如何在 GPU 上训练 XGBoost 模型但在 CPU 上运行预测而不分配任何GPU RAM?
我的情况:我tree_method='gpu_hist'用 Python 创建了一个 XGBoot 模型 ( ) predictor='cpu_predictor',然后在 GPU 上训练它,然后将其保存(pickle)到磁盘,然后从磁盘读取模型,然后用它进行预测。
我的问题:一旦模型开始进行预测,即使我在 CPU 上运行它,它仍然会分配一些少量的 GPU RAM(大约 289MB)。这是一个问题,原因如下:
那么,如何告诉 XGBoost 不分配任何GPU RAM 并仅使用 CPU 和常规 RAM 进行预测呢?
非常感谢您的帮助!
基本上,我需要建议如何与此处描述的相反:
我不想 VIM覆盖系统剪贴板,当我删除编辑器中的东西.对我来说,通常的工作流程是用鼠标选择一段代码(让我们称之为#1),然后转到另一段代码(让我们称之为#2),在视觉模式中选择#2 vim,使用"c"删除它,并使用鼠标中键粘贴#1.使用新的行为,而不是粘贴#1,我粘贴#2.
在vim 7.2中我可以做到这一点,但在vim 7.4中我不能.我想使用7.4由于正确的C++ 11语法高亮,但这种改变的默认行为正在扼杀我.
我认为,它与vim 的"+ xterm_clipboard"和/或"+ clipboard"功能有关(vim --version),我需要以某种方式将它们更改为"-xterm_clipboard"和/或"-clipboard".我尝试使用选项"--with-x = no"重新编译vim 7.4,但不知怎的,它没有帮助.
请帮助我默认禁用vim中的复制/粘贴到系统剪贴板.
谢谢!
如何告诉 python multiprocessing 应该使用哪个 pickle 协议进行序列化?
问题是我想在并行进程中使用一个大的 Pandas DataFrame 处理multiprocessing.Pool.apply_async,结果我得到以下错误:
溢出错误:无法序列化大于 4 GiB 的字节对象
根据此链接https://github.com/stan-dev/pystan/issues/197,问题可能是由于使用默认版本的 pickle 协议(pickle.DEFAULT_PROTOCOL=3)进行多处理,而 protocol=pickle.HIGHEST_PROTOCOL =4 可以用来避免这个问题。
感谢您的帮助!
更新:
以下候选解决方案(基于@juanpa.arrivillaga 引用的链接)
from multiprocessing.reduction import ForkingPickler
class ForkingPicklerHighest(ForkingPickler):
@classmethod
def dumps(cls, obj, protocol=None):
return ForkingPickler.dumps(obj, protocol=pickle.HIGHEST_PROTOCOL)
multiprocessing.connection._ForkingPickler = ForkingPicklerHighest
Run Code Online (Sandbox Code Playgroud)
产生以下错误:
struct.error: 'i' 格式需要 -2147483648 <= number <= 2147483647
因此需要一个更好的(即有效的)解决方案!
python serialization pickle multiprocessing python-multiprocessing
当我从源代码手动编译 python 时(使用--enable-shared),我在目录中得到一个动态库lib。例如:
$ ls $PYTHON_INSTALLATION_DIRECTORY/lib
libpython3.9.so libpython3.9.so.1.0 libpython3.so pkgconfig python3.9
Run Code Online (Sandbox Code Playgroud)
但是,当我使用pyenv安装 python 时,我只得到一个静态库:
$ ls .../pyenv/versions/3.9.13/lib
libpython3.9.a pkgconfig python3.9
Run Code Online (Sandbox Code Playgroud)
如何强制pyenv安装Python动态库?我应该运行什么命令而不是
$ pyenv install --verbose 3.9.13
Run Code Online (Sandbox Code Playgroud)
(我需要编译一个需要链接python动态库的软件项目)
非常感谢您的帮助!
如何根据类模板参数值选择类模板成员函数的参数类型?
这是一个例子:
#include <memory>
template <class T, bool plainPointer=true>
class C
{
// pseudocode below
void f(plainPointer ? T * x : std::shared_ptr<T> x) { /*implementation*/ }
};
Run Code Online (Sandbox Code Playgroud)
也就是说,如果plainPointer==true,应该定义以下类成员函数:
void f(T * x) { /*implementation*/ }
Run Code Online (Sandbox Code Playgroud)
否则,应定义此成员函数:
void f(std::shared_ptr<T> x) { /*implementation*/ }
Run Code Online (Sandbox Code Playgroud)
我希望这两个函数都有一个实现,并且只有 的参数类型f应该是plainPointer依赖的。
如何在 MultiIndex 上以不同级别连接 2 个 pandas DataFrame?
import pandas as pd
t1 = pd.DataFrame(data={'a1':[0,0,1,1,2,2],
'a2':[0,1,0,1,0,1],
'x':[1.,2.,3.,4.,5.,6.]})
t1.set_index(['a1','a2'], inplace=True)
t1.sort_index(inplace=True)
t2 = pd.DataFrame(data={'b1':[0,1,2],
'y':[20.,40.,60.]})
t2.set_index(['b1'], inplace=True)
t2.sort_index(inplace=True)
Run Code Online (Sandbox Code Playgroud)
>>> t1
x
a1 a2
0 0 1.0
1 2.0
1 0 3.0
1 4.0
2 0 5.0
1 6.0
>>> t2
y
b1
0 20.0
1 40.0
2 60.0
Run Code Online (Sandbox Code Playgroud)
加入 'a1' => 'b1' 的预期结果:
x y
a1 a2
0 0 1.0 20.0
1 2.0 20.0
1 0 3.0 40.0
1 4.0 40.0
2 …Run Code Online (Sandbox Code Playgroud) 如何将具有可为空整数数据类型的 pandas DataFrame 保存到“表”格式的 HDF 文件中?
# input data
import pandas as pd, numpy as np
df = pd.DataFrame(index=list(range(2)), data={'x':[np.uint8(1)]*2}, dtype='UInt8')
df.to_hdf('temp.h5', 'data', format='table')
# raises the following exceptions:
# AttributeError: module 'tables' has no attribute 'Uint8Col'
# Exception: cannot find the correct atom type -> [dtype->UInt8,items->Index(['x'], dtype='object')] module 'tables' has no attribute 'Uint8Col'
# 'fixed' format does not work either:
df.to_hdf('temp.h5', 'data', format='fixed')
# raises the following exception:
# TypeError: objects of type ``IntegerArray`` are not supported in this …Run Code Online (Sandbox Code Playgroud) 有没有更好的方法来检查 pandas Series 值是否在 pandas Interval 中:
import pandas as pd, numpy as np
x = pd.Series(np.linspace(4.0,7.8,num=20))
i = pd.Interval(5.0, 6.0, closed='left')
result = (i.left<=x) & (x<i.right)
Run Code Online (Sandbox Code Playgroud)
是否可以不太明确地计算结果,即无需访问i.left, i.right, i.closed?x.isin(i)类似或 的东西x in i。
感谢您的帮助!
我正在尝试在 CentOS-7 下安装(通过pyenv )Python-3.11.4。它可以安装,但没有 GUI。我收到以下错误消息:
Installing Python-3.11.4...
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/.../pyenv/versions/3.11.4/lib/python3.11/tkinter/__init__.py", line 38, in <module>
import _tkinter # If this fails your Python may not be configured for Tk
^^^^^^^^^^^^^^^
ModuleNotFoundError: No module named '_tkinter'
WARNING: The Python tkinter extension was not compiled and GUI subsystem has been detected. Missing the Tk toolkit?
Installed Python-3.11.4 to /.../pyenv/versions/3.11.4
Run Code Online (Sandbox Code Playgroud)
而Python-3.9.16在同一台机器上安装成功。根据Python 3.11 Build Changes,要求安装“Tcl/Tk 版本 8.5.12 或更高版本”。我有
$ …Run Code Online (Sandbox Code Playgroud) 如何通过滚动平均值/中位数并删除缺失值来进入熊猫组?即输出应该在计算平均值/中位数之前删除缺失值,而不是在存在缺失值时给我 NaN。
import pandas as pd
t = pd.DataFrame(data={v.date:[0,0,0,0,1,1,1,1,2,2,2,2],
'i0':[0,1,2,3,0,1,2,3,0,1,2,3],
'i1':['A']*12,
'x':[10.,20.,30.,np.nan,np.nan,21.,np.nan,41.,np.nan,np.nan,32.,42.]})
t.set_index([v.date,'i0','i1'], inplace=True)
t.sort_index(inplace=True)
print(t)
print(t.groupby('date').apply(lambda x: x.rolling(window=2).mean()))
Run Code Online (Sandbox Code Playgroud)
给
x
date i0 i1
0 0 A 10.0
1 A 20.0
2 A 30.0
3 A NaN
1 0 A NaN
1 A 21.0
2 A NaN
3 A 41.0
2 0 A NaN
1 A NaN
2 A 32.0
3 A 42.0
x
date i0 i1
0 0 A NaN
1 A 15.0
2 A 25.0
3 A NaN …Run Code Online (Sandbox Code Playgroud)