分类
命令行 工具

TensorFlow 容器支持 GPU

一台 GPU 机器,直接访问 gpu 是没有问题的,但是安装 tensorflow 后,一直访问不到 GPU,看了一下 TensorFlow 支持容器化安装,是可以支持 GPU 的。

tensorflow 容器化安装步骤

前提

必须先在宿主机上 安装 NVIDIA driver 和 Docker。

安装 nvidia-docker

Installation Guide — NVIDIA Cloud Native Technologies documentation

安装 tensorflow

docker pull tensorflow/tensorflow:2.11.0-gpu

检查是否安装成功

启动 tensorflow

docker run --gpus all -it   -v $PWD:/tmp -w /tmp tensorflow/tensorflow:2.11.0-gpu bash

检查是否支持 gpu

nvidia-smi

 docker run --gpus all -it --rm tensorflow/tensorflow:2.11.0-gpu \
   python -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))"
分类
命令行 工具

我在 Docker 上犯的错误

今天犯了一个错误,犯这个错误的原因是没有理解 docker 的设计哲学,大概花了 3 个小时来折腾一个事情。

起因

一个容器没有安装 python 的一些依赖库,我在容器里面安装了依赖库,不想每次都安装这些依赖库,所以我想把这个容器保存成新的镜像。

错误的方法

有两种方式来解决这个问题。
方式一,构建新的 Dockerfile。
方式二,对一个正在运行的容器,通过 commit 来创建新的镜像。

反思

我选择了方式二,我把容器当虚拟机使了,这是没有理解 Docker 设计的哲学。

找了一文章,这文章总结的很好,有利于我去了解 docker 的设计哲学,我就把他翻译在下面。

使用 Docker 不要做的几件事情

所以你最终屈服于容器,发现它们解决了很多问题并且有很多优势

  1. 第一:容器是不可变的——操作系统、库版本、配置、文件夹和应用程序都包含在容器中。您保证在 QA 中测试过的相同镜像将以相同的行为到达生产环境。
  2. 第二:容器是轻量级的——容器的内存占用很小。容器将只为主进程分配内存,而不是数百或数千 MB。
  3. 第三:容器速度快——您可以像启动典型的 Linux 进程一样快地启动容器。您可以在几秒钟内启动一个新容器,而不是几分钟。

然而,许多用户仍然像对待典型的虚拟机一样对待容器,而忘记了容器有一个重要的特性:容器是一次性的。
“容器是短暂的”。

这种特性迫使用户改变他们应该如何处理和管理容器的思维方式;我将解释您应该做的事情以继续发挥容器的最大优势:

分类
工具

Excalidraw 画草图推荐

经常会画一些草图,用来整理思路,或者画一些产品的原型图,和团队的人沟通,以前一直用 draw.io,昨天有朋友推荐,今天试用了一下 Excalidraw | Hand-drawn look & feel • Collaborative • Secure,还是很吸引人的,分收费和免费版,大部分场景其实免费版就够了,收费版主要是强调协作和存储。

画了一个登录页面的草图,还是很方便的,也有第三方的库,可惜类库不太丰富。

202211235jeaJ2
分类
认知

Laravel Docker Centos8 使用

fanyi 这个小工具,以前是直接跑在腾讯云的轻量服务器上的,用 Golang 写的,最近加了一个小功能,用 php 重写了,php 就要搭建各种环境,直接在腾讯云的轻量服务器上编译 php 不成功,主要是你 cpu 高,他就直接给你 kill 了,所以就用 docker 来解决。

构建 PHP 的运行环境

从 php:8.1-fpm 开始构建,安装上相关依赖,然后设置运行用户的相关权限。

vim Dockerfile
FROM php:8.1-fpm

# Arguments defined in docker-compose.yml
ARG user
ARG uid

# Install system dependencies
RUN apt-get update && apt-get install -y \
    git \
    curl \
    libpng-dev \
    libonig-dev \
    libxml2-dev \
    zip \
    unzip

# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install PHP extensions
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd

# Get latest Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Create system user to run Composer and Artisan Commands
RUN useradd -G www-data,root -u $uid -d /home/$user $user
RUN mkdir -p /home/$user/.composer && \
    chown -R $user:$user /home/$user


# Set working directory
WORKDIR /var/www

USER $user
分类
命令行

Mac 与 Linux 随机抽样文本文件

有时碰到一个大文件,要对这个文件进行采样,比如采样多少条,发现 linux 和 mac 上都有一个不错的命令,可以对文件进行抽样。

mac 安装 gshuf

gshuf 集成到了 coreutils 里面,通过 brew 直接安装 coreutils 就可以。

brew install coreutils

