小编nt8*_*t86的帖子

使用张量调用 Model.fit/在 CPU 上执行操作而不是 GPU/Tensorflow 2.1

我正在尝试在 python 中进行强化学习。我使用的是 Tensorflow 2.1,我的机器有多个 GPU(带有 CUDA 10.2 驱动程序 440.59)。我正在使用 tf.device() 在我的 GPU 上分配操作。我没有使用 tf.distribute.Strategy。我正在构建我的模型:

    with tf.device(USE_GPU):
        model = build_keras_Seq()
Run Code Online (Sandbox Code Playgroud)

其中 build_keras_Seq() 使用功能 AP 创建模型:

    model = tf.keras.Model(inputs=inputs, outputs=outputs)
Run Code Online (Sandbox Code Playgroud)

我所有的输入都是与我的模型在同一 GPU 上分配的张量。

    with tf.device(USE_GPU):
        self.images_gpu = tf.zeros(shape=(1,IMG_HEIGHT,IMG_WIDTH), dtype=tf.int16) # (165, 160, 1)
        self.actions_gpu = tf.zeros(shape=(1,), dtype=tf.int16)
        self.rewards_gpu = tf.zeros(shape=(1,), dtype=tf.int16)
        self.dones_gpu = tf.zeros(shape=(1,), dtype=tf.int16)
Run Code Online (Sandbox Code Playgroud)

我的目标是由 @tf.function 计算的,它实现了预期的 SARSA 并在 GPU 上返回一个张量:

    target_train is on device:  /job:localhost/replica:0/task:0/device:GPU:1
Run Code Online (Sandbox Code Playgroud)

当我调用model.fit时,似乎在CPU上执行了很多操作(见下文)导致性能不佳。我的理解是张量在被发送到 GPU 之前被移回 CPU。关于如何防止这种行为并将张量直接从 GPU 馈送到同一 GPU 上托管的模型的任何想法?

2020-02-23 09:49:32.100259: I tensorflow/core/common_runtime/eager/execute.cc:573] Executing op …
Run Code Online (Sandbox Code Playgroud)

gpu reinforcement-learning tf.keras tensorflow2.0

7
推荐指数
0
解决办法
521
查看次数

避免 .Net Standard 中的非跨平台依赖关系

我将现有库从 .Net Framework 4.7.2 移植到 .Net Standard 2.0,以使其跨平台,但仍保留与 .Net Framework 应用程序的兼容性。

我不明白如何避免非跨平台依赖关系

我的库使用动态类型Settings.Designer.cs。

为了在 .Net Standard 中支持它,我必须添加对NuGet包的引用,这反过来又添加了对其他一些包(如 )的依赖项,即使我不使用任何与安全相关的代码。Microsoft.CSharpSystem.Configuration.ConfigurationManagerSystem.Security.Principal.Windows

最后两个显然是Microsoft.Windows.Compatibility包的一部分。

NuGet 依赖项

  1. 如何查明这些依赖项是否跨平台(即 Windows 平台扩展的一部分)?

当我转到.NET API 浏览器时,我看到它Microsoft.Csharp不在 .Net Standard 2.0 中,但它在 .Net Platform Extensions 2.1 及更高版本中。这是否意味着这个包不是跨平台的?是否有其他服务可以检查 NuGet 包的平台支持?

.NEt API 结果

  1. 当我在 .Net Core 2.1 上使用我的库创建一个简单的测试应用程序并将其发布到 Linux 平台时dotnet publish -c Release --self-contained true --runtime linux-x64,该应用程序实际上在 Linux 计算机上运行良好。这是否意味着我的库是完全跨平台的,我可以在生产中安全地使用它,或者我System.PlatformNotSupportedException将来可能仍然会在 Linux 上遇到?

c# cross-platform .net-standard

5
推荐指数
0
解决办法
134
查看次数