在我的数据训练期间,我的GPU利用率约为40%,我清楚地看到有一个基于张量流分析器的大量时间的数据复制操作(参见附图)。我认为“MEMCPYHtoD”选项是将批量从CPU复制到GPU,并阻止GPU被使用。无论如何都要将数据预取到GPU?还是我还没有看到其他问题?
以下是数据集的代码:
X_placeholder = tf.placeholder(tf.float32, data.train.X.shape)
y_placeholder = tf.placeholder(tf.float32, data.train.y[label].shape)
dataset = tf.data.Dataset.from_tensor_slices({"X": X_placeholder,
"y": y_placeholder})
dataset = dataset.repeat(1000)
dataset = dataset.batch(1000)
dataset = dataset.prefetch(2)
iterator = dataset.make_initializable_iterator()
next_element = iterator.get_next()
答案 0 :(得分:1)
预取到单个GPU :
prefetch_to_device
更灵活的方法,例如通过使用tf.data.experimental.copy_to_device(...)
明确复制到GPU,然后进行预取。这样可以避免prefetch_to_device
必须是管道中的最后一个转换的限制,并允许合并其他技巧来优化Dataset
管道性能(通过覆盖线程池分布来优化tf.contrib.data.AUTOTUNE
)。tf.data
选项进行预取,该方法允许dataset = dataset.apply(tf.data.experimental.copy_to_device("/gpu:0"))
dataset = dataset.prefetch(tf.contrib.data.AUTOTUNE)
运行时根据您的系统和环境自动调整预取缓冲区的大小。最后,您可能最终会执行以下操作:
import React, { Component } from "react";
import { connect } from "react-redux";
import {MenuItem,NavDropdown,NavItem,Navbar,Nav,Button} from "react-bootstrap";
import PropTypes from "prop-types";
import { signIn } from "../actions";
class Header extends Component {
static contextTypes = {
router: PropTypes.object
};
renderContent() {
switch (this.props.fetchUser) {
case null:
return;
case false:
return (
<Button bsStyle="success" onClick={this.props.signIn}>
Login
</Button>
);
default:
return (
<Button bsStyle="success" onClick={this.props.signOut}>
Logout
</Button>
);
}
}
render() {
return (
<div>
<Navbar inverse collapseOnSelect>
<Navbar.Header>
<Navbar.Brand>
<a href="/">React-Bootstrap</a>
</Navbar.Brand>
</Navbar.Header>
</Navbar>
<ul>{this.renderContent}</ul>
</div>
);
}
}
function mapStateToProps({ auth }) {
return { auth };
}
export default connect(mapStateToProps,{ signIn })(Header);
答案 1 :(得分:0)
我相信您现在可以使用prefetch_to_device来解决此问题。代替该行:
[uwsgi]
plugins = python3
uid = gitlab-tools
chdir = /usr/lib/python3/dist-packages/gitlab_tools/
socket = /tmp/gitlab-tools.sock
chmod-socket = 777
module = wsgi
callable = app
buffer-size = 32768
做
dataset = dataset.prefetch(2)