mac 上使用 gshuf

gshuf -n 20000 full.txt > sample.csv

linux 上使用 shuf 对文本文件采样

shuf -n N input > output

Mac 上使用 gnu 的工具包

brew install coreutils findutils gnu-tar gnu-sed gawk gnutls gnu-indent gnu-getopt grep
分类
有意思的项目

openai 的 token 与 temperature

openai 是一个很好的工具,用来写商品标题、商品介绍、广告文案、推广邮件,确实很方便,已经是工作之中不可缺少的一个工具,现在的竞争就是看谁的工具更加先进。

在和同事交流的时候,发现大家对 openai 这里面两个最重要的概念(token, temperatuere)理解都不一样,查了一下手册,感觉说的很清晰的。

token

openai 的 token 与 区块链上的 token 完全不一样,他应该是语义不可再分的最小单位。

I have an orange cat named Butterscotch.

Ihaveanorangecatnamed 每一个都是一个 token,这里有 6 个 token。
Butterscotch 就会拆分成 Butterscotch 四个 token。

. 标点符号也是一个 token。

也就是复杂的会拆分,简单的就不会再拆分了,文档里面也提到了,很多 token 以空格开始,如

“ hello” and “ bye”

openai token 说明

openai token 提取

分类
推广

stripo.email 电商邮件模板推荐

购买了 Stripo 的会用,每一个月需要 15 美元,支持 50 次的导出,stripo.email 虽然有很多模板,但是这些模板质量高的很少,挑了好久才找到几个模板,适合做电商的邮件营销。

服装类促销模板

我选择服饰类促销模板主要考虑三个因素,图片、商品列表、价格,模板中必须有这三类元素,才是一个完整的服饰类促销模板。

电商促销模板

Just in Trends Email Template by Liubov Rolenko — Stripo.email

20221102TdUpvL

Dress Code Email Template by Oleg Ponamarchuk — Stripo.email

这个非常喜欢上面这个 Dress Code 模板,有价格对比,把购买用红色按钮放大,非常有冲击性。

20221102sFIGHo

Hello Winter Email Template by Anastasiia Babintseva — Stripo.email

适合卖冬天的服饰,给人暖暖的感觉。

分类
命令行

nvm 在 mac 上安装

brew 安装 nvm

brew install nvm

安装完成之后,是不能直接使用的,需要建立一个目录和设置环境亦是

建立目录

mkdir ~/.vim

设置 zsh 环境变量

设置 zsh 的环境变量,我因为用的是 zsh,和 bash 有一些不一样,brew –prefix 可以找到 brew 安装的根目录。

export NVM_DIR=~/.nvm
source $(brew --prefix nvm)/nvm.sh

brew –prefix nvm 返回 nvm 的安装目录。

brew 禁止自动更新

每次运行 brew install 的时候,都会检查更新,特别慢,可以禁止自动更新,也可以设置到环境变量里面。

HOMEBREW_NO_AUTO_UPDATE=1 brew install 

导入到环境变量里面

export HOMEBREW_NO_AUTO_UPDATE=1
分类
工具

海外邮件促销注意事项

市场占有率

特意分析了一下客户喜欢用什么样的邮箱,最受欢迎的还是 gmail,别的几家占有率也非常高。

  • gmail
  • hotmail
  • yahoo
  • icloud
  • mail.ru(俄语)
  • aol

邮件格式

现在的邮件大部分都支持 HTML 格式,但是在处理 HTML 的隐私保护方面,实现都不太一样,比如 gmail 和 mail.ru,如果你的 HTML 有外链图片,他会默认把图片下载到自己的服务器,然后在邮件里面直接显示图片,对于用户来讲,肯定是好的,这样防止邮件被跟踪,像 yahoo,hotmail 之类的,会提示用户,说邮件有图片外链,是否要加载图片。

Gmail Html 邮件格式

我发送了一封 Html 的邮件到 Gmail 的邮箱,图片直接可以展示,但是查看 个图片的地址,是 Gmail 直接把图片进行了进址替换,不再只向原来的地址,这样可以防止被跟踪。

gmail 邮件模板
分类
工具

最好用的邮件营销模板网站推荐

发邮件如果要自己去设计,然后再把设计稿变成 HTML 文件,这是一个非常低效的过程,好在有很多邮件模板网站,以下是几个我常用的邮件模板生成网站。

stripo.email

Stripo — FREE Email Template Builder: Drag and Drop Html Email Editor
有免费和收费版本,免费版本主要是导出次数限制,模板限制,最主要的特点是模板丰富,并且模板的质量非常高,可以覆盖大部分场景,交互友好,导出方便。

行业场景丰富
stripo.email 使用